
Demonstração de exploit de prova de conceito para CVE-2025-66478 usando Node.js
Este repositório contém código de prova de conceito (PoC) para reproduzir e pesquisar a vulnerabilidade CVE-2025-66478 do Next.js. Inclui uma aplicação Next.js vulnerável e um script de exploit em Node.js para testar a vulnerabilidade.
Inglês · 中文
Esta é uma vulnerabilidade de Execução Remota de Código (RCE) que ocorre durante o processamento de Server Actions do Next.js.
Pontos-chave:
__proto__.| Item | Descrição |
|---|
| ID CVE | CVE-2025-66478 |
| Tipo | Execução Remota de Código (RCE) |
| Causa Raiz | Desserialização insegura no protocolo RSC Flight |
| Severidade (CVSS) | 10.0 (Crítico) |
| Impacto | Execução arbitrária de comandos no servidor |
__proto__.Object.prototype.then em todos os objetos. A lógica do Next.js identifica incorretamente esses objetos como Promises (Thenables).await esta "falsa Promise", o código JavaScript malicioso injetado no método then é executado (ex.: child_process.execSync).sequenceDiagram
participant Attacker as Attacker
participant Server as Next.js Server
Attacker->>Server: POST / (JSON with "__proto__": {"then": ...})
Note right of Server: JSON parsing pollutes Object.prototype
Server->>Server: Application logic encounters an object
rect rgb(200, 150, 150)
Note right of Server: "Thenable" check exploitation chain
Server->>Server: Check: typeof obj.then === 'function'?
Server-->>Server: Yes (due to pollution)
end
Server->>Server: Await/execute malicious .then()
Note right of Server: Malicious JS code runs (RCE)
Server-->>Attacker: Response (Action redirect / Error message)Portanto, quando o servidor processa essa Promise manipulada, ele executa o código JavaScript injetado pelo atacante, o que pode levar à execução de comandos no sistema. O arquivo main.mjs incluído é um código de exemplo para reproduzir este cenário de ataque.
Esta vulnerabilidade afeta aplicações Next.js que usam o App Router.
Versões Corrigidas:
app/page.tsx: Código de exemplo para a aplicação vulnerável.exploit.mjs: Script de execução do exploit escrito em Node.js.pnpm install
pnpm dev
Verifique se você consegue acessar http://localhost:3000 através do seu navegador.
pnpm exploit
Por padrão, ele ataca o endereço local (http://localhost:3000). Para testar um endereço diferente, use a opção --url:
pnpm exploit --url http://target-ip:3000
Este código é destinado apenas para fins de pesquisa de segurança e educacionais. Usar esta ferramenta contra sistemas ou redes sem permissão prévia é ilegal, e os usuários assumem total responsabilidade por quaisquer problemas decorrentes desse uso.