BBPF es una herramienta de consola para buscar programas de bug bounty en múltiples plataformas y extraer automáticamente sus scopes (In Scope / Out of Scope) y tipos de vulnerabilidades (Qualifying / Non-qualifying).
Actualmente soporta:
- HackerOne ✅
- YesWeHack ✅
- (Próximamente) Bugcrowd, Intigriti y programas self-hosted
- Python 3.8+
- Dependencias en
requirements.txt
Opcional:
- Entorno virtual (
.vemv-bbpf) recomendado.
git clone https://github.com/fr0gb1t/bbpf.git
cd bbpf
python3 -m venv .vemv-bbpf
source .vemv-bbpf/bin/activate # Linux/macOS
# .vemv-bbpf\Scripts\activate # Windows
pip install -r requirements.txt##🚀 Uso
Búsqueda y scrapeo por nombre de programa:
python3 bbpf.py infomaniakExportar dominios “In Scope” a TXT:
python3 bbpf.py infomaniak --out scopes.txtColores en consola: si tenés colorama instalado, el script imprime secciones con color (verde: In Scope, rojo: Out of Scope, cian/magenta: Qualifying/Non-qualifying).
bbpf-bug-bounty-program-finder/
│── scrapers/
│ ├── hackerone.py # HackerOne: detección + CSV oficial de assets
│ ├── yeswehack.py # YesWeHack: tabla Scope/Type + Vulnerability types
│ ├── bugcrowd.py # (WIP)
│ ├── intigriti.py # (WIP)
│ └── __init__.py
│
│── bbpf.py # CLI principal
│── utils.py # http_get y utilidades
│── requirements.txt
│── README.md- Crear scrapers/mi_plataforma.py con una clase que implemente:
- name = "mi_plataforma"
- search(program: str) -> tuple[str|None, str|None] Devuelve (handle, program_url) si encuentra el programa, o (None, None) si no.
- extract_scope(handle: str, program_url: str) -> dict | None Debe retornar un diccionario con esta forma:
{
"platform": "<name>",
"program_url": "<url>",
"in_scope": {"<Tipo>": [items...]},
"out_scope": {"<Tipo>": [items...]},
# opcional:
"qualifying_vulns": {"Vulnerabilities": [items...]},
"non_qualifying_vulns": {"Vulnerabilities": [items...]},
}- Importar y añadir la clase en la lista
SCRAPERSdentro debbpf.py.
Sugerencia: mantener el parseo lo más estable posible usando fuentes “oficiales” (CSV/JSON) cuando existan; si no, parsear HTML (tablas/listas) anclando a contenedores específicos.
- HackerOne: usa el endpoint CSV público por programa: https://hackerone.com/teams//assets/download_csv.csv
- YesWeHack: parsea la tabla “Scope/Type” para In Scope y el bloque #program-vulneraibility-types para Qualifying/Non-qualifying; Out of Scope se obtiene de headings y listas específicas.