Saltar al contenido principal

Open HTTP Redirect

El ataque de Open HTTP Redirect ocurre cuando una aplicación web redirige a los usuarios hacia una URL arbitraria proporcionada por el atacante. Este tipo de vulnerabilidad surge debido a una validación insuficiente o inexistente de los parámetros que controlan las redirecciones HTTP.

Los atacantes aprovechan esta vulnerabilidad principalmente para llevar a cabo ataques de phishing, engañando a usuarios confiados para que visiten sitios maliciosos bajo la apariencia de enlaces legítimos.

En una vulnerabilidad Open HTTP Redirect típica, la aplicación recibe un parámetro de URL para definir la dirección de destino después de una acción, como un inicio de sesión o una operación exitosa. Por ejemplo:

https://example.com/login?redirect=http://malicious-site.com

Si la aplicación no valida correctamente el parámetro redirect, el usuario será redirigido directamente al sitio malicioso proporcionado por el atacante.

Bajo

En este nivel de seguridad, al ingresar en la sección correspondiente, encontramos dos enlaces que nos dirigen hacia otra parte de la web.

Links

Al analizar el código de los enlaces, encontramos lo siguiente, donde se observa que se realiza una redirección al fichero info.php con un parámetro id=1:

<a href="source/low.php?redirect=info.php?id=1">Quote 1</a>

Si modificamos el enlace utilizando otra dirección, como la de OSDO, el enlace nos llevará al sitio web de OSDO en lugar de cargar la página que debería mostrar la aplicación:

<a href="source/low.php?redirect=http://opensecdevops.com">Quote 1</a>

Medio

En este nivel de seguridad, si intentamos nuevamente el ataque realizado en el nivel bajo, obtenemos un mensaje indicando que no se pueden usar URLs absolutas.

Ataque bajo en nivel medio

Al revisar el código fuente, vemos que la aplicación comprueba explícitamente que la URL proporcionada no sea absoluta:

<?php

if (array_key_exists ("redirect", $_GET) && $_GET['redirect'] != "") {
if (preg_match ("/http:\/\/|https:\/\//i", $_GET['redirect'])) {
http_response_code (500);
?>
<p>Absolute URLs not allowed.</p>
<?php
exit;
} else {
header ("location: " . $_GET['redirect']);
exit;
}
}

http_response_code (500);
?>
<p>Missing redirect target.</p>
<?php
exit;
?>

Gracias a esta pista, probamos utilizando una URL relativa al protocolo. Modificando el enlace de la siguiente forma, conseguimos realizar la redirección:

<a href="source/medium.php?redirect=//opensecdevops.com">Quote 1</a>

Alto

En este nivel, al intentar cualquiera de los ataques anteriores, aparece un mensaje de error indicando que únicamente se puede redirigir hacia la página info.

Ataque medio en nivel alto

Al analizar el código de la aplicación, observamos que realiza una comprobación buscando explícitamente la cadena info.php en la URL que proporcionamos:

<?php

if (array_key_exists ("redirect", $_GET) && $_GET['redirect'] != "") {
if (strpos($_GET['redirect'], "info.php") !== false) {
header ("location: " . $_GET['redirect']);
exit;
} else {
http_response_code (500);
?>
<p>You can only redirect to the info page.</p>
<?php
exit;
}
}

http_response_code (500);
?>
<p>Missing redirect target.</p>
<?php
exit;
?>

Dado que previamente hemos observado que los enlaces utilizan el archivo info.php, podemos pasarlo como un parámetro "válido" a nuestro dominio para evadir esta restricción de seguridad:

<a href="source/high.php?redirect=//opensecdevops.com?info.php=1">Quote 1</a>