
Next.js 요청 스머글링(CVE-2026-29057)을 재현하는 Docker 기반 랩으로, 취약한 15.5.12 버전과 패치된 15.5.13 버전을 raw 청크 HTTP 페이로드로 비교합니다.
이 저장소는 CVE-2026-29057에 초점을 맞춘 발표용 실습 자료입니다. 동일한 토폴로지와 원시 HTTP 페이로드를 사용하여 취약한 Next.js 대상(15.5.12)과 패치된 릴리스(15.5.13)를 비교합니다.
격리된 실습 환경에서만 사용하십시오. 요청 비동기화 프로브는 실제 환경에서 공유 연결을 방해할 수 있습니다.
이 저장소는 Nayaka Ghana Subrata의 원본 Next.js Proof of Concept 저장소를 각색한 것입니다. 기초적인 개념 증명 작업에 대한 모든 공로는 원저자에게 돌아갑니다.
저는 해당 작업을 재구성하고 수정하여 CVE-2026-29057에 특화되도록 했으며, 발표 자료, 안내 데모, 실습 시나리오, 설명 주석, 취약 버전 대 패치 버전 비교를 포함합니다. 이 저장소는 교육용 각색물이며 원저자의 저장소로 오인되어서는 안 됩니다.
DELETE /api/workspace/tasks/1042GET /secret.Transfer-Encoding을 제거하고 Content-Length: 0을 추가하지만, 본문 바이트는 여전히 전달됩니다.| 대상 | Next.js | 백엔드 요청 |
|---|---|---|
| 취약 | 15.5.12 | DELETE /api/workspace/tasks/1042, 그다음 GET /secret |
| 패치 | 15.5.13 | 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
요구 사항: Docker Compose 및 Node.js 18 이상.
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
예상되는 취약 증거:
[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}
예상되는 패치 증거:
[after] {"backendRequests":["DELETE /api/workspace/tasks/1042"],"flag":null}
PoC result: smuggled request was not observed. This usually means the target is patched.
의미 있는 증거는 차등적입니다: 토폴로지와 페이로드는 변경되지 않고, Next.js 버전만 다릅니다.
이 실습은 발표자가 공격자가 두 경로를 마법처럼 알고 있다고 가정할 필요가 없습니다:
DELETE /api/workspace/tasks/1042 요청이 표시되므로, 캐리어 경로는 정상적인 애플리케이션 트래픽에서 직접 나옵니다./robots.txt를 요청합니다. 이는 실수로 배포된 /ops/release-manifest 아티팩트를 가리킵니다./api/workspace/를 공용 서비스 접두사로 식별하고, /secret을 내부 라우트로 유출하며, /api/state를 요청 로그로 명시합니다. 플래그 자체는 드러내지 않습니다.매니페스트는 실습 서사를 위한 의도적인 정보 노출 약점입니다. 이는 CVE-2026-29057과는 별개이며, CVE는 노출된 백엔드 라우트에 도달하는 요청 프레이밍 우회를 제공합니다.
라우트 이름은 실습 픽스처이며, 실제 피해자로부터 복구된 경로가 아닙니다. Vercel의 공식 패치는 /rewrites/:path*를 정의하고, /rewrites/poc를 캐리어로 사용하며, 테스트 백엔드에 /secret을 생성하는 회귀 테스트를 추가했습니다. 이 실습은 해당 테스트 구조를 유지하면서 캐리어에 제품 형태의 이름을 부여합니다.
docker-compose.yml — 취약 버전 대 패치 버전.pocs/cve-2026-29057/next.config.js — 외부 리라이트 경계.pocs/cve-2026-29057/support/server.js — 중개자 및 백엔드 파서.scripts/run-cve-2026-29057.mjs — 원시 청크드 페이로드 및 결과 검사기.pocs/cve-2026-29057/app/api/ — 증거 재설정 및 읽기 엔드포인트.docker compose down