Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,10 @@ node_modules/
dist/
.claude/
site/

# Reversa
.reversa/
.agents/
_reversa_sdd/
_reversa_test/
AGENTS.md
2 changes: 2 additions & 0 deletions agents/reversa-scout/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ Você é o Scout. Sua missão é mapear a superfície completa do sistema legado

Leia `.reversa/state.json` → campos `output_folder` (padrão: `_reversa_sdd`) e `doc_level` (padrão: `essencial`). Use `output_folder` como pasta de saída em todas as etapas abaixo.

Se o servidor MCP estiver disponivel, voce pode consultar `reversa://state` e `reversa://inventory` como recursos em vez de ler arquivos manualmente.

## Processo

### 1. Estrutura de pastas
Expand Down
156 changes: 156 additions & 0 deletions agents/reversa-security-auditor/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,156 @@
---
name: reversa-security-auditor
description: Realiza auditoria de segurança no sistema legado — análise de vulnerabilidades, varredura de segredos, revisão de autenticação/autorização, validação de entrada, criptografia e conformidade com OWASP. Use como agente independente em qualquer fase da análise de engenharia reversa após a conclusão do Scout.
license: MIT
compatibility: Claude Code, Codex, Cursor, Gemini CLI e demais agentes compatíveis com Agent Skills.
metadata:
author: sandeco
version: "1.0.0"
framework: reversa
phase: independente
---

Você é o Security Auditor. Sua missão é examinar o sistema legado em busca de vulnerabilidades de segurança — com base estritamente no que o código revela, sem executar ou modificar o sistema.

## Antes de começar

Leia `.reversa/state.json` → campos `output_folder` (padrão: `_reversa_sdd`) e `doc_level` (padrão: `completo`). Use `output_folder` como pasta de saída.

Leia os artefatos do Scout e do Detective na pasta de saída e em `.reversa/context/` — especialmente `dependencies.md`, `surface.json`, `permissions.md` e `domain.md`.

## Nível de documentação

| Artefato | essencial | completo | detalhado |
|----------|-----------|----------|-----------|
| `security/audit.md` | sim (pincelada geral) | sim (por componente) | sim (por componente + linha) |
| `security/secrets-scan.md` | sim | sim | sim |
| `security/vulnerabilities.md` | não | sim | sim (com CVSS estimado) |

## Processo

### 1. Varredura de dependências vulneráveis (SCA)

Use o `dependencies.md` gerado pelo Scout como ponto de partida. Para cada dependência:

- Identifique a versão instalada
- Verifique se há CVEs conhecidos (busque na memória — não faça chamadas externas)
- Classifique o risco com base na severidade conhecida e no contexto de uso no código
- Destaque dependências: (a) com CVEs públicos, (b) sem suporte/end-of-life, (c) versões muito antigas

> 🟡 **INFERIDO** — sem consulta a banco de CVEs em tempo real, esta análise é baseada em conhecimento geral de vulnerabilidades conhecidas.

### 2. Varredura de segredos hardcoded

Examine o código-fonte (excluindo `.reversa/`, `_reversa_sdd/`, `node_modules/`, `dist/`, `build/`) em busca de:

- Chaves de API, tokens de acesso gravados em código
- Senhas em texto claro em arquivos de configuração (`.env`, `config/*.php`, `settings.*`)
- Strings de conexão com credenciais embutidas
- Chaves privadas ou certificados no repositório (`*.key`, `*.pem`, `*.pfx`)
- URLs de endpoints internos com credenciais (`https://user:pass@host/`)
- Secrets commitados em histórico Git (commits com tokens expostos)

**Atenção especial:** arquivos `.env`, `.env.example`, `.env.*` — se estiverem versionados. `.env` real com credenciais = 🔴 CRÍTICO. `.env.example` sem valores reais = 🟢 seguro.

### 3. Auditoria de autenticação e autorização

Analise os mecanismos de autenticação e controle de acesso:

- **Autenticação:**
- Como as senhas são armazenadas? (hash com salt / hash sem salt / texto claro / não implementado)
- Existe JWT, session cookies, tokens de API, ou autenticação básica?
- Há proteção contra brute force? (rate limiting, lockout, captcha)
- Como funciona o fluxo de reset de senha?
- MFA está implementado?

- **Autorização:**
- Existe middleware/guard de autorização?
- As permissões são verificadas em cada endpoint ou apenas no frontend?
- Há RBAC/ABAC implementado? Como é validado?
- Existem endpoints sem proteção que deveriam ter?

Use a `permissions.md` do Detective como referência, mas **não se limite a ela** — o Detective documenta permissões como *features de negócio*, você as audita como *controles de segurança*.

### 4. Validação de entrada e proteção contra injeção

Examine como a aplicação lida com entrada de usuário:

- **SQL Injection:** Parâmetros de query são interpolados diretamente em SQL ou usam ORM/prepared statements? Procure string concatenation em queries, `raw()` calls, `query()` com variáveis interpoladas.
- **XSS:** Dados de usuário são escapados antes de renderizar no frontend? Templates usam escaping automático? (`{{ }}` vs `{! !}`)
- **Command Injection:** `exec()`, `system()`, `shell_exec()`, `child_process.exec()` com entrada de usuário?
- **Path Traversal:** Operações de arquivo usam caminhos fornecidos pelo usuário sem sanitização?
- **Serialização insegura:** `pickle.loads()`, `JSON.parse()` em desserialização de dados não confiáveis, `eval()` em input de usuário?
- **Injeção de template:** Server-Side Template Injection (SSTI) em motores como Jinja2, Handlebars, Pug?

### 5. Revisão de criptografia

- Algoritmos usados (AES, RSA, bcrypt, argon2, SHA-256 vs MD5/SHA1 para segurança)
- Implementações customizadas de criptografia (⚠️ quase sempre problemáticas)
- Uso de HTTPS/TLS — configurações de servidor, certificados
- Armazenamento seguro de segredos (variáveis de ambiente vs arquivos vs cofre)
- Hashing de senhas — algoritmo + fator de trabalho (cost/rounds)
- Proteção de dados sensíveis em logs (dados mascarados?)

### 6. Gerenciamento de sessão

- Como as sessões são criadas, armazenadas e invalidadas?
- Token expiração e renovação (refresh tokens? rotação?)
- Sessões HTTP: Secure + HttpOnly + SameSite flags nos cookies
- CSRF protection implementada?
- Session fixation possível?

### 7. Segurança de API (se aplicável)

Se OpenAPI/REST/GraphQL endpoints foram identificados:

- Autenticação documentada vs real — há discrepâncias?
- Rate limiting presente?
- CORS configurado corretamente? (origens específicas vs `*`)
- Input validation por endpoint
- Mass assignment / object injection via API params

### 8. Checklist OWASP Top 10

Ao final, mapeie os achados contra o OWASP Top 10 atual (2021):

| # | Categoria | Status |
|---|-----------|--------|
| A01 | Broken Access Control | 🟢 / 🟡 / 🔴 |
| A02 | Cryptographic Failures | 🟢 / 🟡 / 🔴 |
| A03 | Injection | 🟢 / 🟡 / 🔴 |
| A04 | Insecure Design | 🟢 / 🟡 / 🔴 |
| A05 | Security Misconfiguration | 🟢 / 🟡 / 🔴 |
| A06 | Vulnerable and Outdated Components | 🟢 / 🟡 / 🔴 |
| A07 | Identification and Authentication Failures | 🟢 / 🟡 / 🔴 |
| A08 | Software and Data Integrity Failures | 🟢 / 🟡 / 🔴 |
| A09 | Security Logging and Monitoring Failures | 🟢 / 🟡 / 🔴 |
| A10 | Server-Side Request Forgery (SSRF) | 🟢 / 🟡 / 🔴 |

Use 🟢 se não há evidência do problema, 🟡 se há indícios parciais ou configuração questionável, 🔴 se o problema foi confirmado.

## Saída

**Sempre:**
- `_reversa_sdd/security/audit.md` — relatório completo de auditoria, organizado por seção (dependências, secrets, auth, input validation, crypto, sessão, API) com cada achado classificado por severidade e com referência ao arquivo/linha de origem

**Sempre:**
- `_reversa_sdd/security/secrets-scan.md` — lista de segredos encontrados, cada um com localização exata (arquivo:linha), tipo (API key, password, token, private key) e severidade (🔴 crítico / 🟡 alto / 🟢 baixo)

**Condicionais por `doc_level`:**
- `_reversa_sdd/security/vulnerabilities.md` — se `completo` ou `detalhado`: análise de CVEs conhecidos por dependência (com severidade estimada) + lista priorizada de remediações. Se `detalhado`, inclua CVSS estimado para cada CVE.

## Escala de confiança

Seja rigoroso — muito aqui será 🟡 INFERIDO.
- 🟢 **CONFIRMADO** — vulnerabilidade confirmada por código, arquivo e linha citados
- 🟡 **INFERIDO** — padrão suspeito mas sem confirmação, ou ausência de evidência (falta de validação é difícil de provar)
- 🔴 **LACUNA** — não é possível determinar do código (exige teste dinâmico)

## Regras importantes

- **Nunca execute o sistema.** Toda análise é estática — baseada no código-fonte e artefatos existentes.
- **Nunca invente vulnerabilidades.** Se um padrão é potencialmente inseguro, marque como 🟡 INFERIDO e explique o risco. Não diga que algo é vulnerável sem evidência de código.
- **Priorize por severidade.** Comece pelos achados mais críticos (segredos expostos, SQL injection, hardcoded credentials) e termine com os de menor risco.
- **Se houver 🔴 LACUNA severa que impeça uma conclusão definitiva, informe ao Reversa como lacuna priorizada.**

Informe ao Reversa ao concluir: número de achados por severidade, segredos encontrados (se houver), OWASP categorias comprometidas, e recomendações prioritárias.
Empty file.
55 changes: 53 additions & 2 deletions agents/reversa/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,59 @@ Você é o Reversa, orquestrador central do framework Reversa.
## Ao ser ativado

1. Leia `.reversa/state.json`
2. Se o arquivo não existir ou `phase` for `null`: leia e siga `references/step-01-first-run.md`
3. Se `phase` estiver definida: leia e siga `references/step-02-resume.md`

2. **Se o arquivo não existir:**
a. Verifique se `.agents/skills/reversa/SKILL.md` existe (skills estao instalados)
b. Se skills existem mas state nao: execute este script Node.js para criar o estado automaticamente:
```js
import { mkdirSync, writeFileSync } from 'fs';
import { join } from 'path';
const root = process.cwd();
mkdirSync(join(root, '.reversa', '_config'), { recursive: true });
mkdirSync(join(root, '.reversa', 'context'), { recursive: true });
writeFileSync(join(root, '.reversa', 'state.json'), JSON.stringify({
version:'1.2.14', step:0, phase:'idle',
project: root.split('/').pop(), user_name: 'Developer',
chat_language: 'en', doc_language: 'English',
answer_mode: 'chat', output_folder: '_reversa_sdd',
engines: [],
agents: [], completed: [],
pending: ['reconhecimento','escavacao','interpretacao','geracao','revisao'],
checkpoints: {}, created_files: []
}, null, 2));
writeFileSync(join(root, '.reversa', 'plan.md'),
'# Exploration Plan\n\n## Project: ' + root.split('/').pop() + '\n## Date: '
+ new Date().toISOString().split('T')[0]
+ '\n\n## Phases\n1. Reconnaissance (Scout)\n2. Excavation (Archaeologist)'
+ '\n3. Interpretation (Detective + Architect)\n4. Generation (Writer)\n5. Review (Reviewer)\n');
writeFileSync(join(root, '.reversa', 'version'), '1.2.14');
```
c. Informe o usuario: "Reversa configurado automaticamente. Vamos iniciar a analise."
d. Prossiga para `step-01-first-run.md`

3. Se `phase` for `null` ou `idle`: leia e siga `references/step-01-first-run.md`

4. Se `phase` estiver definida e nao for `idle`: leia e siga `references/step-02-resume.md`

## MCP Server (consulta de estado e relatorios)

Se o servidor MCP estiver configurado (`npx reversa mcp`), a engine pode consultar estado e relatorios via MCP:
- `reversa_status(path)` — retorna o state.json como JSON estruturado
- `reversa_analyze(path, level?)` — verifica se a analise pode ser iniciada/retomada
- `reversa_confidence(path)` — retorna o relatorio de confianca
- `reversa://state` (resource) — state.json como recurso MCP
- `reversa://inventory` (resource) — inventory.md como recurso MCP

**Importante:** MCP e apenas leitura. O pipeline continua sendo executado via skills.

## Modo nao-interativo (--yes)

O comando `npx reversa install --yes` aceita flags para instalacao headless:
```
--project, --engines, --user, --chat-language, --doc-language,
--output, --git-strategy, --answer-mode, --agents, --reinstall
```
Use quando o Reversa precisar ser instalado via script ou em ambientes sem TTY.

## Executando os agentes do plano

Expand Down
10 changes: 10 additions & 0 deletions bin/reversa.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ const commands = {
'add-agent': () => import('../lib/commands/add-agent.js'),
'add-engine': () => import('../lib/commands/add-engine.js'),
'export-diagrams': () => import('../lib/commands/export-diagrams.js'),
mcp: () => import('../lib/mcp/server.js'),
};

const green = chalk.hex('#ffa203');
Expand Down Expand Up @@ -45,6 +46,15 @@ ______
export-diagrams Exporta diagramas Mermaid como imagens SVG/PNG
Opções: --format=svg|png --output=<pasta>
Requer: npm install -g @mermaid-js/mermaid-cli
mcp Inicia o servidor MCP para integração com agentes de IA
Compatível com Claude Code, Cursor, OpenCode e outros

Opções globais:
--yes Modo não-interativo (instalação com valores padrão)
--project=<nome> Nome do projeto (modo --yes)
--engines=<lista> Engines separadas por vírgula (modo --yes)
--user=<nome> Nome do usuário (modo --yes)
--output=<pasta> Pasta de saída (modo --yes)

Documentação: https://github.com/sandeco/reversa
`);
Expand Down
11 changes: 11 additions & 0 deletions docs/agentes/reversa.es.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,3 +51,14 @@ Sin él, cada agente tocaría su parte sin conectarse con los demás. Con él, t
```
reversa
```

---

## Integración MCP

Reversa también se puede consultar vía MCP (`npx reversa mcp`). El servidor MCP proporciona:
- **Herramientas:** `reversa_status`, `reversa_analyze`, `reversa_confidence`
- **Recursos:** `reversa://state`, `reversa://inventory`
- **Prompt:** `reversa-new-analysis`

Úsalas para consultar estado e informes sin salir del chat del agente. El pipeline se ejecuta mediante este skill — MCP es solo para lectura de resultados.
11 changes: 11 additions & 0 deletions docs/agentes/reversa.md
Original file line number Diff line number Diff line change
Expand Up @@ -65,3 +65,14 @@ After Scout finishes, Reversa reads the generated `surface.json` and personalize
```

To resume an interrupted analysis, just activate again. The saved state is read automatically.

---

## MCP integration

Reversa can also be queried via MCP (`npx reversa mcp`). The MCP server provides:
- **Tools:** `reversa_status`, `reversa_analyze`, `reversa_confidence`
- **Resources:** `reversa://state`, `reversa://inventory`
- **Prompt:** `reversa-new-analysis`

Use these to check state and reports without leaving the agent chat. The pipeline itself still runs via this skill — MCP is only for reading results.
11 changes: 11 additions & 0 deletions docs/agentes/reversa.pt.md
Original file line number Diff line number Diff line change
Expand Up @@ -65,3 +65,14 @@ Depois que o Scout termina, o Reversa lê o `surface.json` gerado e personaliza
```

Para retomar uma análise interrompida, basta ativar novamente. O estado salvo é lido automaticamente.

---

## Integração MCP

O Reversa também pode ser consultado via MCP (`npx reversa mcp`). O servidor MCP oferece:
- **Ferramentas:** `reversa_status`, `reversa_analyze`, `reversa_confidence`
- **Recursos:** `reversa://state`, `reversa://inventory`
- **Prompt:** `reversa-new-analysis`

Use estas ferramentas para consultar estado e relatórios sem sair do chat do agente. O pipeline em si continua sendo executado através deste skill — o MCP serve apenas para leitura de resultados.
40 changes: 40 additions & 0 deletions docs/cli.es.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,17 @@ Instala Reversa en el proyecto heredado actual. Detecta los motores presentes, p

Úsalo una vez, en la raíz del proyecto que quieres analizar.

**Modo no interactivo (CI/headless):**

```bash
npx reversa install --yes \
--project mi-app \
--engines opencode,claude-code \
--user Desarrollador
```

Flags disponibles: `--project`, `--engines`, `--user`, `--chat-language`, `--doc-language`, `--output`, `--git-strategy`, `--answer-mode`, `--agents`, `--reinstall=yes`.

---

### `status`
Expand Down Expand Up @@ -72,3 +83,32 @@ Elimina Reversa del proyecto: borra los archivos creados por la instalación.

!!! info "Tus archivos quedan intactos"
`uninstall` elimina **solo** lo que Reversa creó. Ningún archivo original del proyecto es tocado. Las especificaciones generadas en `_reversa_sdd/` también se conservan por defecto.

---

### `mcp`

```bash
npx reversa mcp
```

Inicia el servidor MCP de Reversa sobre stdio. Proporciona 3 herramientas, 2 recursos y 1 prompt para integración con agentes de IA:

- **Herramientas:** `reversa_status(path)`, `reversa_analyze(path, level?)`, `reversa_confidence(path)`
- **Recursos:** `reversa://state`, `reversa://inventory`
- **Prompt:** `reversa-new-analysis`

Configúralo en cualquier cliente MCP:

```json
{
"mcpServers": {
"reversa": {
"command": "npx",
"args": ["reversa", "mcp"]
}
}
}
```

Úsalo para consultar estado e informes sin salir del chat del agente. El pipeline se ejecuta cuando el agente escribe `reversa` o `/reversa`.
Loading