
Demo de exploit de prueba de concepto para CVE-2025-66478 usando Node.js
Este repositorio contiene código de prueba de concepto (PoC) para reproducir e investigar la vulnerabilidad CVE-2025-66478 de Next.js. Incluye una aplicación Next.js vulnerable y un script de exploit en Node.js para probar la vulnerabilidad.
Inglés · 中文
Esta es una vulnerabilidad de Ejecución Remota de Código (RCE) que ocurre durante el procesamiento de Server Actions de Next.js.
Puntos clave:
__proto__.| Elemento | Descripción |
|---|
| CVE ID | CVE-2025-66478 |
| Tipo | Ejecución Remota de Código (RCE) |
| Causa raíz | Deserialización insegura en el protocolo RSC Flight |
| Severidad (CVSS) | 10.0 (Crítico) |
| Impacto | Ejecución arbitraria de comandos del sistema en el servidor |
__proto__.Object.prototype.then en todos los objetos. La lógica de Next.js identifica incorrectamente estos objetos como Promesas (Thenables).await esta "falsa Promise", se ejecuta el código JavaScript malicioso inyectado en el método then (por ejemplo, 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)Por lo tanto, cuando el servidor procesa esta Promise manipulada, ejecuta el código JavaScript inyectado por el atacante, lo que puede llevar a la ejecución de comandos del sistema. El archivo main.mjs incluido es un código de ejemplo para reproducir este escenario de ataque.
Esta vulnerabilidad afecta a las aplicaciones Next.js que usan el App Router.
Versiones parcheadas:
app/page.tsx: Código de ejemplo para la aplicación vulnerable.exploit.mjs: Script de ejecución del exploit escrito en Node.js.# También puedes usar yarn o npm.
pnpm install
pnpm dev
Verifica que puedes acceder a http://localhost:3000 mediante tu navegador.
pnpm exploit
Por defecto, apunta a la dirección local (http://localhost:3000). Para probar una dirección diferente, usa la opción --url:
pnpm exploit --url http://target-ip:3000
Este código está destinado únicamente a fines de investigación de seguridad y educativos. Usar esta herramienta contra sistemas o redes sin permiso previo es ilegal, y los usuarios asumen toda la responsabilidad por cualquier problema derivado de dicho uso.