
Laboratório acadêmico para análise do CVE-2025-55182 (React2Shell) com ambientes vulneráveis e corrigidos de React Server Components, shell de exploração, cenários de avaliação automatizados e relatório de segurança abrangente.
Este repositório contém um laboratório acadêmico local para analisar a CVE-2025-55182 em um ambiente controlado de React Server Components. O laboratório simula a vulnerabilidade, sua exploração e o patch aplicado.
app/vulnerable/: O perfil da aplicação React vulnerável.
src/framework/entry.rsc.tsx: Contém o ponto de desserialização insegura onde os payloads __flight_action são executados via execSync().[email protected] sem patch.app/patched/: O perfil da aplicação React corrigida.
src/framework/entry.rsc.tsx: Contém a lógica de mitigação que bloqueia payloads __flight_action com uma resposta 403 antes da desserialização.infra/: Configurações Docker para execução isolada.
docker-compose.yml: Inicializa os perfis vulnerável (porta 3100) e corrigido (porta 3200).scripts/: Scripts de automação e exploração.
exploit-shell.ps1: Um shell de exploração interativo que aproveita a vulnerabilidade para fornecer um terminal remoto simulado (root@container$).run-scenarios.ps1: Script wrapper para executar os testes de avaliação automatizados em tests/run-scenarios.mjs.start-lab.ps1: Script auxiliar para iniciar rapidamente o ambiente Docker Compose.stop-lab.ps1: Script auxiliar para encerrar e limpar o ambiente Docker Compose.demo-lab.ps1: Script de demonstração alternativo que executa ambos os aplicativos localmente (sem Docker) e envia uma sequência de requisições de teste.report/: Contém a análise final.
findings.md: O relatório de segurança abrangente que cobre a cadeia de ataque, a análise CVSS, as métricas de avaliação e as recomendações de mitigação.CSE472_ProjectProposal_Revised.md: A proposta revisada do projeto e a documentação de metodologia.tests/: Avaliação automatizada.
run-scenarios.mjs: Script Node.js que executa cenários normais, suspeitos e de exploração contra ambos os perfis, calculando taxas de sucesso e detecção.logs/: Saídas de telemetria.
vulnerable-requests.log e patched-requests.log: Armazenam rastreamentos detalhados de requisições, incluindo suspiciousReasons para análise.Se você baixou este projeto como um arquivo .zip do GitHub, siga estas etapas para executar o laboratório e interagir com a simulação da vulnerabilidade na sua máquina local.
Nota sobre a Política de Execução do PowerShell: Se você encontrar um erro informando que o script
cannot be loadedouis not digitally signedao executar arquivos.ps1, você precisa contornar a política de execução para a sua sessão atual. Execute este comando na sua janela do PowerShell antes de executar os scripts:Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass(Como o escopo é "Process", você deve executar este comando novamente em toda nova janela ou aba do PowerShell que abrir!)
Extraia o arquivo .zip para a pasta desejada. Abra uma janela do PowerShell e navegue até a pasta do projeto extraído:
cd path\to\extracted\folder
Usamos o Docker para isolar com segurança o aplicativo vulnerável. Inicie os contêineres usando o script auxiliar fornecido:
.\scripts\start-lab.ps1
(Alternativamente, você pode executar manualmente cd infra; docker-compose up --build -d)
Após iniciado:
http://localhost:3100http://localhost:3200Com o ambiente em execução, você pode testar a vulnerabilidade de Execução Remota de Código (RCE) iniciando nosso shell de exploração simulado. Abra uma nova aba/janela do PowerShell e execute:
.\scripts\exploit-shell.ps1
Este script atua como um atacante enviando payloads maliciosos ao endpoint .rsc. Tente executar comandos como:
whoamils /workspaceenvcat /etc/passwdPara testar a versão corrigida:
.\scripts\exploit-shell.ps1 -Target "http://localhost:3200"
Você notará que a versão corrigida bloqueia a requisição e retorna uma mensagem [BLOCKED].
Para gerar as métricas de avaliação (Taxa de Sucesso, Taxa de Detecção), execute o script de teste Node.js:
node .\tests\run-scenarios.mjs
(Ou use o wrapper: .\scripts\run-scenarios.ps1)
Isso exibirá um resumo no console e salvará um relatório JSON detalhado em tests/results/scenario-report.json.
Quando terminar os experimentos, você pode encerrar com segurança os contêineres para liberar recursos:
.\scripts\stop-lab.ps1