Lab basato su Docker che riproduce il request smuggling di Next.js CVE-2026-29057, confrontando la versione vulnerabile 15.5.12 con la versione corretta 15.5.13 tramite un payload HTTP chunked grezzo.
Questo repository è un laboratorio di presentazione mirato per CVE-2026-29057. Confronta un target Next.js vulnerabile (15.5.12) con la release corretta (15.5.13) utilizzando la stessa topologia e lo stesso payload HTTP grezzo.
Usalo solo in un laboratorio isolato. Le sonde di request-desynchronization possono interrompere le connessioni condivise in ambienti reali.
Questo repository è adattato dal repository originale del Proof of Concept di Next.js di Nayaka Ghana Subrata. Il pieno merito va all'autore originale per il lavoro fondamentale di proof-of-concept.
Ho riorganizzato e modificato quel lavoro per concentrarmi specificamente su CVE-2026-29057, inclusi i materiali di presentazione, la dimostrazione guidata, lo scenario di laboratorio, i commenti esplicativi e il confronto vulnerabile-versus-corretto. Questo repository è un adattamento educativo e non deve essere confuso con il repository dell'autore originale.
DELETE /api/workspace/tasks/1042.GET /secret.Transfer-Encoding e aggiunge Content-Length: 0, mentre i byte del body vengono comunque inoltrati.| Target | Next.js | Richieste al backend |
|---|---|---|
| Vulnerabile | 15.5.12 | DELETE /api/workspace/tasks/1042, poi GET /secret |
| Corretto | 15.5.13 | solo DELETE /api/workspace/tasks/1042 |
.
├── docker-compose.yml
├── DEMO-RUNBOOK.md
├── PRESENTATION-SCRIPT.md
├── PRESENTATION-QA.md
├── pocs/cve-2026-29057/
│ ├── app/
│ ├── support/server.js
│ ├── next.config.js
│ └── Dockerfile
└── scripts/run-cve-2026-29057.mjs
Requisiti: Docker Compose e Node.js 18 o superiore.
docker compose up --build cve-2026-29057-vuln cve-2026-29057-fixed
node scripts/run-cve-2026-29057.mjs http://localhost:3105
node scripts/run-cve-2026-29057.mjs http://localhost:3106
Evidenza attesa per la versione vulnerabile:
[after] {"backendRequests":["DELETE /api/workspace/tasks/1042","GET /secret"],"flag":"FLAG{one_stream_two_requests}"}
PoC result: vulnerable behavior reproduced.
Flag: FLAG{one_stream_two_requests}
Evidenza attesa per la versione corretta:
[after] {"backendRequests":["DELETE /api/workspace/tasks/1042"],"flag":null}
PoC result: smuggled request was not observed. This usually means the target is patched.
L'evidenza significativa è differenziale: topologia e payload rimangono invariati; differisce solo la versione di Next.js.
Il laboratorio non richiede al presentatore di fingere che un attaccante conosca magicamente entrambi i percorsi:
DELETE /api/workspace/tasks/1042, quindi il percorso carrier proviene direttamente dal traffico normale dell'applicazione./robots.txt. Punta all'artefatto /ops/release-manifest distribuito accidentalmente./api/workspace/ come prefisso del servizio pubblico, rivela /secret come route interna e indica /api/state come log delle richieste. Non rivela la flag stessa.Il manifest è una debolezza deliberata di information-disclosure per la narrazione del laboratorio. È separato da CVE-2026-29057; la CVE fornisce il bypass di request-framing che raggiunge la route backend divulgata.
I nomi delle route sono fixture del laboratorio, non percorsi recuperati da una vittima reale. La patch ufficiale di Vercel ha aggiunto un test di regressione che definisce /rewrites/:path*, usa /rewrites/poc come carrier e crea /secret sul backend di test. Questo laboratorio dà al carrier un nome dal sapore produttivo pur preservando quella struttura di test.
docker-compose.yml — versioni vulnerabile versus corretta.pocs/cve-2026-29057/next.config.js — confine di rewrite esterno.pocs/cve-2026-29057/support/server.js — parser dell'intermediario e del backend.scripts/run-cve-2026-29057.mjs — payload chunked grezzo e verificatore dei risultati.pocs/cve-2026-29057/app/api/ — endpoint di reset e lettura delle evidenze.docker compose down