Skip to main content

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 la persona atacante. This type of vulnerability arises due to insufficient or non-existent validation of parameters controlling HTTP redirects.

Este tipo de vulnerabilidad puede ser aprovechado para llevar a cabo ataques de phishing, ya que permite engañar a las personas usuarias para que visiten sitios no deseados bajo la apariencia de enlaces legítimos.

In a typical Open HTTP Redirect vulnerability, the application receives a URL parameter to define the destination address after an action, such as a login or a successful operation. Example:

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

Si la aplicación no valida correctamente el parámetro redirect, la persona usuaria será redirigida directamente al sitio proporcionado.

Low

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

Links

Al analizar el código de los enlaces, 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 se modifica el enlace utilizando otra dirección, como la de OSDO, el enlace llevará al sitio web de OSDO en lugar de cargar la página prevista por la aplicación:

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

Medium

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

Low attack in medium level

Al revisar el código fuente, se comprueba que la aplicación verifica 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 comprobación, se puede probar utilizando una URL relativa al protocolo. Modificando el enlace de la siguiente forma, se consigue realizar la redirección:

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

High

At this level, when attempting any of the above attacks, an error message appears indicating that you can only redirect to the info page.

Medium Attack in high level

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

<?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 los enlaces utilizan el archivo info.php, se puede pasar como parámetro "válido" a otro dominio para evadir esta restricción:

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