Démo d'exploit de preuve de concept pour CVE-2025-66478 utilisant Node.js
Ce dépôt contient un code de preuve de concept (PoC) pour reproduire et étudier la vulnérabilité CVE-2025-66478 de Next.js. Il inclut une application Next.js vulnérable et un script d'exploit Node.js pour tester la vulnérabilité.
Anglais · 中文
Il s'agit d'une vulnérabilité d'exécution de code à distance (RCE) qui se produit lors du traitement des actions serveur Next.js.
Points clés :
__proto__.| Élément | Description |
|---|
| CVE ID | CVE-2025-66478 |
| Type | Exécution de code à distance (RCE) |
| Cause racine | Désérialisation non sécurisée dans le protocole RSC Flight |
| Sévérité (CVSS) | 10.0 (Critique) |
| Impact | Exécution arbitraire de commandes système sur le serveur |
__proto__.Object.prototype.then dans tous les objets. La logique de Next.js identifie incorrectement ces objets comme des Promesses (Thenables).await sur cette « fausse Promesse », le code JavaScript malveillant injecté dans la méthode then est exécuté (par exemple, 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)Par conséquent, lorsque le serveur traite cette Promise manipulée, il exécute le code JavaScript injecté par l'attaquant, ce qui peut conduire à l'exécution de commandes système. Le fichier main.mjs inclus est un exemple de code pour reproduire ce scénario d'attaque.
Cette vulnérabilité affecte les applications Next.js utilisant le App Router.
Versions corrigées :
app/page.tsx : Exemple de code pour l'application vulnérable.exploit.mjs : Script d'exécution de l'exploit écrit en Node.js.# You can also use yarn or npm.
pnpm install
pnpm dev
Vérifiez que vous pouvez accéder à http://localhost:3000 via votre navigateur.
pnpm exploit
Par défaut, il cible l'adresse locale (http://localhost:3000). Pour tester une adresse différente, utilisez l'option --url :
pnpm exploit --url http://target-ip:3000
Ce code est destiné uniquement à des fins de recherche en sécurité et d'éducation. Utiliser cet outil contre des systèmes ou des réseaux sans autorisation préalable est illégal, et les utilisateurs assument l'entière responsabilité de tout problème découlant d'une telle utilisation.