
Preuve de concept d'exploitation pour CVE-2026-72744, une vulnérabilité de divulgation d'informations dans le point de terminaison de l'espace de travail Chrome DevTools du serveur de développement Nuxt. Démontre la faille et vérifie le correctif.
Ce dépôt est une preuve de concept (PoC) de la vulnérabilité de fuite d'informations CVE-2026-72744 présente dans l'endpoint workspace de Chrome DevTools du serveur de développement Nuxt.
Le serveur de développement vulnérable détermine si la connexion entrante est locale en se basant non pas sur l'adresse TCP peer, mais sur des en-têtes HTTP tels que Host, que l'attaquant peut spécifier. Si le serveur de développement est lié à 0.0.0.0, un attaquant non authentifié sur le LAN peut obtenir le chemin absolu du projet et un UUID de workspace persistant en envoyant une requête avec l'en-tête Host: localhost.
Ce PoC lance Nuxt 4.5.0 (version vulnérable) et 4.5.1 (version corrigée) dans Docker, puis envoie la même requête depuis l'hôte pour vérifier la différence de comportement. Aucune lecture/écriture de fichier ni exécution de code n'est effectuée.
À utiliser uniquement à des fins éducatives et pour des validations de sécurité autorisées. N'envoyez pas de requêtes non autorisées vers des environnements tiers.
>= 4.4.7, < 4.5.1 et >= 3.21.7, < 3.21.104.5.1 / 3.21.10experimental.chromeDevtoolsProjectSettings activé par défautrootDir et de l'UUID de workspace spécifique au projetDans la version vulnérable, isLocalDevRequest traite une requête comme locale si Host figure dans la liste autorisée et qu'aucun en-tête cross-site provenant du navigateur n'est présent. Les clients non-navigateurs peuvent librement omettre ou spécifier ces en-têtes, de sorte que la requête suivante passe l'inspection.
GET /.well-known/appspecific/com.chrome.devtools.json HTTP/1.1
Host: localhost
La version corrigée exige, en plus de la vérification des en-têtes existante, que l'adresse TCP peer réelle soit une adresse de loopback (127.0.0.0/8 ou ::1).
docker compose up -d --build
| URL | Version | Résultat attendu |
|---|---|---|
http://localhost:3000 | Nuxt 4.5.0 | HTTP 200, fuite d'informations |
http://localhost:3001 | Nuxt 4.5.1 | HTTP 403 |
Le premier build peut prendre quelques minutes car il récupère les paquets npm.
python3 exploit.py -t http://localhost:3000 --expect vulnerable
Sortie attendue :
[!] VULNERABLE: the endpoint disclosed workspace.root and workspace.uuid.
python3 exploit.py -t http://localhost:3001 --expect fixed
Sortie attendue :
[+] FIXED: the non-loopback request was rejected with HTTP 403.
curl -i -H 'Host: localhost' \
http://localhost:3000/.well-known/appspecific/com.chrome.devtools.json
curl -i -H 'Host: localhost' \
http://localhost:3001/.well-known/appspecific/com.chrome.devtools.json
Étant donné que la requête passe par la redirection de port Docker, la connexion entrante vue depuis le conteneur n'est pas une adresse de loopback. Cela permet de reproduire sur un seul hôte les conditions équivalentes à une attaque depuis le LAN.
docker compose down -v
exploit.py spécifie Host: localhost et accède à l'endpoint cible sans envoyer Origin, Referer ni Sec-Fetch-Site. La vulnérabilité est confirmée uniquement si la réponse HTTP 200 contient un JSON avec les chaînes workspace.root et workspace.uuid. HTTP 403 est le comportement attendu pour la version corrigée.
Mettez à jour Nuxt vers 4.5.1 ou version ultérieure pour la série 4, et vers 3.21.10 ou version ultérieure pour la série 3. Si la mise à jour n'est pas possible, liez le serveur de développement uniquement à l'adresse de loopback ou définissez experimental.chromeDevtoolsProjectSettings: false.