Laboratório baseado em Docker que reproduz o contrabando de requisições do CVE-2026-29057 no Next.js, comparando a versão vulnerável 15.5.12 com a corrigida 15.5.13 usando um payload HTTP chunked bruto.
Este repositório é um laboratório de apresentação focado em CVE-2026-29057. Ele compara um alvo Next.js vulnerável (15.5.12) com a versão corrigida (15.5.13) usando a mesma topologia e payload HTTP bruto.
Use-o apenas em um laboratório isolado. Sondagens de dessincronização de requisições podem interromper conexões compartilhadas em ambientes reais.
Este repositório é adaptado do repositório original de Prova de Conceito do Next.js de Nayaka Ghana Subrata. Todo o crédito vai para o autor original pelo trabalho fundamental de prova de conceito.
Eu reorganizei e modifiquei esse trabalho para focar especificamente na CVE-2026-29057, incluindo os materiais de apresentação, demonstração guiada, cenário de laboratório, comentários explicativos e a comparação entre vulnerável e corrigido. Este repositório é uma adaptação educacional e não deve ser confundido com o repositório do autor original.
DELETE /api/workspace/tasks/1042 em chunked.GET /secret.Transfer-Encoding e adiciona Content-Length: 0, enquanto os bytes do corpo ainda são encaminhados.| Alvo | Next.js | Requisições ao backend |
|---|---|---|
| Vulnerável | 15.5.12 | DELETE /api/workspace/tasks/1042, depois GET /secret |
| Corrigido | 15.5.13 | Apenas 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
Requisitos: Docker Compose e Node.js 18 ou mais recente.
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
Evidência esperada de vulnerabilidade:
[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}
Evidência esperada de correção:
[after] {"backendRequests":["DELETE /api/workspace/tasks/1042"],"flag":null}
PoC result: smuggled request was not observed. This usually means the target is patched.
A evidência significativa é diferencial: a topologia e o payload permanecem inalterados; apenas a versão do Next.js difere.
O laboratório não exige que o apresentador finja que um atacante conhece magicamente ambos os caminhos:
DELETE /api/workspace/tasks/1042, então o caminho transportador vem diretamente do tráfego normal da aplicação./robots.txt. Ele aponta para o artefato /ops/release-manifest implantado acidentalmente./api/workspace/ como o prefixo do serviço público, vaza /secret como uma rota interna e nomeia /api/state como o log de requisições. Ele não revela a flag em si.O manifesto é uma fraqueza deliberada de divulgação de informações para a narrativa do laboratório. Ele é separado da CVE-2026-29057; a CVE fornece o bypass de enquadramento de requisições que alcança a rota de backend divulgada.
Os nomes das rotas são fixtures do laboratório, não caminhos recuperados de uma vítima real. O patch oficial da Vercel adicionou um teste de regressão que define /rewrites/:path*, usa /rewrites/poc como transportador e cria /secret no backend de teste. Este laboratório dá ao transportador um nome com formato de produto enquanto preserva essa estrutura de teste.
docker-compose.yml — versões vulnerável versus corrigida.pocs/cve-2026-29057/next.config.js — limite de rewrite externo.pocs/cve-2026-29057/support/server.js — parsers do intermediário e do backend.scripts/run-cve-2026-29057.mjs — payload chunked bruto e verificador de resultados.pocs/cve-2026-29057/app/api/ — endpoints de reset de evidências e leitura.docker compose down