
Nuxt3 の信頼されたデータと共に無関係な信頼できないデータを受け入れる脆弱性
nuxt3 >=3.0.0 <3.16.0 で発生した cache poisoning 脆弱性の環境設定のためのリポジトリ
nuxt サーバーの前に CDN がある場合、CDN が URL クエリを除いたパスのみをキャッシュキーとして保存するとき、/?/_payload.json へのリクエストが / までだけキャッシュキーとして保存されるため、
他のユーザーが / にリクエストを送ると、正常なページではなく _payload.json へのレスポンスがキャッシュから返される脆弱性
攻撃者がキャッシュが消える周期ごとに /?/_payload.json へリクエストを送ると、他のユーザーが正常なページを受け取れなくなる DoS 脆弱性が引き起こされる可能性がある。
https://preo123.tistory.com/19
git clone https://github.com/jiseoung/CVE-2025-27415-PoC.git
cd CVE-2025-27415-PoC
docker-compose up --build
'/' : cache poisoning を誘発するためのページ
実際に http://localhost/?/_payload.json へリクエストを送って '/' パスに対するキャッシュを生成すると、http://localhost/ にアクセスしたとき '/' ページへのレスポンスが返されず、キャッシュに保存された _payload.json の内容が json として返される。
'/ex' : cache poisoning 攻撃を自動的に実行してくれるページ
Target Origin : cache poisoning 攻撃を実行するパス
この環境では、ホストに nginx コンテナである nuxt-nginx を使わなければならない。なぜなら、攻撃自動化サーバーを別のコンテナで Flask で構築したため、localhost に送るとそのコンテナの localhost として認識されるからである。
Cache Interval : リクエストを送る周期(秒)。CDN のキャッシュが消える周期より少し短めに設定する。
この環境では、60秒間リクエストをキャッシュに保存する。