
Уязвимость Nuxt3, связанная с принятием посторонних ненадёжных данных вместе с доверенными данными
Репозиторий для настройки среды эксплуатации уязвимости отравления кэша (cache poisoning) в nuxt3 >=3.0.0 <3.16.0
Когда перед сервером nuxt находится CDN, и CDN сохраняет в качестве ключа кэша только путь без URL-параметров, запрос на /?/_payload.json сохраняется в кэш только по пути /. В результате, когда другой пользователь отправляет запрос на /, из кэша возвращается ответ от _payload.json, а не нормальная страница.
Если злоумышленник будет отправлять запросы на /?/_payload.json с периодичностью, равной времени жизни кэша, это может вызвать DoS-уязвимость, при которой другие пользователи не смогут получить нормальную страницу.
git clone https://github.com/jiseoung/CVE-2025-27415-PoC.git
cd CVE-2025-27415-PoC
docker-compose up --build
'/' : страница для демонстрации отравления кэша
Если отправить запрос на http://localhost/?/_payload.json, создав кэш для пути '/', то при обращении к http://localhost/ вместо ответа со страницы '/' будет возвращено содержимое _payload.json, сохранённое в кэше, в формате JSON.
'/ex' : страница автоматического выполнения атаки отравления кэша
Target Origin : путь для выполнения атаки отравления кэша
В этой среде необходимо использовать контейнер nginx nuxt-nginx на хосте. Потому что сервер автоматизации атаки реализован на Flask в другом контейнере, и если отправлять запросы на localhost, они будут интерпретироваться как localhost этого контейнера.
Cache Interval : период отправки запросов (в секундах). Устанавливается чуть меньше, чем период очистки кэша CDN.
В этой среде запросы хранятся в кэше в течение 60 секунд.