Open Redirect Bypass

🌐 Vulnerabilidad: Open Redirect Bypass


🕵️‍♂️ ¿Qué es un Open Redirect?

Un Open Redirect ocurre cuando una aplicación permite redirigir a una URL externa controlada por un atacante sin validación adecuada. Esto puede ser explotado para engañar a los usuarios, redirigirlos a sitios maliciosos o realizar ataques de phishing.


⚙️ ¿Cómo se produce?

  1. Entrada de usuario en la URL de redirección:

    • La aplicación acepta un parámetro de redirección que especifica la URL a la que debe enviarse al usuario.

    • Ejemplo:

      http://victim.com/redirect?url=http://malicious.com
  2. Falta de validación en el parámetro:

    • El servidor no verifica si la URL proporcionada es confiable.

  3. Uso por parte de un atacante:

    • El atacante utiliza la URL legítima como intermediario para redirigir al usuario hacia un sitio malicioso.


🛠️ Bypass en validación

En muchos casos, las aplicaciones implementan validaciones simples para mitigar los Open Redirects, pero pueden ser burladas mediante técnicas comunes como:

  1. URLs relativas:

    • El atacante usa rutas parciales que el servidor convierte automáticamente:

      /%5C%5Cmalicious.com
  2. Codificación:

    • Codificar caracteres especiales puede evadir validaciones ingenuas:

      http://victim.com/redirect?url=%68%74%74%70%3A%2F%2Fmalicious.com
  3. Uso de protocolos alternativos:

    • Algunos validadores no verifican protocolos como javascript:.

      http://victim.com/redirect?url=javascript:alert('XSS')
  4. Uso de subdominios:

    • Si solo se permiten redirecciones internas, el atacante puede usar subdominios controlados:

      http://trusted.com.malicious.com

🎯 Impacto

  • Phishing: Los usuarios son redirigidos a sitios que imitan aplicaciones legítimas para robar credenciales.

  • Malware: Redirige a sitios que descargan o ejecutan software malicioso.

  • Pérdida de confianza: Los usuarios pierden confianza en el sitio web legítimo al ser redirigidos sin su conocimiento.


📉 Puntaje CVSS v3

  • Vector de ataque: Red (Explotable remotamente)

  • Complejidad del ataque: Baja

  • Impacto en confidencialidad: Medio

  • Impacto en integridad: Bajo

  • Impacto en disponibilidad: Bajo

  • Puntaje CVSS v3: 4.0 - 6.5 (Medio) ⚠️


🧑‍💻 Ejemplo práctico

Código vulnerable en PHP:

<?php
    $url = $_GET['url'];
    header("Location: $url");
?>

📌 Ataque básico:

http://victim.com/redirect?url=http://malicious.com

📌 Bypass usando codificación:

http://victim.com/redirect?url=%68%74%74%70%3A%2F%2Fmalicious.com

📌 Uso de subdominio:

http://victim.com/redirect?url=http://trusted.com.malicious.com

🛡️ ¿Cómo prevenir Open Redirects?

1️⃣ Validación de URLs permitidas

Permitir solo redirecciones hacia una lista blanca de dominios confiables:

<?php
    $allowed_domains = ['example.com', 'trusted.com'];
    $url = $_GET['url'];
    $parsed_url = parse_url($url);

    if (!in_array($parsed_url['host'], $allowed_domains)) {
        die("Redirección no permitida.");
    }

    header("Location: $url");
?>

2️⃣ Uso de rutas relativas seguras

Si las redirecciones son internas, evita permitir URLs absolutas:

<?php
    $url = $_GET['url'];

    // Permitir solo rutas relativas
    if (strpos($url, '/') !== 0) {
        die("Redirección no permitida.");
    }

    header("Location: $url");
?>

3️⃣ Codificación de URLs

Asegúrate de codificar y escapar las entradas antes de procesarlas:

<?php
    $url = htmlspecialchars($_GET['url'], ENT_QUOTES, 'UTF-8');
    header("Location: /$url");
?>

4️⃣ Proveer identificadores en lugar de URLs

Usa identificadores internos para manejar redirecciones:

<?php
    $routes = [
        'home' => '/',
        'profile' => '/user/profile'
    ];
    $key = $_GET['key'];

    if (array_key_exists($key, $routes)) {
        header("Location: " . $routes[$key]);
    } else {
        die("Redirección no válida.");
    }
?>

5️⃣ Auditoría y pruebas

Realiza pruebas de seguridad para identificar patrones de manipulación en las URLs.


💡 Dato extra: Aunque los Open Redirects parecen inofensivos, son comúnmente explotados para ataques de phishing, ya que los usuarios confían en enlaces que contienen dominios legítimos.

🚨 Nota importante: Los navegadores modernos tienen medidas para prevenir redirecciones hacia protocolos peligrosos como javascript:. Sin embargo, no debes depender de estas protecciones.

Última actualización

¿Te fue útil?