
Demo di exploit proof-of-concept per CVE-2025-66478 utilizzando Node.js
Questo repository contiene il codice proof of concept (PoC) per la riproduzione e la ricerca della vulnerabilità Next.js CVE-2025-66478. Include un'applicazione Next.js vulnerabile e uno script di exploit in Node.js per testare la vulnerabilità.
English · 中文
Si tratta di una vulnerabilità di Remote Code Execution (RCE) che si verifica durante l'elaborazione delle Server Actions di Next.js.
Punti chiave:
__proto__.| Elemento | Descrizione |
|---|---|
| CVE ID | CVE-2025-66478 |
| Tipo | Esecuzione remota di codice (RCE) |
| Causa principale | Deserializzazione non sicura nel protocollo RSC Flight |
| Gravità (CVSS) | 10.0 (Critico) |
| Impatto | Esecuzione arbitraria di comandi di sistema sul server |
__proto__.Object.prototype.then in tutti gli oggetti. La logica di Next.js identifica erroneamente questi oggetti come Promise (Thenable).await di questa "falsa Promise", il codice JavaScript malevolo iniettato nel metodo then viene eseguito (ad esempio, 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)
Pertanto, quando il server elabora questa Promise manipolata, esegue il codice JavaScript iniettato dall'attaccante, che può portare all'esecuzione di comandi di sistema. Il file main.mjs incluso è un codice di esempio per riprodurre questo scenario di attacco.
Questa vulnerabilità riguarda le applicazioni Next.js che utilizzano l'App Router.
Versioni con patch:
app/page.tsx: Codice di esempio per l'applicazione vulnerabile.exploit.mjs: Script di esecuzione dell'exploit scritto in Node.js.# Puoi anche usare yarn o npm.
pnpm install
pnpm dev
Verifica di poter accedere a http://localhost:3000 tramite il browser.
pnpm exploit
Per impostazione predefinita, punta all'indirizzo locale (http://localhost:3000). Per testare un indirizzo diverso, usa l'opzione --url:
pnpm exploit --url http://target-ip:3000
Questo codice è destinato esclusivamente a scopi di ricerca sulla sicurezza e didattici. L'utilizzo di questo strumento contro sistemi o reti senza previa autorizzazione è illegale e gli utenti si assumono la piena responsabilità per qualsiasi problema derivante da tale utilizzo.