
Security scanner for CVE-2025-55182 - Critical RCE vulnerability in React Server Components. Scan npm/pnpm/yarn lockfiles, Docker images, SBOMs, and live URLs. Auto-fix, SARIF output, GitHub Actions, Vercel integration, and runtime protection middleware.
Scanner de segurança para CVE-2025-55182 - uma vulnerabilidade crítica (CVSS 10.0) de Execução Remota de Código não autenticada nos Componentes do Servidor React.
⚠️ AVISO
Este é um scanner de segurança, NÃO uma ferramenta de exploração. Foi projetado para ajudar desenvolvedores e equipes de segurança a identificar dependências vulneráveis em seus projetos.
Este é um projeto de código aberto movido pela comunidade fornecido "COMO ESTÁ" sem garantia de qualquer tipo, expressa ou implícita. Os autores e contribuidores não são responsáveis por quaisquer danos ou incidentes de segurança decorrentes do uso desta ferramenta.
Use por sua conta e risco. Sempre verifique os achados manualmente e siga as políticas de segurança da sua organização. Se você descobrir quaisquer problemas, bugs ou tiver sugestões, por favor contribua para ajudar a melhorar o projeto para todos.
🤝 PROCURAM-SE CONTRIBUIDORES
Este projeto está ativamente procurando testadores e contribuidores! Se você deseja reportar bugs, sugerir funcionalidades, melhorar a documentação ou enviar código - todas as contribuições são bem-vindas. Confira nosso Guia de Contribuição para começar.
Este projeto existe para ajudar a comunidade a responder ao CVE-2025-55182. Agradecemos e reconhecemos:
A maneira mais rápida de verificar se seu projeto está vulnerável:```bash npx react2shell-guard .
É isso! Isso irá escanear seu diretório atual e mostrar resultados imediatamente.
### 2. Escanear um Projeto Específico```bash
npx react2shell-guard /path/to/your/project
Encontrou vulnerabilidades? Corrija-as automaticamente:```bash
npx react2shell-guard fix --dry-run
npx react2shell-guard fix
npx react2shell-guard fix --install
### 4. Escanear URLs Ativas
Verifique se uma aplicação implantada está vulnerável:```bash
npx react2shell-guard scan-url https://your-app.com
Confirme se a correção implantada está funcionando:```bash npx react2shell-guard verify-patch https://your-app.com
### 6. Digitalizar Imagens de Contêiner
Verifique se suas imagens Docker contêm pacotes vulneráveis:```bash
npx react2shell-guard scan-image myapp:latest
Crie automaticamente um PR do GitHub para corrigir vulnerabilidades:```bash npx react2shell-guard create-pr --dry-run # Preview npx react2shell-guard create-pr # Create PR
---
## O que é CVE-2025-55182?
Em 29 de novembro de 2025, o pesquisador de segurança Lachlan Davidson descobriu e divulgou de forma responsável uma vulnerabilidade crítica nos React Server Components. A falha existe na forma como o React decodifica payloads enviados para endpoints de React Server Function, permitindo que atacantes não autenticados obtenham execução remota de código em servidores afetados sem qualquer interação do usuário.
CVE-2025-55182 é classificada como CVSS 10.0 (Crítica) e afeta React Server Components (RSC) e frameworks que utilizam o protocolo RSC "Flight".
**Pacotes Afetados:**
- `react-server-dom-webpack` 19.0.0, 19.1.0-19.1.1, 19.2.0
- `react-server-dom-parcel` (mesmas versões)
- `react-server-dom-turbopack` (mesmas versões)
- `next` 15.0.0-15.0.4, 15.1.0-15.1.8, 15.2.0-15.2.5, 15.3.0-15.3.5, 15.4.0-15.4.7, 15.5.0-15.5.6, 16.0.0-16.0.6
**Mais Informações:**
- [Aviso de Segurança do React](https://react.dev/blog/2025/12/03/critical-security-vulnerability-in-react-server-components)
- [Pesquisa da Wiz](https://www.wiz.io/blog/critical-vulnerability-in-react-cve-2025-55182)
---
## Instalação (Opcional)
Para uso frequente, instale globalmente:```bash
npm install -g react2shell-guard
Depois use sem npx:```bash
react2shell-guard .
---
## Guia de Uso
### Escaneamento Básico```bash
# Scan current directory
react2shell-guard .
# Scan specific directory
react2shell-guard /path/to/project
# Scan and ignore certain paths
react2shell-guard . --ignore-path "examples/**" "test/**"
react2shell-guard .
react2shell-guard . --json
react2shell-guard . --sarif
react2shell-guard . --html report.html
### Opções da CLI
| Opção | Descrição |
|--------|-------------|
| `--json` | Gerar resultados como JSON |
| `--sarif` | Gerar resultados como SARIF 2.1.0 |
| `--html <file>` | Gerar relatório HTML independente |
| `--no-exit-on-vuln` | Não sair com código 1 quando vulnerabilidades forem encontradas |
| `--ignore-path <patterns>` | Caminhos a ignorar (ex.: `examples/**`) |
| `--debug` | Ativar saída de depuração |
### Códigos de Saída
| Código | Significado |
|------|---------|
| `0` | Nenhuma vulnerabilidade encontrada |
| `1` | Vulnerabilidades detectadas |
| `2+` | Erro fatal |
## Varredura de URL ao Vivo
Varra endpoints ativos para detectar se são vulneráveis:```bash
# Scan a single URL
react2shell-guard scan-url https://example.com
# Batch scan from a file (one URL per line)
react2shell-guard scan-url urls.txt --list
# With options
react2shell-guard scan-url https://example.com --timeout 5000 --json
O scanner usa impressão digital passiva para detectar endpoints vulneráveis do React Server Components sem explorar a vulnerabilidade:
Requisição de Sonda: Envia uma requisição POST elaborada simulando uma chamada de Ação do Servidor RSC com um payload mínimo:
multipart/form-data com estrutura de dados semelhante ao RSCNext-Action para acionar o processamento de Ações do ServidorAnálise de Resposta: Analisa a resposta HTTP em busca de assinaturas de vulnerabilidade:
^[0-9]+:E{ - formato de erro do protocolo RSC Flight"digest":"...RSC - digest do RSC em respostas de erroReactServerComponentsError - nomes de classes de erro do Reacttext/x-component.*error - tipo de conteúdo de erro do componenteNão Destrutivo: Isso é puramente um mecanismo de detecção - ele não executa nenhum payload malicioso nem explora a vulnerabilidade. A sonda usa dados benignos que acionam respostas de erro em servidores vulneráveis, mas não causam danos.
Nota: Uma detecção positiva significa que o servidor está executando uma versão vulnerável e retornou uma assinatura de erro específica do RSC. Isso NÃO significa que o servidor foi explorado.
Verificar se um alvo foi corrigido contra a vulnerabilidade:```bash
react2shell-guard verify-patch https://example.com
react2shell-guard verify-patch https://example.com --json
### Como a Verificação de Patches Funciona
A verificação de patches realiza **múltiplas varreduras consecutivas** (padrão: 3) com breves atrasos entre elas para garantir detecção precisa:
1. **Múltiplas Sondagens**: Executa a mesma verificação de impressão digital passiva 3 vezes com atrasos de 500ms
2. **Pontuação de Confiança**:
- **Alta confiança**: 2+ varreduras bem-sucedidas com resultados consistentes
- **Confiança média**: 1 varredura bem-sucedida com resultado conclusivo
- **Baixa confiança**: Todas as varreduras falharam ou resultados inconclusivos
3. **Classificação de Resultados**:
- **PATCHED**: Nenhuma assinatura de vulnerabilidade detectada em todas as varreduras bem-sucedidas
- **VULNERABLE**: Assinatura de vulnerabilidade detectada em uma ou mais varreduras
- **Inconclusivo**: Resultados mistos ou todas as varreduras falharam
Esta abordagem de múltiplas varreduras reduz falsos positivos de problemas de rede transitórios e proporciona maior confiança no status do patch.
### Opções de Verificação
| Opção | Descrição |
|--------|-------------|
| `--timeout <ms>` | Tempo limite de requisição em milissegundos (padrão: 10000) |
| `--json` | Exibir resultados como JSON |
| `--skip-ssl-verify` | Ignorar verificação de certificado SSL |
## Varredura de Imagens de Contêiner
Varra imagens de contêiner Docker/OCI em busca de pacotes vulneráveis:```bash
# Scan a local or remote image
react2shell-guard scan-image myapp:latest
# Scan from a registry
react2shell-guard scan-image registry.example.com/myapp:v1.0
# Skip pulling (use local image only)
react2shell-guard scan-image myapp:latest --skip-pull
# With JSON output
react2shell-guard scan-image myapp:latest --json
# With SARIF output
react2shell-guard scan-image myapp:latest --sarif
Requisitos:
Bloqueie implantações vulneráveis antes que cheguem à produção:```bash
react2shell-guard vercel-check
{ "scripts": { "vercel-build": "react2shell-guard vercel-check && next build" } }
{ "buildCommand": "npx react2shell-guard vercel-check && npm run build" }
### Vercel Check Options
| Opção | Descrição |
|--------|-------------|
| `--no-fail` | Avisar, mas não falhar a construção em vulnerabilidades |
| `--ignore-path <patterns>` | Caminhos a ignorar (padrões glob) |
| `--debug` | Ativar saída de depuração |
## Automação de PR no GitHub
Criar automaticamente um pull request para corrigir vulnerabilidades:```bash
# Preview what will be done
react2shell-guard create-pr --dry-run
# Create branch and PR
react2shell-guard create-pr
# Create branch but don't push/create PR
react2shell-guard create-pr --no-push
# Custom branch name
react2shell-guard create-pr --branch fix/security-update
| Opção | Descrição |
|---|---|
--branch <name> | Nome do branch para a correção (padrão: fix/cve-2025-55182) |
--dry-run | Mostra o que seria feito sem aplicar as alterações |
--no-push | Cria branch e commits mas não faz push ou cria PR |
Requisitos:
react2shell-guard - CVE-2025-55182 Scanner ──────────────────────────────────────────────────
Scanned 1 project(s)
✗ my-app [VULNERABLE] Path: /path/to/my-app Framework: nextjs v15.2.1 App Router: Yes (RSC enabled)
Vulnerabilities found: - react-server-dom-webpack @ 19.1.0 Upgrade to: 19.1.2 Advisory: https://react.dev/blog/2025/12/03/... - next @ 15.2.1 Upgrade to: 15.2.6 Advisory: https://react.dev/blog/2025/12/03/...
────────────────────────────────────────────────── VULNERABLE - Action required! Upgrade affected packages to patched versions immediately.
## Integração com GitHub Actions
> **Nota:** Lançamos ativamente novas versões com padrões de deteção e correções melhorados. Use `@v1` para versões estáveis ou `@latest` para a versão mais recente.
### Ação do GitHub Marketplace
A forma mais fácil de integrar é usando a nossa Ação oficial do GitHub:```yaml
name: Security Scan
on: [push, pull_request]
jobs:
scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Scan for CVE-2025-55182
uses: gensecaihq/react2shell-scanner@v1
with:
path: '.'
fail-on-vuln: true
name: Security Scan
on: [push, pull_request]
jobs: scan: runs-on: ubuntu-latest permissions: security-events: write # For SARIF upload pull-requests: write # For PR comments
steps:
- uses: actions/checkout@v4
- name: Scan for CVE-2025-55182
uses: gensecaihq/react2shell-scanner@v1
with:
path: '.'
format: sarif
fail-on-vuln: true
upload-sarif: true # Upload to GitHub Security tab
add-pr-comment: true # Comment on PRs with results
ignore-paths: 'examples/**,test/fixtures/**'
### Entradas da Ação
| Entrada | Descrição | Padrão |
|---------|-----------|--------|
| `path` | Caminho para escanear | `.` |
| `scan-type` | Tipo de varredura: `repo`, `sbom`, `container` | `repo` |
| `format` | Formato de saída: `text`, `json`, `sarif` | `text` |
| `fail-on-vuln` | Falhar se vulnerabilidades forem encontradas | `true` |
| `upload-sarif` | Enviar SARIF para o GitHub Security | `false` |
| `add-pr-comment` | Adicionar comentário no PR com resultados | `false` |
| `ignore-paths` | Caminhos separados por vírgula para ignorar | `''` |
| `sbom-file` | Caminho do arquivo SBOM (quando scan-type é sbom) | `''` |
| `container-image` | Imagem Docker (quando scan-type é container) | `''` |
### Saídas da Ação
| Saída | Descrição |
|-------|-----------|
| `vulnerable` | Indica se vulnerabilidades foram encontradas (`true`/`false`) |
| `findings-count` | Número de pacotes vulneráveis |
| `scan-result` | Resultado completo da varredura (formato JSON) |
| `sarif-file` | Caminho para o arquivo de saída SARIF |
### Escanear Imagens de Contêiner```yaml
- name: Scan Docker image
uses: gensecaihq/react2shell-scanner@v1
with:
scan-type: container
container-image: myapp:latest
### Uso Manual da CLI
Se preferir usar a CLI diretamente:```yaml
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Scan for vulnerabilities
run: npx react2shell-guard@latest .
react2shell-guard detecta e analisa automaticamente lockfiles de:
package-lock.json (formatos v2 e v3)pnpm-lock.yamlyarn.lock (formatos Classic e Berry)Atualize automaticamente seu package.json para usar versões corrigidas:```bash
react2shell-guard fix --dry-run
react2shell-guard fix
react2shell-guard fix --install
## Pre-Commit Hooks
Instale hooks git para evitar o commit de dependências vulneráveis:```bash
# Auto-detect hook framework and install
react2shell-guard init-hooks
# Preview what would be installed
react2shell-guard init-hooks --dry-run
# Force specific hook type
react2shell-guard init-hooks --hook-type husky
react2shell-guard init-hooks --hook-type lefthook
react2shell-guard init-hooks --hook-type standalone
Estruturas de hook suportadas:
.husky/pre-commitlefthook.yml.git/hooks/pre-commitO hook bloqueará commits quando package.json contiver dependências vulneráveis e sugerirá executar react2shell-guard fix para remediar.
Escaneie arquivos SBOM CycloneDX em busca de vulnerabilidades:```bash
react2shell-guard scan-sbom bom.json
react2shell-guard scan-sbom bom.json --json
react2shell-guard scan-sbom bom.json --sarif
## MCP Server (Integração de Assistente de IA)
Inicie o servidor Model Context Protocol para integração de assistente de IA:```bash
react2shell-guard mcp-server
Ferramentas MCP disponíveis:
scan_repo - Verificar um repositório em busca de vulnerabilidadesscan_sbom - Verificar um arquivo SBOM CycloneDXConfigurar com clientes compatíveis com MCP (exemplo de configuração):```json { "mcpServers": { "react2shell-guard": { "command": "npx", "args": ["react2shell-guard", "mcp-server"] } } }
## Middleware de Proteção em Tempo de Execução
Middleware de defesa em profundidade que detecta e bloqueia tentativas de exploração da CVE-2025-55182 em tempo de execução.
### Express.js```typescript
import express from 'express';
import { createExpressMiddleware } from 'react2shell-guard/middleware';
const app = express();
// Add raw body parser for RSC payloads
app.use(express.raw({ type: 'text/x-component' }));
app.use(express.json());
// Add protection middleware
app.use(createExpressMiddleware({
action: 'block', // 'block' | 'log' | 'alert'
onAlert: (result, req) => {
// Send to your alerting system (Slack, PagerDuty, etc.)
console.error('CVE-2025-55182 exploit attempt:', result);
},
skipPaths: ['/health', '/metrics'],
}));
// middleware.ts import { withReact2ShellGuard } from 'react2shell-guard/middleware';
export const middleware = withReact2ShellGuard({ action: 'block', rscEndpointsOnly: true, // Only check RSC endpoints (recommended) });
export const config = { matcher: ['/((?!_next/static|_next/image|favicon.ico).*)'], };
**Padrões detectados:**
- Injeção de função serializada
- Tentativas de poluição de protótipo
- Referências de módulo malformadas
- Adulteração de ação do servidor
- Payloads maliciosos codificados
- Abuso de formato de streaming RSC
## Uso da API```typescript
import { scan } from 'react2shell-guard';
const result = scan({
path: '/path/to/project',
ignorePaths: ['examples/**'],
debug: false,
});
console.log(result.vulnerable); // boolean
console.log(result.projects); // ProjectResult[]
{ "cve": "CVE-2025-55182", "vulnerable": true, "scanTime": "2025-12-04T10:30:00Z", "projects": [ { "name": "my-app", "path": "/path/to/my-app", "framework": { "type": "nextjs", "version": "15.2.1", "appRouterDetected": true }, "findings": [ { "package": "react-server-dom-webpack", "currentVersion": "19.1.0", "fixedVersion": "19.1.2", "severity": "critical", "advisoryUrl": "https://..." } ], "vulnerable": true } ], "errors": [] }
## Remediação
**Correção automática (recomendada):**```bash
react2shell-guard fix --install
Atualização manual - Pacotes React:```bash npm install [email protected] # or 19.0.1, 19.2.1
**Atualização manual - Next.js:**```bash
npm install [email protected] # or other patched version for your release line
Versões fixas do Next.js por linha de lançamento:
npm install
npm run build
npm test
npm run dev
## Licença
MIT
| Opção | Descrição |
|---|
--list | Tratar o alvo como um arquivo contendo URLs |
--threads <n> | Número de threads concorrentes (padrão: 10) |
--timeout <ms> | Timeout da requisição em milissegundos (padrão: 10000) |
--json | Exibir resultados como JSON |
--skip-ssl-verify | Pular verificação de certificado SSL |
--verbose | Mostrar todos os resultados, incluindo hosts não vulneráveis |
| Opção | Descrição |
|---|
--timeout <ms> | Tempo limite de operação em milissegundos (padrão: 120000) |
--skip-pull | Ignorar a extração da imagem do registro (usar apenas local) |
--json | Saída dos resultados como JSON |
--sarif | Saída dos resultados como SARIF 2.1.0 |
--no-exit-on-vuln | Não sair com código 1 quando vulnerabilidades forem encontradas |
--debug | Ativar saída de depuração |