
Vulnérabilité d'acceptation de données externes non fiables avec des données fiables dans Nuxt3
Dépôt pour la configuration de l'environnement de la vulnérabilité de cache poisoning survenant dans nuxt3 >=3.0.0 <3.16.0
Lorsqu'un CDN se trouve devant le serveur nuxt et que le CDN ne stocke que le chemin (sans les paramètres de requête) comme clé de cache, la requête pour /?/_payload.json n'enregistre que / comme clé de cache. Ainsi, lorsqu'un autre utilisateur envoie une requête pour /, la réponse correspondant à _payload.json est renvoyée depuis le cache au lieu de la page normale.
Si un attaquant envoie des requêtes à /?/_payload.json à chaque intervalle d'expiration du cache, cela peut provoquer une vulnérabilité DoS où les autres utilisateurs ne peuvent pas recevoir la page normale.
git clone https://github.com/jiseoung/CVE-2025-27415-PoC.git
cd CVE-2025-27415-PoC
docker-compose up --build
'/' : Page destinée à induire un cache poisoning
Effectivement, si vous envoyez une requête à http://localhost/?/_payload.json pour créer un cache pour le chemin '/', lorsque vous accédez à http://localhost/, la réponse de la page '/' n'est pas renvoyée ; à la place, le contenu de _payload.json stocké dans le cache est renvoyé en JSON.
'/ex' : Page qui exécute automatiquement l'attaque de cache poisoning
Target Origin : Chemin sur lequel effectuer l'attaque de cache poisoning
Dans cet environnement, vous devez utiliser le conteneur nginx nommé nuxt-nginx sur l'hôte. Car le serveur d'automatisation de l'attaque est construit avec Flask dans un autre conteneur, donc si vous envoyez à localhost, il sera reconnu comme le localhost de ce conteneur.
Cache Interval : Période d'envoi des requêtes (en secondes). Définissez-la légèrement plus courte que l'intervalle de disparition du cache du CDN.
Dans cet environnement, les requêtes sont stockées dans le cache pendant 60 secondes.