
bbscope — Updated!
Strumento di aggregazione degli scope per HackerOne, Bugcrowd, Intigriti, YesWeHack e Immunefi!
bbscope.com
Interfaccia web e API per aggregare gli ambiti dei programmi di bug bounty da HackerOne, Bugcrowd, Intigriti e YesWeHack.
Avvio rapido (Docker)
cd website
cp .env.example .env
# Edit .env — at minimum set POSTGRES_PASSWORD and your platform credentials
docker compose up -d --build
Il sito sarà disponibile all'indirizzo https://yourdomain.com (Caddy gestisce automaticamente HTTPS tramite Let's Encrypt).
Sfida DNS di Cloudflare
Se il server è dietro Cloudflare (DNS proxato), la challenge ACME HTTP standard non funzionerà. Usa invece il file compose per Cloudflare, che costruisce un Caddy personalizzato con il plugin DNS di Cloudflare:
docker compose -f docker-compose.cloudflare.yml up -d --build
Imposta CF_API_TOKEN nel tuo file .env. Crea il token su https://dash.cloudflare.com/profile/api-tokens con permesso Zone:DNS:Edit per il tuo dominio.
Sviluppo locale
Requisiti: Go 1.24+, un'istanza PostgreSQL in esecuzione.
DB_URL="postgres://postgres:yourpassword@localhost:5432/bbscope?sslmode=disable" \
go run *.go serve --dev --poll-interval 0 --listen localhost:7001
Il flag --dev abilita la modalità solo HTTP (nessun TLS). --poll-interval 0 disabilita il polling in background in modo da non aver bisogno delle credenziali delle piattaforme.
Flag del comando serve
| Flag | Predefinito | Descrizione |
|---|---|---|
--dev, -d | false | Modalità di sviluppo (HTTP, senza TLS) |
--poll-interval | 6 | Ore tra i cicli di polling (0 per disabilitare) |
--listen | :8080 | Indirizzo di ascolto HTTP |
--domain | bbscope.com | Dominio per sitemap/robots.txt |
La connessione al database viene letta dalla variabile d'ambiente DB_URL o da db_url in ~/.bbscope.yaml.
Configurazione
Credenziali della piattaforma
Tutte le credenziali delle piattaforme sono opzionali. Le piattaforme non configurate vengono semplicemente saltate durante il polling.
| Piattaforma | Variabili d'ambiente | Note |
|---|---|---|
| HackerOne | H1_USERNAME, H1_TOKEN | Token API |
| Bugcrowd | BC_EMAIL, BC_PASSWORD, BC_OTP | Oppure imposta BC_PUBLIC_ONLY=1 per soli programmi pubblici |
| Intigriti | IT_TOKEN | Token Bearer |
| YesWeHack | YWH_EMAIL, YWH_PASSWORD, YWH_OTP | Email + password + OTP |
Normalizzazione AI (opzionale)
Imposta OPENAI_API_KEY e opzionalmente OPENAI_MODEL (predefinito gpt-4.1-mini) per abilitare la normalizzazione automatica degli obiettivi di ambito basata su AI. Viene memorizzato nella cache per obiettivo per minimizzare le chiamate API.
Autenticazione di base (opzionale)
Per proteggere il sito con HTTP basic auth:
-
Genera un hash della password:
docker run --rm caddy:2-alpine caddy hash-password --plaintext 'yourpassword' -
Copia la configurazione di esempio in
conf.d/:cp basicauth.caddy.example conf.d/basicauth.caddy -
Modifica
conf.d/basicauth.caddye aggiungi il tuo nome utente e hash:basic_auth { myuser $2a$14$hashgoeshere... } -
Riavvia Caddy:
docker compose restart caddy
Per disabilitare, rimuovi conf.d/basicauth.caddy e riavvia.
Architettura
caddy (ports 80/443) → bbscope-web (:8080) → postgres
- Caddy gestisce la terminazione TLS e il proxy inverso. I frammenti di configurazione extra in
conf.d/*.caddyvengono importati automaticamente. - bbscope-web serve il sito ed esegue i poller in background.
- PostgreSQL memorizza programmi, obiettivi e cronologia delle modifiche di ambito. Lo schema viene migrato automaticamente all'avvio.
API
Il sito espone un'API pubblica:
| Endpoint | Descrizione |
|---|---|
GET /api/v1/programs | Elenca tutti i programmi |
GET /api/v1/programs/{platform}/{handle} | Dettaglio di un singolo programma |
GET /api/v1/targets/{type} | Obiettivi per tipo: wildcards, domains, urls, ips, cidrs |
Parametri di query: scope (in/out/both), platform, type, raw (salta AI), format (json/text).
L'output predefinito è testo delimitato da nuove righe; aggiungi format=json per JSON. Le risposte vengono memorizzate nella cache per 5 minuti.