
Концептуальное доказательство, демонстрирующее кражу cookie через HTTP-редирект (CVE-2022-0155) в npm-пакете follow-redirects, включающее серверные и клиентские скрипты Express для тестирования атак через транзитивные зависимости.
Этот репозиторий содержит демонстрацию уязвимости CVE-2022-0155. Уязвимость была обнаружена ranjit-git и подробно описана здесь. Цель этого PoC — показать, что уязвимость применима не только в сценариях, где follow-redirects используется как прямая зависимость, но и когда follow-redirects используется как косвенная/транзитивная зависимость через axios.
Уязвимость затрагивает npm-пакет follow-redirects версий ниже 1.14.7. Follow-redirects расширяет встроенный HTTP-модуль возможностью следовать перенаправлениям.
Для демонстрации уязвимости рассмотрим следующий сценарий:
Уязвимость заключается в шаге 3, где уязвимые версии follow-redirects включают те же заголовки Cookie, что и запрос на шаге 1.
Это позволяет украсть, например, идентификатор сессии пользователя на и получить доступ к данным пользователя.
Атака зависит от способности злоумышленника контролировать перенаправление на https://attackers-webserver.com.
В PoC для эмуляции поведения https://example.com используется Express-сервер.
Сервер имеет одну конечную точку GET API '/redirect', которая перенаправляет клиента на URL, переданный в качестве параметра.
Это эмулирует сценарий, в котором злоумышленник может контролировать URL, на который перенаправляется клиент.
npm install
node express-server.js
nc -l -v 8182 # or nc -lnvp 8182 on non-mac systems
node client.js
Вы должны увидеть в терминале с nc следующий вывод:
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
Уязвимость демонстрируется наличием заголовка Cookie в терминале nc, так как сервер nc (Netcat) используется для представления веб-сервера злоумышленника.