
bbscope — Actualizado!
Herramienta de agregación de alcance para HackerOne, Bugcrowd, Intigriti, YesWeHack e Immunefi!
bbscope.com
Interfaz web y API para agregar ámbitos de programas de bug bounty de HackerOne, Bugcrowd, Intigriti y YesWeHack.
Inicio rápido (Docker)
cd website
cp .env.example .env
# Edita .env — como mínimo establece POSTGRES_PASSWORD y tus credenciales de la plataforma
docker compose up -d --build
El sitio estará disponible en https://yourdomain.com (Caddy gestiona HTTPS automáticamente mediante Let's Encrypt).
Desafío DNS de Cloudflare
Si tu servidor está detrás de Cloudflare (DNS proxyficado), el desafío ACME HTTP estándar no funcionará. Usa el archivo de composición de Cloudflare, que construye un Caddy personalizado con el plugin DNS de Cloudflare:
docker compose -f docker-compose.cloudflare.yml up -d --build
Establece CF_API_TOKEN en tu .env. Crea el token en https://dash.cloudflare.com/profile/api-tokens con el permiso Zone:DNS:Edit para tu dominio.
Desarrollo local
Requisitos: Go 1.24+, una instancia de PostgreSQL en ejecución.
DB_URL="postgres://postgres:yourpassword@localhost:5432/bbscope?sslmode=disable" \
go run *.go serve --dev --poll-interval 0 --listen localhost:7001
La bandera --dev habilita el modo solo HTTP (sin TLS). --poll-interval 0 desactiva el sondeo en segundo plano para que no necesites credenciales de la plataforma.
Banderas del comando serve
| Bandera | Predeterminado | Descripción |
|---|---|---|
--dev, -d | false | Modo desarrollo (HTTP, sin TLS) |
--poll-interval | 6 | Horas entre ciclos de sondeo (0 para desactivar) |
--listen | :8080 | Dirección de escucha HTTP |
--domain | bbscope.com | Dominio para el mapa del sitio / robots.txt |
La conexión a la base de datos se lee de la variable de entorno DB_URL o de db_url en ~/.bbscope.yaml.
Configuración
Credenciales de la plataforma
Todas las credenciales de la plataforma son opcionales. Las plataformas no configuradas simplemente se omiten durante el sondeo.
| Plataforma | Variables de entorno | Notas |
|---|---|---|
| HackerOne | H1_USERNAME, H1_TOKEN | Token de API |
| Bugcrowd | BC_EMAIL, BC_PASSWORD, BC_OTP | O establece BC_PUBLIC_ONLY=1 solo para programas públicos |
| Intigriti | IT_TOKEN | Token Bearer |
| YesWeHack | YWH_EMAIL, YWH_PASSWORD, YWH_OTP | Correo electrónico + contraseña + OTP |
Normalización por IA (opcional)
Establece OPENAI_API_KEY y opcionalmente OPENAI_MODEL (por defecto gpt-4.1-mini) para habilitar la normalización de objetivos del ámbito basada en IA. Se almacena en caché por objetivo para minimizar las llamadas a la API.
Autenticación básica (opcional)
Para proteger el sitio con autenticación básica HTTP:
-
Genera un hash de contraseña:
docker run --rm caddy:2-alpine caddy hash-password --plaintext 'yourpassword' -
Copia la configuración de ejemplo en
conf.d/:cp basicauth.caddy.example conf.d/basicauth.caddy -
Edita
conf.d/basicauth.caddyy añade tu nombre de usuario y hash:basic_auth { myuser $2a$14$hashgoeshere... } -
Reinicia Caddy:
docker compose restart caddy
Para desactivar, elimina conf.d/basicauth.caddy y reinicia.
Arquitectura
caddy (ports 80/443) → bbscope-web (:8080) → postgres
- Caddy maneja la terminación TLS y el proxy inverso. Los fragmentos de configuración extra en
conf.d/*.caddyse importan automáticamente. - bbscope-web sirve el sitio y ejecuta los sondeadores en segundo plano.
- PostgreSQL almacena programas, objetivos e historial de cambios de ámbito. El esquema se migra automáticamente al inicio.
API
El sitio expone una API pública:
| Endpoint | Descripción |
|---|---|
GET /api/v1/programs | Listar todos los programas |
GET /api/v1/programs/{platform}/{handle} | Detalle de un solo programa |
GET /api/v1/targets/{type} | Objetivos por tipo: wildcards, domains, urls, ips, cidrs |
Parámetros de consulta: scope (in/out/both), platform, type, raw (omitir IA), format (json/text).
La salida predeterminada es texto delimitado por saltos de línea; añade format=json para JSON. Las respuestas se almacenan en caché durante 5 minutos.