Laboratorio académico para analizar CVE-2025-55182 (React2Shell) con entornos vulnerables y parcheados de React Server Components, shell de explotación, escenarios de evaluación automatizados y un informe de seguridad exhaustivo.
Este repositorio contiene un laboratorio académico local para analizar CVE-2025-55182 en un entorno controlado de React Server Components. El laboratorio simula la vulnerabilidad, su explotación y el parche aplicado.
app/vulnerable/: El perfil de aplicación React vulnerable.
src/framework/entry.rsc.tsx: Contiene el punto de deserialización insegura donde los payloads __flight_action se ejecutan mediante execSync().[email protected].app/patched/: El perfil de aplicación React parcheada.
src/framework/entry.rsc.tsx: Contiene la lógica de mitigación que bloquea los payloads __flight_action con una respuesta 403 antes de la deserialización.infra/: Configuraciones de Docker para ejecución aislada.
docker-compose.yml: Inicia ambos perfiles, vulnerable (puerto 3100) y parcheado (puerto 3200).scripts/: Scripts de automatización y explotación.
exploit-shell.ps1: Un shell de explotación interactivo que aprovecha la vulnerabilidad para proporcionar una terminal remota simulada (root@container$).run-scenarios.ps1: Script envoltorio para ejecutar las pruebas de evaluación automatizadas en tests/run-scenarios.mjs.start-lab.ps1: Script auxiliar para iniciar rápidamente el entorno Docker Compose.stop-lab.ps1: Script auxiliar para apagar y limpiar el entorno Docker Compose.demo-lab.ps1: Script de demostración alternativo que ejecuta ambas aplicaciones localmente (sin Docker) y envía una secuencia de peticiones de prueba.report/: Contiene el análisis final.
findings.md: El informe de seguridad completo que cubre la cadena de ataque, análisis CVSS, métricas de evaluación y recomendaciones de mitigación.CSE472_ProjectProposal_Revised.md: La propuesta de proyecto revisada y documentación de metodología.tests/: Evaluación automatizada.
run-scenarios.mjs: Script Node.js que ejecuta escenarios normales, sospechosos y de explotación contra ambos perfiles, calculando tasas de éxito y detección.logs/: Salidas de telemetría.
vulnerable-requests.log y patched-requests.log: Almacenan trazas detalladas de peticiones, incluyendo suspiciousReasons para análisis.Si ha descargado este proyecto como un archivo .zip desde GitHub, siga estos pasos para ejecutar el laboratorio e interactuar con la simulación de vulnerabilidad en su máquina local.
Nota sobre la política de ejecución de PowerShell: Si encuentra un error que indica que el script
no se puede cargarono está firmado digitalmenteal ejecutar archivos.ps1, debe omitir la política de ejecución para su sesión actual. Ejecute este comando en su ventana de PowerShell antes de ejecutar los scripts:Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass(Dado que el ámbito es "Process", ¡debe ejecutar este comando de nuevo en cada nueva ventana o pestaña de PowerShell que abra!)
Extraiga el archivo .zip a la carpeta deseada. Abra una ventana de PowerShell y navegue hasta la carpeta del proyecto extraído:
cd path\to\extracted\folder
Usamos Docker para aislar de forma segura la aplicación vulnerable. Inicie los contenedores usando el script auxiliar proporcionado:
.\scripts\start-lab.ps1
(Alternativamente, puede ejecutar manualmente cd infra; docker-compose up --build -d)
Una vez iniciado:
http://localhost:3100http://localhost:3200Con el entorno en ejecución, puede probar la vulnerabilidad de Ejecución Remota de Código (RCE) lanzando nuestro shell de explotación simulado. Abra una nueva pestaña/ventana de PowerShell y ejecute:
.\scripts\exploit-shell.ps1
Este script actúa como un atacante enviando payloads diseñados al endpoint .rsc. Intente ejecutar comandos como:
whoamils /workspaceenvcat /etc/passwdPara probar la versión parcheada:
.\scripts\exploit-shell.ps1 -Target "http://localhost:3200"
Notará que la versión parcheada bloquea la petición y devuelve un mensaje [BLOCKED].
Para generar las métricas de evaluación (Tasa de Éxito, Tasa de Detección), ejecute el script de prueba Node.js:
node .\tests\run-scenarios.mjs
(O use el envoltorio: .\scripts\run-scenarios.ps1)
Esto mostrará un resumen en la consola y guardará un informe JSON detallado en tests/results/scenario-report.json.
Cuando termine de experimentar, puede apagar los contenedores de forma segura para liberar recursos:
.\scripts\stop-lab.ps1