
Reconhecimento passivo e mapeador de superfície de ataque — zero requisições enviadas
Início rápido · Modo Hunt · Bancada · Modos · Exportações · vs Burp · Sob o capô
PenScope é uma extensão do Chrome. Instale-a, navegue em um site que você tem permissão para testar, e ela mapeia silenciosamente toda a superfície de ataque — cada endpoint, cada segredo, cada cabeçalho mal configurado, cada parâmetro oculto. Quando você dá o comando, ela envia 36 ataques de sonda diferentes usando seus cookies de sessão reais e relata quais acertaram.
Ou você define o escopo, clica em Hunt, e o PenScope faz tudo de forma autônoma enquanto você faz outra coisa — redigindo relatórios completos de bug bounty no formato HackerOne para cada descoberta Crítica e Alta que ele encontra. Você acorda com uma fila de rascunhos prontos para enviar.
É a ferramenta do dia a dia para caçadores de bug bounty que querem pular a rotina de "configurar um proxy, clicar em três janelas, alt-tab para uma lista de payloads" e apenas olhar para um site. Ou parar de olhar completamente e deixar a ferramenta caçar por eles.
Lê tudo, não envia nada — até você mandar. Defina o escopo, ative Hunt, feche o laptop. Acorde com críticos já redigidos.
Refatoração orientada por auditoria em 8 fases. Adições principais:
.env, prefixos s./b. do Vault — além de detectores de corpo de resposta Spring Boot / Rails ActiveRecord / Django DEBUG / ASP.NET YSOD / Express / Apollo / MSSQL.alg, iss, sub, aud, exp, iat, , ...). A severidade aumenta quando está no futuro e o papel é semelhante a admin.Detalhamento completo por fase em CHANGES.md. Notas de migração em MIGRATION.md.
Fixar a extensão. Visite qualquer site. Clique no ícone **P**. PenScope já estava observando.
---
## O que você pode fazer
PenScope captura mais de 60 campos de dados por aba. Veja o que isso significa na prática:
**Veja a superfície de ataque completa.** Cada endpoint, incluindo aqueles referenciados em JavaScript mas nunca realmente chamados. Caminhos de API enterrados em source maps, operações GraphQL reconstruídas a partir de corpos POST, rotas administrativas ocultas inferidas a partir da introspecção do framework.
**Encontre segredos que ninguém pretendia enviar.** Chaves de API codificadas em pacotes `.js`. JWTs no `localStorage`. Credenciais AWS em dumps de ambiente. IDs internos em corpos de resposta. O tipo de coisa que acaba em um relatório P1.
**Execute 36 etapas de ataque no seu navegador.** Bypass de autenticação, BAC, IDOR, reflexão CORS, JWT alg=none, SSTI, XXE, injeção CRLF, poluição de protótipos, descoberta de parâmetros, downgrade de versão de API. Três níveis de agressão — cuidadoso, médio, completo. Cole headers personalizados. Modo furtivo embaralha a ordem das requisições para não disparar um WAF.
**Encadeie descobertas individuais em explorações reais.** Um JWT na memória é uma descoberta. O mesmo JWT mais um endpoint de API que aceita tokens não assinados mais a função decodificada ser admin é uma cadeia — e PenScope mostra a cadeia no topo do relatório, com pontuação de confiança, comando de reprodução e próximos passos.
**Edite e reenvie qualquer requisição.** Estilo clique com botão direito. O Repeater abre em uma nova aba, janela cheia. Altere um parâmetro. Aperte Send. Veja a resposta. Coloque no Diff para comparar com a linha de base.
**Faça fuzzing com pontos de inserção.** Marque `§payload§` em qualquer lugar da requisição, escolha um conjunto de payloads (40 strings XSS, 30 SQLi, 28 LFI, 18 SSTI, 22 SSRF, 24 injeção de comando, IDs 1-100, bypass de autenticação clássicos, nomes de usuário comuns), escolha um modo de ataque (Sniper / Cluster bomb / Pitchfork / Battering ram), veja a tabela de resultados ao vivo. Linhas com anomalia são sinalizadas com uma estrela.
**Teste como cinco usuários diferentes ao mesmo tempo.** Salve contextos de autenticação (Anônimo, Usuário A, Usuário B, Admin, Interno). Um clique alterna o contexto ativo — toda requisição do Repeater, toda execução do Intruder, toda sonda usa essas credenciais. Depois execute a **Matriz de Autorização**: PenScope percorre cada endpoint × cada contexto e codifica uma grade com cores. Divergências entre linhas são suas descobertas IDOR / BAC, identificadas automaticamente.
**Gere uma CSP que realmente se ajuste ao site.** Percorre toda requisição que a página fez, classifica cada uma por tipo de recurso, constrói uma política restrita. Adiciona `default-src 'none'`, `frame-ancestors 'none'`, `upgrade-insecure-requests`. Detecta scripts inline e `eval()` e avisa quando teve que manter `'unsafe-inline'`. Compara com a CSP existente — verde para reforçada, vermelho para afrouxada.
**Converse com Claude nos dois sentidos.** Clique `→ Claude` para enviar a varredura inteira para sua área de transferência como um briefing estruturado. Pergunte a Claude o que testar em seguida. Claude responde com uma fila em JSON delimitada. Clique `⟳ Sincronizar do Claude` e PenScope analisa a fila, executa cada ataque contra o alvo ativo e alimenta os resultados de volta ao analisador de cadeias.
**Acompanhe seu escopo ao longo do tempo.** Tire um instantâneo de um site hoje, tire outro no próximo sprint, clique em Comparar. PenScope informa quais descobertas são novas, quais foram resolvidas, quais não mudaram. Exporte o diff como Markdown para o Slack da equipe.
**Mapeie descobertas para controles de conformidade.** Clique em Auditoria de Conformidade. Cada descoberta mapeia para controles específicos em PCI-DSS v4, NESA UAE IAS, SAMA CSF, DESC ISR, ISO 27001, OWASP Top 10 2021 e CWE. Exporte JSON para seu SIEM. Exporte PDF para o auditor.
---
## Modo Hunt
Clique em `🎯 Hunt` no cabeçalho do popup. Uma nova aba se abre. O **painel de pré-voo** na parte inferior mostra o estado do seu motor — endpoints capturados, segredos, tecnologia detectada, contextos de autenticação salvos — para que você saiba se tem superfície suficiente para uma caçada produtiva antes de clicar em Iniciar. Se endpoints < 20, um aviso amarelo sugere navegar no alvo primeiro OU confiar na nova etapa de auto-rastreamento DOM. Configure seu escopo alvo (caminhos no escopo, caminhos fora do escopo, nível de agressão, orçamento de tempo). Clique em `▶ Iniciar Hunt`.
PenScope autonomamente:
1. Conclui o reconhecimento passivo
2. **Ativa automaticamente o modo Deep** (depurador CDP anexa silenciosamente — sem prompt do usuário)
3. **Auto-rastreamento DOM** — percorre cada `<a href>`, `<form action>`, ``, `[routerLink]`, `[ng-href]`, `[to]`, `[data-href]` na página atual. Filtra para URLs de mesma origem. Adiciona novas à fila de sondagem. _Extração pura de URL — sem cliques, sem navegação, sem efeitos colaterais que alterem a sessão._
4. Executa todo o pipeline de 36 etapas de sonda + 8 pacotes de ataque conscientes de pilha
5. Percorre a **Matriz de Autorização** nos contextos de autenticação salvos
6. Executa o correlacionador de cadeias, filtra pelas suas regras de escopo
7. **Redige um relatório completo no formato HackerOne para cada descoberta Crítica e Alta** — cadeias *e* descobertas individuais de alta gravidade (segredos expostos, JWT alg=none, SSTI/XXE/CRLF confirmados). Cada rascunho inclui título, gravidade com estimativa CVSS, resumo, etapas para reproduzir com curl em duas etapas (sonda sem autenticação + linha de base com autenticação para diff), declaração de impacto específica para a descoberta, correção sugerida da biblioteca de snippets e referências
8. Dispara uma notificação do Chrome por descoberta crítica: _"Hunt Mode encontrou um IDOR Crítico em /api/users — rascunho do relatório pronto"_
9. Persiste rascunhos em `chrome.storage.local` chaveados por host (sobrevivem ao fechamento da aba + reinicialização do navegador)
A **aba Live** narra cada etapa de filtro em tempo real — contagem de cadeias antes/depois do filtro de escopo, distribuição de gravidade, o que foi descartado e por quê. Se a caçada terminar com 0 relatórios, um diagnóstico "Por que nenhum relatório?" percorre cada ponto de filtro com sugestões concretas ("desmarcar filtro Critical+High", "salvar 2+ contextos de autenticação", "navegar mais no alvo primeiro"). Sem mais se perguntar por que uma caçada ficou vazia.
**Você acorda com uma fila de relatórios de recompensa pré-escritos.** Leia cada um, clique em Copiar ou Exportar, cole em sua submissão HackerOne / Bugcrowd / Intigriti.
Este é o fluxo de trabalho que o Burp nem tenta. O Scanner Ativo do Burp executa ataques, mas você ainda tem que escrever o relatório. PenScope domina o caminho inteiro de varredura → exploração → relatório → submissão.
> Defina o escopo. Aperte Iniciar. Feche o laptop. Acorde com uma fila de Críticos redigidos.
### Controles de qualidade — mantenha sua reputação
O Hunt Mode filtra ativamente falsos positivos que queimariam sua reputação se submetidos:
- **Shells HTML SPA** — páginas de bootstrap Angular/React/Vue retornam HTML idêntico para requisições autenticadas e não autenticadas porque o JS gerencia a autenticação no lado do cliente. Hunt Mode detecta esse padrão (caminho termina em `.html` + `sameBody=true`) e suprime a descoberta. APIs reais ainda reportam.
- **Tokens SAS benignos do Azure** — URLs SAS curtas e somente leitura para mídia (`image.jpg?sv=...&sp=r&se=...`) são entrega legítima de CDN, não vazamento de credenciais. Hunt Mode verifica `sp=r` + extensão de arquivo de mídia + `se - st < 7 dias` e suprime. Tokens SAS de longa duração, com capacidade de escrita ou não mídia ainda reportam como vazamentos reais.
- **Normalização de fragmentos hash** — `/Dashboard#!/` é uma rota do lado do cliente, não um endpoint do servidor. Hunt Mode remove fragmentos hash antes da análise de cadeias para que o relatório mostre `/Dashboard` (o caminho real do servidor).
- **`baseUrl` real em cada curl** — o analisador de cadeias deriva o host alvo de `tab.url` (apenas HTTP/HTTPS) com fallback para o primeiro endpoint observado. Sem mais URLs de placeholder `https://target.tld` em seus relatórios.
- **Diagnósticos transparentes** — cada etapa de filtro (escopo, gravidade, deduplicação) registra suas contagens antes/depois no feed ao vivo. Quando uma caçada termina com 0 relatórios, o feed termina com um bloco "Por que nenhum relatório?" explicando exatamente onde cada potencial descoberta foi descartada, com sugestões concretas de próximos passos adaptadas à sua configuração específica.
### Um rascunho real do Hunt Mode
Aqui está um trecho editado de um rascunho real que o Hunt Mode produziu em um LMS governamental em 4 minutos:```markdown
# Authentication bypass on sensitive endpoint: /api/DashboardApi/getUsefulLinks
**Severity:** CRITICAL (CVSS estimate: 9.0–10.0)
**Confidence:** 95%
**Target:** https://lms.example.gov/Dashboard
**Discovered:** 2026-05-01T07:31:13.151Z
**Detected by:** PenScope v6.2 Hunt Mode (chain pattern: chain-authbypass)
## Summary
PenScope's probe confirmed that GET /api/DashboardApi/getUsefulLinks returns
the same data whether or not authentication cookies are sent
(auth=200, noauth=200, sameBody=false). The path name strongly suggests this
endpoint should be role-gated — it's returning sensitive data to
unauthenticated callers.
## Steps to reproduce
# Verify unauthenticated access
curl -i "https://lms.example.gov/api/DashboardApi/getUsefulLinks"
# Compare to authenticated baseline (paste your real cookies):
curl -i "https://lms.example.gov/api/DashboardApi/getUsefulLinks" -b "session=..."
## Impact
Successful exploitation enables an attacker to bypass core security controls,
gain unauthorized access to sensitive functionality or data, and pivot to
broader compromise. This is a credible breach path warranting immediate
remediation.
## Suggested fix
Enforce server-side authentication on every endpoint that returns sensitive
data. The fact that PenScope received a 200 with no cookies means the
authorization middleware is missing or disabled for this route.
[ ... full Express/Django/Laravel snippet examples + references ... ]
Isso é um relatório de bounty submetível. Redigido enquanto você fazia outra coisa.
O Workbench é o que eleva o PenScope de "ferramenta de reconhecimento passivo" para "tudo pelo qual você abriria o Burp." Clique em ⌘ Workbench no cabeçalho do popup e uma aba Chrome de janela inteira abre com seis ferramentas, compartilhando estado com sua varredura.
Capturou uma requisição que quer modificar? Clique nela no Mapa do Site. A requisição completa — método, URL, cabeçalhos, corpo — carrega no editor. Edite qualquer coisa. Aperte Send (ou Ctrl+Enter). A resposta renderiza à direita com status, tamanho, tempo e o contexto de autenticação ativo que a disparou.
A barra de histórico mantém seus últimos 50 envios. Três botões transformam a requisição atual em artefatos acionáveis: Copy as curl (para terminais e relatórios), Send to Intruder (com os mesmos cabeçalhos e corpo pré-carregados), Send response to Diff.
Pegue qualquer requisição. Envolva o valor que deseja fuzzear em §...§. Escolha um conjunto de payloads. Aperte Start.
Biblioteca de payloads embutida:
Ou cole sua própria lista. Quatro modos de ataque: Sniper (uma posição por vez), Cluster bomb (todas as combinações), Pitchfork (posições em sincronia), Battering ram (mesmo payload em todos os lugares). Tabela de resultados ao vivo com detecção de anomalias — linhas onde o código de status ou o tamanho da resposta diferem da linha de base são sinalizadas.
Limite máximo: 200 requisições por ataque. Não cause DoS acidentalmente no seu alvo de bounty.
Conversões ida e volta para os formatos que os caçadores tocam todos os dias:``` Base64 ↔ B64-URL ↔ URL ↔ HTML ↔ Hex ↔ MD5 / SHA-1 / SHA-256 / SHA-512
Além disso, um **cartão JWT** dedicado: cole um token, decodifique o cabeçalho e o payload, edite qualquer um deles e forje um novo. Dois modos de forjar:
- **alg=none** — o teste clássico de bypass de autenticação JWT (servidor confia em tokens não assinados)
- **HS256** — assinar com um segredo fraco adivinhado (`secret`, `key`, `password`, `jwt-secret` são os comuns)
A saída é um único token, pronto para copiar e colar.
### Diff
Dois painéis de texto. Envie respostas do Repeater com um clique. Pressione `Compute Diff`. O PenScope executa um diff de linha LCS e codifica as cores do resultado: `+` para adicionado, `−` para removido. Contagem resumida no topo.
Este é o matador de confirmação de IDOR. "A resposta para o Usuário A é *a mesma* que para o Usuário B, ou o servidor realmente retornou os dados do Usuário B?" O Diff diz em três segundos.
### Site Map
Árvore hierárquica de cada endpoint capturado pelo PenScope, organizado por host → caminho. Pílulas de método (`GET`, `POST`, `DELETE`...). Emblemas de código de status por nó, codificados por cores verde/amarelo/laranja/vermelho. Clique em qualquer caminho para carregá-lo no Repeater.
A superfície de ataque completa, em uma visão, pronta para testar.
### Auth Contexts + Authorization Matrix
Este é o diferencial. O Burp não vem com isso.
Salve perfis de autenticação nomeados. Cada perfil = um nome + um conjunto de cookies + um conjunto de cabeçalhos. Construa-os fazendo login como cada usuário, copiando seus cookies de sessão + cabeçalho Authorization, colando no editor. Adicione notas ("plano pago", "função somente leitura", "staff interno"). Um clique alterna o contexto ativo. Cada solicitação do Repeater / Intruder / probe agora é disparada com essas credenciais.
Em seguida, clique em `Run authorization matrix`. O PenScope atinge cada endpoint × cada contexto e renderiza uma grade:```
Anonymous User A User B Admin
GET /api/me 401 200 200 200
GET /api/users 401 403 403 200
GET /api/admin 401 403 403 200
DELETE /api/orders/5 405 403 403 ★ 200
PATCH /api/users/42 401 200 ★ 403 200
Estrelas marcam linhas onde os contextos discordam. Essas linhas são suas descobertas de IDOR e BAC, automaticamente destacadas.
Um caçador típico passa uma tarde inteira testando manualmente cada endpoint como cada usuário, fazendo anotações em um documento. O PenScope faz isso em 30 segundos e codifica os resultados por cores.
Mesmo motor de dados, três visualizações. Escolha a que corresponder ao que você está fazendo.
Troque os modos com a pílula Clássico / Vermelho / Azul no cabeçalho do popup. Cada aba lembra em qual modo você estava por último. As cores do tema mudam com o modo.
Clique em Export ▾ no cabeçalho do popup. Dez formatos, dois propósitos:
O relatório Markdown é feito para compartilhamento — toda credencial é redigida, o cabeçalho do relatório diz isso explicitamente. O JSON é feito para sincronização com seu parceiro de caça — toda credencial é enviada intacta.
PenScope e Burp resolvem o mesmo problema de lados diferentes. O PenScope vive no seu navegador; o Burp é um proxy MITM. Ambos têm seu lugar. Aqui está a comparação honesta.
Onde o PenScope vence: gratuito, configuração mais rápida, nativo do navegador (usa sua sessão real, sem frescura de certificado), correlação de cadeia, ferramentas de modo defensor, ponte de IA.
Onde o Burp vence: a interceptação em nível TLS permite que você veja e modifique requisições antes que elas saiam da pilha de rede — útil para aplicativos nativos e contrabando de websocket. O Collaborator fornece infraestrutura de callback fora de banda para XXE cego / SSRF.
Se você faz bug bounty exclusivamente no seu navegador em aplicativos web, o PenScope substitui o Burp em ~95% do seu fluxo de trabalho diário. Se você faz engenharia reversa de aplicativos móveis ou testa clientes pesados, o Burp ainda é seu amigo.
PenScope não envia nada sem ação explícita do usuário. Há:
O tráfego de saída ocorre apenas em três casos:
Zero pacotes npm. Zero scripts de CDN. Zero SDKs de terceiros. JavaScript puro vanilla, manifesto MV3, superfície de ataque de cadeia de suprimentos zero.
Arquitetura, os 36 ataques de sonda, os 13 padrões de cadeia, o mapa de arquivos e por que nada disso precisa de uma etapa de construção.
┌──────────────────────────┐
│ state[tabId] │
│ 60+ fields populated by │
│ webRequest / content / │
│ CDP / probe layers │
└──────────┬───────────────┘
│
┌───────────────────────┼───────────────────────┐
│ │ │
Classic mode Red mode Blue mode renderClassic() renderRed() renderBlue() │ │ │ └───────────────────────┴───────────────────────┘ │ ┌────────────────┴────────────────┐ │ │ Workbench Hunt Mode (Repeater · Intruder · Encoder (autonomous orchestrator · Diff · Site Map · Auth Matrix) drafting H1 reports)
**Um mecanismo, três modos, três superfícies.** O mecanismo de dados é independente do modo — cada campo de estado é coletado da mesma forma, independentemente da visualização em que você está. Os modos são escolhas de tema + renderizador sobre os mesmos dados. A Workbench e o Hunt Mode são guias Chrome independentes que compartilham `state[tabId]` por meio de manipuladores de mensagens em segundo plano.
As substituições de variáveis CSS (`body.mode-red`, `body.mode-blue`) redefinem o tema de tudo sem tocar em um único seletor de regra. É por isso que o Modo Clássico é, byte por byte, a experiência da v5.9.
---
## Desempenho
O PenScope está em todas as guias, o tempo todo. Por padrão, ele ignora o enriquecimento caro para aproximadamente 50 sufixos de hosts ruidosos conhecidos (CDNs de vídeo como `googlevideo.com`, redes de anúncios como `doubleclick.net`, endpoints de telemetria como `sentry.io`, grandes CDNs estáticas como `gstatic.com`). Centenas de requisições de blocos do `googlevideo.com` por minuto no YouTube não passam mais por 14 regexes AUTH_PATTERN + detecção de parâmetros de caminho + consulta ao Swagger — elas são registradas como endpoints (portanto, o Mapa do Site ainda as inclui) e ignoradas para o restante.
O mesmo caminho rápido para tipos de recurso `image`/`media`/`font`/`stylesheet`/`object`/`ping` em qualquer host. Bugs quase nunca se escondem em parâmetros de URL `.css`.
As re-varreduras do DOM do script de conteúdo são executadas via `requestIdleCallback` (com um intervalo mínimo rígido de 15 segundos entre varreduras) e são totalmente ignoradas quando a guia está oculta. O MutationObserver filtra alterações apenas de texto (ticks de temporizador, atualizações de dados de caracteres), de modo que a constante alteração DOM do YouTube não aciona uma re-varredura completa a cada 3 segundos.
Substituição disponível: caixa de seleção **"Captura completa em hosts ruidosos"** no menu suspenso Probe. Quando você estiver auditando especificamente YouTube/Twitch/Sentry/etc. COMO o alvo, marque-a e o caminho rápido é ignorado.
---
## Os 45 ataques de sonda
Executados sob demanda. Três níveis de agressividade com um contrato obrigatório: **Cuidadoso** = apenas GET/HEAD/OPTIONS com espaçamento mínimo de 200ms entre requisições; **Médio** = adiciona POST para operações de leitura (≤3 paralelas); **Completo** = todos os métodos, incluindo DELETE/PUT/PATCH mais rajadas de condição de corrida (≤10 paralelas). Cabeçalhos personalizados são colados em cada requisição. O modo furtivo embaralha a ordem dos passos com Fisher-Yates e adiciona jitter de 0–80% aos atrasos entre passos. O método esperado de cada passo é verificado em simulação contra o nível ativo no início da sonda; passos bloqueados são listados no registro de diagnóstico.
| # | Ataque | O que faz |
|---|---|---|
| 1 | Introspecção GraphQL | Despeja esquema, tipos, consultas, mutações |
| 2 | Coleta de mapas source | Baixa `.map`, extrai segredos + endpoints |
| 3 | Busca Swagger/OpenAPI | `/swagger.json`, `/openapi.json`, etc. |
| 4 | Pré-voo OPTIONS | Pré-voo CORS em cada caminho de API |
| 5 | Sondagem de caminhos de reconhecimento | `/admin`, `/.env`, `/.git/HEAD`, `/actuator` |
| 6 | Força bruta de prefixo/sufixo de API | `/api/v1/<word>` |
| 7 | Força bruta inteligente de sufixo | Prefixo × sufixo embaralhado furtivamente |
| 8 | BAC (controle de acesso quebrado) | Endpoints de alteração de estado não autenticados |
| 9 | Teste automático de IDOR | Substituição de ID + comparação de mesmo corpo |
| 10 | Teste de reflexão CORS | Reflexão de Origem com credenciais |
| 11 | Adulteração de método | Troca GET/POST/PUT/PATCH/DELETE |
| 12 | Sonda de redirecionamento aberto | `?redirect=evil.com` variantes |
| 13 | Sonda de condição de corrida | Requisições concorrentes em endpoints sensíveis à idempotência |
| 14 | Poluição de parâmetros HTTP | `?id=1&id=2` |
| 15 | Enumeração de subdomínios | De logs CT + tráfego observado |
| 16 | Fuzzing de campos GraphQL | Sonda cada campo introspectado por autenticação |
| 17 | Aceitação de JWT alg=none | O servidor confia em tokens não assinados? |
| 18 | Injeção de cabeçalho Host | Variantes de `X-Forwarded-Host` |
| 19 | Envenenamento de cache | Injeção de cabeçalho não chaveado |
| 20 | IDOR confirmado mesmoCorpo | Similaridade de corpo entre IDs |
| 21 | Teste de remoção de autenticação | Remover cookies, buscar 200s |
| 22 | Lacuna de validação CSRF | Endpoints de alteração de estado sem token |
| 23 | Reflexão gRPC | Serviço de reflexão gRPC exposto |
| 24 | Oráculo de compressão (BREACH) | Heurístico, não explora realmente |
| 25 | Sequestro de WebSocket | Conexões WS de origem cruzada |
| 26 | Sonda de envenenamento de cache | Entrada não chaveada baseada em cabeçalho |
| 27 | Oráculo de temporização | Variação de temporização no mesmo endpoint |
| 28 | Bypass de COOP/COEP | Força do isolamento de origem cruzada |
| 29 | Partição de armazenamento | Isolamento de armazenamento entre sites |
| 30 | Descoberta recursiva inteligente | 3 ondas de sondagem, encadeadas a partir de respostas anteriores |
| 31 | Descoberta de parâmetros | 38 parâmetros ocultos em força bruta (`debug`, `admin`, `_method`, `bypass`...) |
| 32 | Sondagem de SSTI | `{{7*7}}`, `${7*7}`, `<%=7*7%>` |
| 33 | Sondagem de XXE | XML com entidades externas |
| 34 | Injeção de CRLF | `%0d%0a` em parâmetros de redirecionamento |
| 35 | Rebaixamento de versão de API | `/v1/`, `/v2/` para cada `/vN/` observado |
| 36 | Poluição de protótipo | `__proto__` / `constructor.prototype` em corpos JSON |
| 37 | Sondagem de parâmetro SSRF | 26 nomes de parâmetros SSRF com payloads de metadados de nuvem; sinaliza conteúdo de metadados refletido |
| 38 | Injeção de operador NoSQL | `{"$ne":null}` / `{"$gt":""}` / `{"$exists":true}` em campos de ID JSON |
| 39 | Amplificação de alias GraphQL | Consulta com 50 aliases → superfície de amplificação DoS (apenas completo) |
| 40 | Amplificação em lote GraphQL | Lote de 25 elementos JSON → amplificação DoS (apenas completo) |
| 41 | Engano de cache | Estilo `/api/me/avatar.css` — conteúdo sensível armazenado em cache por trás de extensões estáticas |
| 42 | Assunção de subdomínio | Sonda estilo HEAD de subdomínios capturados; corresponde a assinaturas de assunção do GitHub Pages / S3 / Heroku / Netlify / Vercel / Bitbucket / Shopify |
| 43 | TabNabbing | `<a target="_blank">` de origem cruzada sem `rel="noopener"` |
| 44 | Correlação de origem postMessage | Listeners `addEventListener("message")` sem verificações de origem |
| 45 | Abuso de escopo de Service Worker | Sinaliza escopos amplos de SW (especialmente `/`) |
Mais **8 pacotes de ataque cientes de pilha** que disparam automaticamente quando o Modo Vermelho detecta o framework correspondente: Laravel, Spring Boot, Rails, ASP.NET, Django, Next.js, GraphQL, WordPress. Cada pacote tem 4–9 testes específicos da pilha. Somente o pacote do Spring Boot atinge `/actuator/heapdump`, `/actuator/env`, `/jolokia/list`, `/h2-console`.
---
## Os 13 padrões de cadeia
Descobertas individuais são ruído. Descobertas compostas são explorações. O analisador de cadeia do PenScope percorre o estado completo e emite cadeias onde múltiplos sinais se combinam em algo explorável.
1. **Bypass de autenticação em endpoint sensível** — autenticação ausente confirmada + caminho de admin/faturamento/usuário
2. **BAC destrutivo** — endpoint vulnerável com `delete`/`remove`/`purge` no caminho
3. **Mutação GraphQL vulnerável a CSRF** — CSRF ausente confirmado + é uma mutação
4. **Token de autenticação exposto + API ativa** — JWT na memória + endpoints correspondentes
5. **IDOR confirmado com dados sensíveis** — resposta de mesmo esqueleto entre IDs
6. **Reflexão CORS COM credenciais** — bypass completo de SOP
7. **Redirecionamento aberto no fluxo de autenticação** — parâmetro de redirecionamento em caminhos de callback OAuth
8. **Rotas de admin ocultas** — 3+ caminhos de admin no código nunca observados no tráfego
9. **JWT alg=none aceito** — servidor confia em tokens não assinados
10. **Segredos vazados em source map** — arquivos `.map` de produção com chaves codificadas
11. **Vazamento de IP interno do WebRTC** — IPs privados expostos via STUN
12. **Cluster de descobertas de sonda recursiva** — 3+ descobertas sensíveis em múltiplos endpoints
13. **Superfície RCE específica da pilha** — pacote de pilha encontrou actuator/Ignition/etc. expostos
Cada cadeia tem uma severidade, resumo, comando de reprodução, próximos passos e pontuação de confiança. Ordenado por `severity × confidence`. Renderizado no topo do modo Vermelho e no topo de cada relatório Claude.
---
## Pontuação de saúde (modo Azul)```
score = max(10, 100 − min(90, crit×22 + high×9))
Rigoroso por propósito. Apenas críticos e altos movem o número. Médios e baixos ainda aparecem nos contadores e nas 5 principais correções — vale a pena corrigi-los — mas não arrastam a pontuação.
Piso em 10 para que um site catastrófico leia "10/100", não "0/100" (que o usuário não conseguiria distinguir de "varredura falhou").
PenScope/ ├── manifest.json MV3 manifest, v6.3.0, "type":"module" service worker ├── popup.html Mode UI shell — three modes, glassmorphism dark theme ├── popup.js Renderers, mode router, weaponize panels, fix snippets, │ compliance, Hunt + Workbench launchers, exports ├── content.js Content script — DOM scanning, secrets, JSON islands, │ tech fingerprints, XSS sinks, postMessage scan │ ├── workbench.html / .js Workbench tab — Repeater / Intruder / Encoder / │ Diff / SiteMap / AuthCtx + AuthMatrix │ ├── hunt.html / .js Hunt Mode tab — autonomous orchestrator │ ├── regex-pack.json 81 secret patterns + 44 response-body patterns │ (loaded by SW at boot, merged into RESP_PATTERNS, │ fetched by content script via getRegexPack message) │ ├── src/ Service worker entry + module tree (Phase 7 migration) │ ├── background.js Entry — webRequest, CDP, probe orchestrator, │ │ chain correlator, message router (~7,000 lines) │ ├── probe/ │ │ └── stack-packs.js STACK_ATTACK_PACKS (8 stacks) — extracted module │ └── (other audit-named files are stubs — see MIGRATION.md) │ ├── fonts/ Local woff2: JetBrains Mono + Plus Jakarta Sans │ (4 + 5 weights, ~590 KB total). Replaces the │ Google Fonts beacon that earlier versions hit on │ every popup open. │ ├── icons/ 16, 48, 128 px PNG ├── CHANGELOG.md Full version history v5.1 → v6.3.0 ├── CHANGES.md v6.3 per-phase fix breakdown ├── MIGRATION.md Phase 7 module-migration map (real vs stub) ├── LICENSE MIT └── README.md You are here
Os quatro arquivos de referência antigos (`red-attacks.js`, `blue-fixes.js`, `blue-csp.js`, `blue-compliance.js`) foram removidos na v6.3 — seu conteúdo já estava embutido em `popup.js` / `background.js` desde a v6.0; os arquivos independentes eram código morto. `STACK_ATTACK_PACKS` agora é uma exportação real de módulo ES a partir de `src/probe/stack-packs.js`.
---
## Sem etapa de compilação```bash
git clone https://github.com/spider12223/PenScope
# That's it.
Sem npm install. Sem webpack. Sem babel. Sem TypeScript. Sem bundler. JavaScript vanilla puro. A tag <script> do popup.html aponta diretamente para popup.js. O service worker carrega background.js diretamente. O CSS está inline em <style>.
A implementação MD5 tem cerca de 50 linhas da referência RFC 1321 inline (porque crypto.subtle não expõe MD5). O diff LCS tem cerca de 30 linhas. A assinatura JWT usa crypto.subtle.sign nativo. O correlacionador de cadeia é regex puro + iteração de array. Tudo o que você lê neste código é exatamente o que é executado no navegador.
Uma ferramenta de reconhecimento que vem com 200 dependências npm transitivas tem 200 pacotes de superfície de ataque de supply chain. PenScope tem zero.
Bug reports e PRs são bem-vindos. Algumas diretrizes:
package.json. Se precisar de um utilitário pequeno, escreva 20 linhas.state[tabId]. Não introduza novos stores globais.:focus-visible, rótulos ARIA, contraste ≥4.5:1.new Function(). Service workers do MV3 proíbem código dinâmico. Use declarações de função nomeadas + args para chrome.scripting.executeScript.MIT. Use, fork, envie.
Se o PenScope encontrar um crítico para você, abra uma issue e nos conte. Coletamos histórias de guerra.
Construído por caçadores, para caçadores.
rolescopeexpAccessibility.getFullAXTree expõe aria-labels sensíveis (botões admin/sudo/delete/destroy). Storage.getCookies expõe cookies particionados CHIPS que chrome.cookies.getAll não expõe.<script type="application/json"> (Next __NEXT_DATA__, Nuxt __NUXT__, Remix __remixContext, Apollo __APOLLO_STATE__) são analisados para endpoints + campos de ID, não apenas escaneados por regex.curl por linha, botão unauth por linha (reproduz a requisição sem cookies, mostra veredito lado a lado). Visualização de tabela de rotas que colapsa /users/123, /users/124 em /users/{id} com contagens. Trilho de auto-pivot para subdomínios admin.*, api.*, internal.*.ffuf -w.window.__ps_ctx não vaza mais os cabeçalhos Authorization do usuário para o contexto da página após a conclusão da sonda. Comandos de repetição em cadeia ocultam cookies de sessão por padrão (o modo Red tem uma opção para valores ativos). A IIFE da sonda captura fetch/JSON/Promise/atob/btoa/etc. na inicialização para que páginas instrumentadas com analytics não possam interceptar a sonda substituindo globais. Fornecimento local de fontes — zero requisições externas ao abrir o popup."type":"module". Árvore de diretórios src/ no lugar; STACK_ATTACK_PACKS extraído para src/probe/stack-packs.js. Os módulos restantes são stubs documentando o caminho de extração.| Conjunto | Contagem | Caso de uso |
|---|
| XSS | 40 | Teste de reflexão, XSS DOM, variantes SVG/iframe |
| SQLi | 30 | Blind booleano, baseado em erro, baseado em tempo, UNION |
| LFI / Path Traversal | 28 | Variantes de codificação, Windows + Linux, envenenamento de log |
| SSTI | 18 | Jinja2, Twig, Freemarker, Velocity, Smarty |
| SSRF | 22 | Variantes de localhost, metadados AWS/Azure/GCP, gopher/dict |
| Command Injection | 24 | Bash, PowerShell, bypass de IFS |
| IDs 1-100 | 100 | Para enumeração de IDOR |
| Auth bypass | 25 | Truques de caminho, escalonamento de função, bypass de autenticação SQL |
| Nomes de usuário comuns | 25 | admin, root, test, support, service... |
| Modo | Feito para | O que está na tela |
|---|
| 🟣 | Clássico | Fluxo de trabalho familiar, dados completos | Cada aba, cada detalhe. O PenScope original. |
| 🔴 | Vermelho | Testes ofensivos | Trilha de cadeia de exploração no topo com botões de armamento (curl, YAML do Nuclei, requisição Burp, rascunho de relatório H1, fila do Claude). Pacotes de ataque cientes de pilha disparam automaticamente em frameworks detectados (Laravel, Spring Boot, Rails, ASP.NET, Django, Next.js, GraphQL, WordPress). Primeiro a cadeia, abas clássicas recolhidas abaixo. |
| 🔵 | Azul | Defensores / revisão de segurança | Pontuação de saúde (0-100, rigorosa — apenas críticos e altos contam). Top 5 correções priorizadas por gravidade × facilidade, cada uma com snippets copiáveis em Nginx / Apache / IIS / Express / Django / Laravel / Rails / ASP.NET. Gerador de CSP a partir de tráfego observado. Auditoria de conformidade de 7 frameworks. Snapshot e diff de regressão. Monitor contínuo com notificações do Chrome quando novos segredos vazam. |
| Exportação | Inclui credenciais? | Use para |
|---|
| JSON (dados completos) | ✅ Sim | Formato de compartilhamento em equipe. Dois caçadores trabalhando no mesmo alvo precisam de contextos de autenticação compartilhados para reproduzir descobertas. Envie via Signal / canal criptografado. |
| 📄 Relatório Completo (.md) | ❌ Redigido | Submissão de bounty, engajamento com cliente, qualquer lugar onde saia da sua equipe. Valores de cabeçalhos de autenticação (Authorization, Cookie, X-API-Key, X-Auth-Token, X-CSRF-Token, X-Amz-Security-Token, etc.) substituídos por <redigido, N caracteres>. Inclui relatórios elaborados do Modo Caça, acertos de pacotes de ataque de pilha, alertas de monitor contínuo e estado de triagem Marcado como Corrigido. |
| Lista de URLs do Burp | Apenas lista de URLs | Cole no escopo alvo do Burp ou alimente ffuf/nuclei |
| Wordlist de parâmetros | Apenas nomes | Dicionários de fuzzing — parâmetros de consulta + nomes de campos de formulário + nomes de campos ocultos |
| Wordlist de parâmetros (ffuf) | Apenas nomes | Mesmos dados emitidos como linhas param=FUZZ para ffuf -w |
| Endpoints (txt) | Apenas lista de URLs | Método/status/caminho/host/tags/tamanho separados por tab — rotas observadas + descobertas |
| 📤 Exportação HAR | Cabeçalhos + corpos | Captura HAR-1.2 completa que você pode importar para Chrome DevTools / um visualizador HAR / entregar a um colega |
| 🔧 Especificação Swagger (.yaml) | Apenas lista de URLs | Especificação OpenAPI 3.0 reconstruída a partir do tráfego observado |
| 🗺️ Source Maps (JSON) | Apenas extratos de fonte | Source maps completos analisados com árvores de arquivos, segredos, rotas, variáveis de ambiente, dependências |
| ⚔️ Modelos Nuclei (.yaml) | Apenas URLs de sonda | Coloque em ~/.config/nuclei/custom/ para varredura contínua |
| Recurso | PenScope (gratuito) | Burp Suite Pro ($449/ano) |
|---|
| Repetidor | ✅ | ✅ |
| Intrusor (4 modos de ataque) | ✅ | ✅ |
| Decodificador (B64/URL/Hex/JWT) | ✅ | ✅ |
| Comparador / Diff | ✅ | ✅ |
| Alvo / Mapa do site | ✅ | ✅ |
| Scanner ativo (45 sondas + 8 pacotes de pilha) | ✅ | ✅ |
| Manipulação de contexto de sessão/auth | ✅ (perfis salvos + matriz) | ✅ (baseado em regras) |
| Testador de matriz de autorização | ✅ (embutido) | ❌ (extensão paga) |
| Correlação de cadeia (descobertas compostas) | ✅ (13 padrões) | ❌ |
| Heurística de tomada de subdomínio (8 assinaturas de serviço) | ✅ | ❌ (extensão paga) |
| Testes de superfície DoS GraphQL (alias + batch) | ✅ | ❌ |
| Botão de repetição não autenticada por endpoint | ✅ | ❌ |
| Importação + exportação HAR (ida e volta) | ✅ (ida e volta) | ✅ (unidirecional) |
| Diff de IndexedDB (capturar vazamentos de estado do cliente) | ✅ | ❌ |
| Captura de cookie particionado CHIPS | ✅ | ❌ |
| Parser de ilha JSON (dados de hidratação Next/Nuxt/Remix) | ✅ | ❌ |
| Mapeamento de conformidade (PCI/NESA/SAMA/ISO/OWASP) | ✅ (7 frameworks) | ❌ |
| Gerador de CSP a partir de tráfego observado | ✅ | ❌ |
| Diff de regressão (snapshot + comparar) | ✅ | ❌ |
| Integração de IA (Claude bidirecional) | ✅ | ❌ |
| Modo Caça Autônomo (elabora relatórios H1 enquanto você dorme) | ✅ | ❌ |
| Tempo de configuração | 60 segundos | ~30 minutos (proxy + certificado + configuração do navegador) |
| Interceptação de proxy em nível TLS | ❌ (limitação do navegador) | ✅ |
| Teste fora de banda (Collaborator) | ❌ (planejado) | ✅ |
| Marketplace de extensões | ❌ | ✅ |
| Custo | $0 | $449 / usuário / ano |
| Estado | Pontuação |
|---|
| 0 crítico, 0 alto | 100 (limpo) |
| 1 alto | 91 |
| 3 altos | 73 |
| 1 crítico | 78 |
| 1 crítico + 3 altos | 51 |
| 3 críticos | 34 |
| 5+ críticos | 10 (piso) |
| Permission | Why |
|---|
webRequest | Capturar cada requisição/resposta sem refetch |
webNavigation | Detectar mudanças de rota pushState/replaceState de SPA (v6.3+) para que endpoints de app.com não vazem para o estado da nova origem quando a SPA navega cross-origin |
activeTab | Ler a URL da aba atual + enviar mensagens de content script |
scripting | Injetar runners de probe, stack packs e requisições do Workbench no contexto da página |
tabs | Mapear achados para a aba correta; abrir o Workbench em uma nova aba |
cookies | Ler cookies HttpOnly que document.cookie não consegue ver |
debugger | Requerido para o modo Deep — ativa CDP para corpos de resposta completos, introspecção runtime, extração de fontes, issues de auditoria, árvore de acessibilidade, cookies particionados |
notifications | Alertas de monitor contínuo sobre novos vazamentos de segredos |
alarms | Ticks de intervalo de 5 minutos para monitor contínuo |
storage | Persistir estado (session) e snapshots (local) entre reinicializações do service worker |
<all_urls> host permission | Captura é independente de alvo; o usuário controla qual aba está aberta |