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?
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
Falta de validación en el parámetro:
El servidor no verifica si la URL proporcionada es confiable.
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:
URLs relativas:
El atacante usa rutas parciales que el servidor convierte automáticamente:
/%5C%5Cmalicious.com
Codificación:
Codificar caracteres especiales puede evadir validaciones ingenuas:
http://victim.com/redirect?url=%68%74%74%70%3A%2F%2Fmalicious.com
Uso de protocolos alternativos:
Algunos validadores no verifican protocolos como
javascript:
.http://victim.com/redirect?url=javascript:alert('XSS')
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?