
Prueba de concepto que demuestra el robo de cookies CVE-2022-0155 mediante redirección HTTP en el paquete npm follow-redirects, incluyendo scripts de servidor Express y cliente para probar ataques de dependencias transitivas.
Este repositorio contiene una demostración de la vulnerabilidad CVE-2022-0155. La vulnerabilidad fue detectada por ranjit-git y se describe en detalle aquí. El propósito de esta PoC es demostrar que la vulnerabilidad no solo se aplica a escenarios donde follow-redirects se usa como dependencia directa, sino también cuando follow-redirects se usa como dependencia indirecta/transitiva a través de axios.
La vulnerabilidad afecta al paquete npm follow-redirects anterior a la versión 1.14.7. Follow-redirects extiende el módulo HTTP integrado con la capacidad de seguir redirecciones.
Para demostrar la vulnerabilidad, considere el siguiente escenario:
La vulnerabilidad se encuentra en el paso 3, donde las versiones vulnerables de follow-redirects incluyen los mismos encabezados que la solicitud del paso 1. Esto permite que robe, por ejemplo, el ID de sesión del usuario en y obtenga acceso a los datos del usuario.
CookieEl ataque depende de la capacidad del atacante para controlar la redirección a https://attackers-webserver.com.
En la PoC, se utiliza un servidor Express para emular el comportamiento de https://example.com.
El servidor tiene un único endpoint de API GET '/redirect', que redirige al cliente a la URL proporcionada como parámetro.
Esto emula un escenario en el que el atacante puede controlar la URL a la que se redirige al cliente.
npm install
node express-server.js
nc -l -v 8182 # or nc -lnvp 8182 on non-mac systems
node client.js
Debería ver que la terminal que contiene nc imprime esta salida:
GET / HTTP/1.1
Accept: application/json, text/plain, */*
Cookie: session=some-secret-value
User-Agent: axios/0.21.4
Host: localhost:8182
Connection: keep-alive
La vulnerabilidad se ilustra con la presencia del encabezado Cookie en la terminal de nc, ya que el servidor nc (Netcat) se utiliza para representar el servidor web del atacante.