Laboratoire académique pour analyser CVE-2025-55182 (React2Shell) avec des environnements React Server Components vulnérables et corrigés, un shell d'exploitation, des scénarios d'évaluation automatisés et un rapport de sécurité complet.
Ce dépôt contient un laboratoire académique local pour analyser la CVE-2025-55182 dans un environnement contrôlé de React Server Components. Le laboratoire simule la vulnérabilité, son exploitation et le correctif appliqué.
app/vulnerable/ : Le profil d'application React vulnérable.
src/framework/entry.rsc.tsx : Contient le point de désérialisation non sécurisée où les charges utiles __flight_action sont exécutées via execSync().[email protected] non corrigé.app/patched/ : Le profil d'application React corrigé.
src/framework/entry.rsc.tsx : Contient la logique d'atténuation qui bloque les charges utiles __flight_action avec une réponse 403 avant la désérialisation.infra/ : Configurations Docker pour une exécution isolée.
docker-compose.yml : Démarre les profils vulnérable (port 3100) et corrigé (port 3200).scripts/ : Scripts d'automatisation et d'exploitation.
exploit-shell.ps1 : Un shell d'exploitation interactif qui exploite la vulnérabilité pour fournir un terminal distant simulé (root@container$).run-scenarios.ps1 : Script wrapper pour exécuter les tests d'évaluation automatisés dans tests/run-scenarios.mjs.start-lab.ps1 : Script d'aide pour démarrer rapidement l'environnement Docker Compose.stop-lab.ps1 : Script d'aide pour arrêter et nettoyer l'environnement Docker Compose.demo-lab.ps1 : Script de démonstration alternatif qui exécute les deux applications localement (sans Docker) et envoie une séquence de requêtes de test.report/ : Contient l'analyse finale.
findings.md : Le rapport de sécurité complet couvrant la chaîne d'attaque, l'analyse CVSS, les métriques d'évaluation et les recommandations d'atténuation.CSE472_ProjectProposal_Revised.md : La proposition de projet révisée et la documentation méthodologique.tests/ : Évaluation automatisée.
run-scenarios.mjs : Script Node.js qui exécute des scénarios normaux, suspects et d'exploitation contre les deux profils, calculant les taux de succès et de détection.logs/ : Sorties de télémétrie.
vulnerable-requests.log et patched-requests.log : Stockent les traces détaillées des requêtes, y compris suspiciousReasons pour l'analyse.Si vous avez téléchargé ce projet sous forme de fichier .zip depuis GitHub, suivez ces étapes pour exécuter le laboratoire et interagir avec la simulation de vulnérabilité sur votre machine locale.
Remarque sur la politique d'exécution de PowerShell : Si vous rencontrez une erreur indiquant que le script
cannot be loadedouis not digitally signedlors de l'exécution de fichiers.ps1, vous devez contourner la politique d'exécution pour votre session en cours. Exécutez cette commande dans votre fenêtre PowerShell avant d'exécuter les scripts :Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass(Étant donné que la portée est "Process", vous devez exécuter cette commande à nouveau dans chaque nouvelle fenêtre ou onglet PowerShell que vous ouvrez !)
Extrayez le fichier .zip dans le dossier de votre choix. Ouvrez une fenêtre PowerShell et naviguez jusqu'au dossier extrait du projet :
cd chemin\vers\dossier\extrait
Nous utilisons Docker pour isoler en toute sécurité l'application vulnérable. Démarrez les conteneurs à l'aide du script d'aide fourni :
.\scripts\start-lab.ps1
(Alternativement, vous pouvez exécuter manuellement cd infra; docker-compose up --build -d)
Une fois démarré :
http://localhost:3100http://localhost:3200Avec l'environnement en cours d'exécution, vous pouvez tester la vulnérabilité d'exécution de code à distance (RCE) en lançant notre shell d'exploitation simulé. Ouvrez un nouvel onglet/fenêtre PowerShell et exécutez :
.\scripts\exploit-shell.ps1
Ce script agit comme un attaquant envoyant des charges utiles conçues vers le point de terminaison .rsc. Essayez d'exécuter des commandes comme :
whoamils /workspaceenvcat /etc/passwdPour tester la version corrigée :
.\scripts\exploit-shell.ps1 -Target "http://localhost:3200"
Vous remarquerez que la version corrigée bloque la requête et renvoie un message [BLOCKED].
Pour générer les métriques d'évaluation (taux de succès, taux de détection), exécutez le script de test Node.js :
node .\tests\run-scenarios.mjs
(Ou utilisez le wrapper : .\scripts\run-scenarios.ps1)
Cela affichera un résumé dans la console et enregistrera un rapport JSON détaillé dans tests/results/scenario-report.json.
Lorsque vous avez terminé vos expériences, vous pouvez arrêter les conteneurs en toute sécurité pour libérer des ressources :
.\scripts\stop-lab.ps1