Esta extensão foi otimizada para hunting em programas de bug bounty, com foco em ZERO falsos positivos e máxima cobertura de detecção.
A extensão agora detecta automaticamente pacotes de fontes confiáveis sem falsos positivos:
- ✅
package.json- Todas as dependências (dependencies, devDependencies, peerDependencies, optionalDependencies) - ✅
package-lock.json- Todos os pacotes instalados (incluindo transitivos) - ✅
yarn.lock- Lockfile do Yarn - ✅
pnpm-lock.yaml- Lockfile do pnpm
- ✅
requirements.txt- Dependências Python - ✅
Pipfile- Pipenv - ✅
Pipfile.lock- Pipenv lockfile
- 📦
Gemfile/Gemfile.lock(Ruby) - 📦
composer.json/composer.lock(PHP) - 📦
go.mod/go.sum(Go) - 📦
Cargo.toml/Cargo.lock(Rust)
Cada detecção agora possui um nível de confiança:
| Fonte | Confidence | Descrição |
|---|---|---|
package.json, lockfiles, requirements.txt |
100% ✅ | Fonte 100% confiável - SEM falsos positivos |
node_modules/ paths em código |
90% ✅ | Muito alta confiança |
require() / import statements |
70% |
Alta confiança com filtros aplicados |
| Outros padrões | 50-60% ❓ | Média - verificar manualmente |
Visualização no Popup:
┌─────────────────────────────────────┐
│ my-private-package NPM ✅ 100% │
│ some-internal-lib NPM ⚠️ 70% │
│ maybe-package NPM ❓ 50% │
└─────────────────────────────────────┘
lexical, react, falco, relay, fbjs, jest, scheduler, workbox,
webpack, polyfill, regenerator, core-js, babel-runtime, tslib/^lexical/i- LexicalComposerContext, LexicalHTML, etc./^use[A-Z]/- React hooks (useLexicalEditable, useState, etc.)/internal/i- Módulos internos (*InternalState, etc.)/^falco/i,/^fb[A-Z]/,/^react[A-Z]/i- Meta/Facebook internals/state$/i,/context$/i,/provider$/i,/extension$/i- Sufixos genéricos/utils$/i,/helpers$/i,/logger$/i,/config$/i- Termos muito genéricos
A extensão detecta e pula automaticamente arquivos bundled/minificados (a menos que analyzeBundles esteja ativado):
- Webpack bundles (
__webpack_require__,webpackChunk) - Meta/Facebook bundles (
__d("ModuleName", ...)) - Código minificado (múltiplos "use strict", IIFEs, etc.)
Para maximizar a eficácia sem falsos positivos:
// options.html ou popup
showScopedPackages: true ✅Organizações costumam usar pacotes scoped (@company/internal-lib) - estes são alvos perfeitos para dependency confusion!
analyzeManifests: true ✅ // package.json, requirements.txt, etc.
analyzeLockfiles: true ✅ // yarn.lock, package-lock.json, etc.analyzeBundles: true // Analisa código bundled (pode gerar alguns falsos positivos)
// OU
analyzeBundles: false // Pula bundles (recomendado para evitar falsos positivos)- Instale a extensão atualizada
- Vá em Configurações e ative:
- ✅
Show Scoped Packages: ON - ✅
Analyze Manifests: ON - ✅
Analyze Lockfiles: ON - ❓
Analyze Bundles: OFF(para evitar falsos positivos)
- ✅
Procure por:
https://example.com/package.jsonhttps://example.com/yarn.lockhttps://example.com/requirements.txthttps://api.example.com/static/package.json
Dica: Muitos sites expõem acidentalmente seus manifestos em:
/static/package.json/assets/package.json/dist/package.json/build/package.json
Algumas APIs retornam informações de dependências:
{
"dependencies": {
"@company/internal-api": "^1.0.0", ← ALVO!
"my-private-utils": "2.3.1" ← ALVO!
}
}Arquivos .js.map frequentemente contêm paths de node_modules:
{"sources": ["../node_modules/@company/secret-lib/index.js"]} ← ALVO!Quando encontrar um pacote com Confidence 100% ✅:
- Verifique novamente no NPM/PyPI manualmente
- Tente criar o pacote:
npm init -y # Edit package.json com o nome encontrado npm publish - Documente a vulnerabilidade com:
- Screenshot da extensão mostrando o pacote
- Confidence score (100% = evidência sólida!)
- Fonte onde foi encontrado
- Prova de que não existe no registry público
┌────────────────────────────────────────────────────────────┐
│ 🎯 Dependency Confusion Vulnerability │
├────────────────────────────────────────────────────────────┤
│ Package: @acme-corp/internal-api │
│ Type: NPM │
│ Confidence: ✅ 100% │
│ Source: https://example.com/package.json │
│ Line: 15 │
│ Status: ❌ Not Found in Public Registry │
│ Registry: https://registry.npmjs.org/@acme-corp/... │
│ │
│ Code Snippet: │
│ 14 | "dependencies": { │
│ > 15 | "@acme-corp/internal-api": "^2.1.0", │
│ 16 | "express": "^4.18.0" │
│ └────────────────────────────────────────────────────────────┘
✅ Este é um alvo de ALTA QUALIDADE para relatar!
┌────────────────────────────────────────────────────────────┐
│ Package: LexicalComposerContext │
│ Confidence: ❌ FILTRADO (não aparece) │
│ Motivo: Padrão de módulo interno do Meta (Lexical) │
└────────────────────────────────────────────────────────────┘
Use scripts para verificar paths comuns:
#!/bin/bash
DOMAIN="example.com"
for path in package.json yarn.lock requirements.txt; do
curl -s "https://$DOMAIN/$path" | grep -q "{" && echo "Found: $path"
curl -s "https://$DOMAIN/static/$path" | grep -q "{" && echo "Found: static/$path"
curl -s "https://$DOMAIN/dist/$path" | grep -q "{" && echo "Found: dist/$path"
doneVersões antigas do site podem ter exposto manifestos:
https://web.archive.org/web/*/example.com/package.json
Procure por repositórios vazados com:
site:github.com "@company-name" package.json
site:github.com "example.com" requirements.txt
Mesmo com filtros, você pode manualmente buscar em bundles:
- Abra o DevTools
- Vá para Sources → Page
- Procure por strings como:
"@company/require("my-internal-/node_modules/@private/
A extensão rastreia:
- Total de Findings: Vulnerabilidades únicas encontradas
- URLs Escaneadas: Arquivos JavaScript/manifestos analisados
- Packages Verificados: Total de pacotes checados no registry
- Histórico: Todas as detecções anteriores
-
✅ PERMITIDO:
- Detectar pacotes vulneráveis em programas de bug bounty autorizados
- Verificar se pacotes existem em registries públicos
- Criar pacotes de PoC inofensivos (apenas log/beacon)
-
❌ PROIBIDO:
- Publicar pacotes maliciosos
- Exfiltrar dados sensíveis
- Afetar usuários reais
- Testar em alvos não autorizados
-
📝 Divulgação Responsável:
- Relate imediatamente ao programa de bug bounty
- NÃO publique o pacote até autorização
- Documente TUDO (prints, logs, timestamps)
- Aguarde resposta antes de disclosure público
Solução:
- Desative
analyzeBundles - Verifique se os filtros estão atualizados
- Foque em resultados com Confidence ≥ 90%
Solução:
- Verifique se
analyzeManifestsestá ativo - Tente acessar diretamente
/package.json,/yarn.lock - Verifique o console do DevTools para ver logs da extensão
Solução:
- Verifique se a URL termina exatamente com
package.json - Confira se o Content-Type é
application/jsonoutext/plain - Teste abrindo a URL diretamente no navegador
confused: CLI tool para detectar dependency confusionnpm-audit: Auditoria de dependências NPMsafety: Scanner de dependências Python
| Empresa | Tipo | Confidence | Bounty |
|---|---|---|---|
| Example Corp | NPM (@example/internal-api) | 100% | $5,000 |
| ACME Inc | NPM (acme-utils-private) | 100% | $2,500 |
| Tech Startup | Python (mycompany-lib) | 100% | $1,000 |
(Nota: Estes são exemplos fictícios)
Encontrou um bug? Abra uma issue no GitHub! Tem sugestões? Pull requests são bem-vindos! Encontrou uma vulnerabilidade real? Parabéns! 🎉
Version: 1.2.0 (Bug Bounty Edition) Author: OFJAAAH License: MIT Last Updated: 2025-11-01
⚡ Happy Hunting! ⚡