
bbscope — Updated!
Ferramenta de agregação de escopo para HackerOne, Bugcrowd, Intigriti, YesWeHack e Immunefi!
bbscope.com
Interface web e API para agregar escopos de programas de bug bounty do HackerOne, Bugcrowd, Intigriti e YesWeHack.
Início rápido (Docker)
cd website
cp .env.example .env
# Edite o .env — no mínimo defina POSTGRES_PASSWORD e suas credenciais das plataformas
docker compose up -d --build
O site estará disponível em https://seu-dominio.com (o Caddy gerencia HTTPS automaticamente via Let's Encrypt).
Cloudflare DNS challenge
Se o seu servidor estiver atrás do Cloudflare (DNS com proxy), o desafio HTTP ACME padrão não funcionará. Use o arquivo compose do Cloudflare, que constrói um Caddy personalizado com o plugin DNS do Cloudflare:
docker compose -f docker-compose.cloudflare.yml up -d --build
Defina CF_API_TOKEN no seu .env. Crie o token em https://dash.cloudflare.com/profile/api-tokens com permissão Zone:DNS:Edit para seu domínio.
Desenvolvimento local
Requisitos: Go 1.24+, uma instância PostgreSQL em execução.
DB_URL="postgres://postgres:yourpassword@localhost:5432/bbscope?sslmode=disable" \
go run *.go serve --dev --poll-interval 0 --listen localhost:7001
A flag --dev ativa o modo apenas HTTP (sem TLS). --poll-interval 0 desativa a verificação em segundo plano para que você não precise de credenciais das plataformas.
Flags do comando serve
| Flag | Padrão | Descrição |
|---|---|---|
--dev, -d | false | Modo de desenvolvimento (HTTP, sem TLS) |
--poll-interval | 6 | Horas entre ciclos de verificação (0 para desativar) |
--listen | :8080 | Endereço de escuta HTTP |
--domain | bbscope.com | Domínio para sitemap/robots.txt |
A conexão com o banco de dados é lida da variável de ambiente DB_URL ou db_url em ~/.bbscope.yaml.
Configuração
Credenciais das plataformas
Todas as credenciais das plataformas são opcionais. Plataformas não configuradas são simplesmente ignoradas durante a verificação.
| Plataforma | Variáveis de ambiente | Observações |
|---|---|---|
| HackerOne | H1_USERNAME, H1_TOKEN | Token de API |
| Bugcrowd | BC_EMAIL, BC_PASSWORD, BC_OTP | Ou defina BC_PUBLIC_ONLY=1 para apenas programas públicos |
| Intigriti | IT_TOKEN | Token Bearer |
| YesWeHack | YWH_EMAIL, YWH_PASSWORD, YWH_OTP | Email + senha + OTP |
Normalização por IA (opcional)
Defina OPENAI_API_KEY e opcionalmente OPENAI_MODEL (padrão gpt-4.1-mini) para ativar a normalização de alvos de escopo baseada em IA. Armazenado em cache por alvo para minimizar chamadas de API.
Autenticação básica (opcional)
Para proteger o site com autenticação básica HTTP:
-
Gere um hash de senha:
docker run --rm caddy:2-alpine caddy hash-password --plaintext 'yourpassword' -
Copie a configuração de exemplo para
conf.d/:cp basicauth.caddy.example conf.d/basicauth.caddy -
Edite
conf.d/basicauth.caddye adicione seu nome de usuário e hash:basic_auth { myuser $2a$14$hashgoeshere... } -
Reinicie o Caddy:
docker compose restart caddy
Para desativar, remova conf.d/basicauth.caddy e reinicie.
Arquitetura
caddy (ports 80/443) → bbscope-web (:8080) → postgres
- Caddy gerencia a terminação TLS e proxy reverso. Fragmentos de configuração extras em
conf.d/*.caddysão importados automaticamente. - bbscope-web serve o site e executa verificadores em segundo plano.
- PostgreSQL armazena programas, alvos e histórico de alterações de escopo. O esquema é migrado automaticamente na inicialização.
API
O site expõe uma API pública:
| Endpoint | Descrição |
|---|---|
GET /api/v1/programs | Listar todos os programas |
GET /api/v1/programs/{platform}/{handle} | Detalhe de um único programa |
GET /api/v1/targets/{type} | Alvos por tipo: wildcards, domains, urls, ips, cidrs |
Parâmetros de consulta: scope (in/out/both), platform, type, raw (pular IA), format (json/text).
A saída padrão é texto delimitado por nova linha; adicione format=json para JSON. As respostas são armazenadas em cache por 5 minutos.