Docker-basiertes Lab zur Reproduktion von CVE-2026-29057 Next.js Request Smuggling, das die verwundbare Version 15.5.12 mit der gepatchten Version 15.5.13 anhand einer rohen chunked HTTP-Payload vergleicht.
Dieses Repository ist ein fokussiertes Präsentationslab für CVE-2026-29057. Es vergleicht ein verwundbares Next.js-Ziel (15.5.12) mit der gepatchten Version (15.5.13) unter Verwendung derselben Topologie und derselben rohen HTTP-Nutzlast.
Verwende es nur in einem isolierten Lab. Request-Desynchronisations-Sonden können in realen Umgebungen gemeinsam genutzte Verbindungen stören.
Dieses Repository ist eine Adaption von Nayaka Ghana Subratas ursprünglichem Next.js-Proof-of-Concept-Repository. Die volle Anerkennung gebührt dem ursprünglichen Autor für die grundlegende Proof-of-Concept-Arbeit.
Ich habe diese Arbeit neu organisiert und modifiziert, um mich speziell auf CVE-2026-29057 zu konzentrieren, einschließlich der Präsentationsmaterialien, der geführten Demonstration, des Lab-Szenarios, der erklärenden Kommentare und des Vergleichs zwischen verwundbar und gepatcht. Dieses Repository ist eine pädagogische Adaption und sollte nicht mit dem Repository des ursprünglichen Autors verwechselt werden.
DELETE /api/workspace/tasks/1042-Anfrage.GET /secret.Transfer-Encoding und fügt Content-Length: 0 hinzu, während Body-Bytes weiterhin weitergeleitet werden.| Ziel | Next.js | Backend-Anfragen |
|---|---|---|
| Verwundbar | 15.5.12 | DELETE /api/workspace/tasks/1042, dann GET /secret |
| Gepatcht | 15.5.13 | nur 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
Voraussetzungen: Docker Compose und Node.js 18 oder neuer.
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
Erwarteter Nachweis für die verwundbare Version:
[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}
Erwarteter Nachweis für die gepatchte Version:
[after] {"backendRequests":["DELETE /api/workspace/tasks/1042"],"flag":null}
PoC result: smuggled request was not observed. This usually means the target is patched.
Der aussagekräftige Nachweis ist differenziell: Topologie und Nutzlast bleiben unverändert; nur die Next.js-Version unterscheidet sich.
Das Lab erfordert nicht, dass der Präsentator vorgibt, ein Angreifer kenne beide Pfade auf magische Weise:
DELETE /api/workspace/tasks/1042-Anfrage, sodass der Trägerpfad direkt aus dem normalen Anwendungsverkehr stammt./robots.txt an. Sie verweist auf das versehentlich bereitgestellte /ops/release-manifest-Artefakt./api/workspace/ als öffentliches Dienstpräfix, gibt /secret als interne Route preis und nennt /api/state als Request-Log. Es offenbart nicht die Flag selbst.Das Manifest ist eine bewusste Informationsoffenlegungsschwäche für die Lab-Erzählung. Sie ist getrennt von CVE-2026-29057; die CVE liefert die Request-Framing-Umgehung, die die offengelegte Backend-Route erreicht.
Die Routennamen sind Lab-Fixtures, keine aus einem echten Opfer wiederhergestellten Pfade. Vercels offizieller Patch fügte einen Regressionstest hinzu, der /rewrites/:path* definiert, /rewrites/poc als Träger verwendet und /secret auf dem Test-Backend erstellt. Dieses Lab gibt dem Träger einen produktförmigen Namen, während diese Teststruktur erhalten bleibt.
docker-compose.yml — verwundbare versus gepatchte Versionen.pocs/cve-2026-29057/next.config.js — externe Rewrite-Grenze.pocs/cve-2026-29057/support/server.js — Intermediär- und Backend-Parser.scripts/run-cve-2026-29057.mjs — rohe chunked Nutzlast und Ergebnisprüfer.pocs/cve-2026-29057/app/api/ — Endpunkte zum Zurücksetzen und Lesen von Nachweisen.docker compose down