An extensible bug bounty automation framework.
DeepBounty helps security researchers automate common bug bounty hunting tasks using a plugin system. The server orchestrates scans, collects findings, and sends alerts when misconfigurations, leaks, new endpoints, or vulnerabilities are detected on target scopes.
🚧 This project is currently in development.
- Modular by design: extend the core with TypeScript modules via an SDK.
- Scalable workers: execute scans in sandboxed Docker environments, horizontally scalable.
- Web UI: modern interface to manage targets and view alerts.
- Burp Suite and Caido extensions to feed captured requests/JS enhancing module analyses.
+-----------------------+ +--------------------------+
| Webapp | <--------------------> | Server |
| React + TS | | Node.js + Express (TS) |
| TailwindCSS + shadcn | Alerts / Targets | Module SDK (TypeScript) |
+-----------+-----------+ +-----------+--------------+
^ |
| |
| v
| +----------+-----------+
| | Modules |
| | (plugins via SDK) |
| +----------+-----------+
| |
| schedules tasks
| v
| +----------+-----------+
| | Workers |
| | Docker-sandboxed |
| | run tools/scanners |
| +----------+-----------+
| |
| scan/observe targets
| |
| |
| |
| +-------------------------------+ |
+------+ Alerts / Results back |<--------+
+-------------------------------+
+-----------------------+
| Burp Suite / Caido |
| Extensions |
+-----------+-----------+
|
v
Feeds requests/JS
into Server
- Server (Core)
- Orchestrates scans and data flow between modules, workers, and the webapp.
- Exposes APIs for module integration and real-time alerting.
- Workers
- Execute scanning/analysis in sandboxed Docker environments.
- Multiple workers can connect to a single server for resilience and scale.
- Webapp
- Modern UI to manage targets and review alerts/findings.
- Modules (Plugins)
- Extend functionality using the TypeScript SDK to add scanners, analyzers, and automations.
- Burp Suite / Caido Extensions
- Sends captured request data and page JS to the server to enrich analysis.
- Backend: Node.js, Express, TypeScript
- Frontend: React, TypeScript, TailwindCSS, shadcn/ui
- Execution: Docker-based workers
- Modules: TypeScript SDK
- ARCHITECTURE.md - How the project is structured, perfect for AI-assisted development and deep understanding of the codebase structure, module system, and integration patterns.
This repo includes production Dockerfiles for the full stack:
- Server (Express + WebSocket)
- Webapp (Vite build served by nginx)
- PostgreSQL
The worker is usually deployed on a separate host. As a result:
- Main stack (db + server + webapp):
docker-compose.yml - Remote worker:
docker-compose.worker.yml
The webapp container also acts as a reverse proxy:
- Browser UI is served on
/ - API is reachable on
/api/*(proxied to the server) - Callbacks remain on
/cb/*(proxied to the server)
- Docker + Docker Compose
Create a repo-root .env from the example:
- Copy .env.example to .env
- Set
DB_PASSWORDandEXTERNAL_URLto your public URL (must match where/cb/*is reachable) - Generate a 64-hex worker key and set
WORKER_KEY
Optional hardening (recommended):
- Set
DEEPBOUNTY_ACCESS_MODE=localto restrict access to/and/api/*to local/private IPs. /cb/*stays publicly reachable so callbacks still work.
If you run DeepBounty behind another reverse proxy (e.g. Traefik), also set:
DEEPBOUNTY_BEHIND_PROXY=trueDEEPBOUNTY_TRUSTED_PROXY_CIDRSto the IP(s)/CIDR(s) of your proxy (comma-separated)
This makes nginx use the real client IP from X-Forwarded-For, but only when the request comes from your trusted proxy. Without this, "local" mode can be effectively bypassed because nginx only sees the proxy IP.
Example worker key generation:
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
From the repository root:
docker compose up -d --build
Open the UI:
http://localhost:8080(or yourWEBAPP_PORT)
Option A: Using Docker Compose
Set the environment variables:
WORKER_KEY(same value as the server)SERVER_WS_URLto your public DeepBounty URL WebSocket endpoint:wss://deepbounty.example.com/api/ws- or
ws://<ip>:<port>/api/wsif you don’t use TLS
ENABLE_AGGRESSIVE_TASKStotrueto allow more aggressive tasks (subdomain scanning, ffuf, etc.), orfalseto disable them.MAX_CONCURRENCYto set the maximum number of concurrent tasks the worker can run (default: 5).
Then run:
docker compose -f docker-compose.worker.yml up -d --build
Option B: Using Standard Docker
You can build and run the worker in a single command line. Replace the values for SERVER_WS_URL and SERVER_SECRET_KEY below:
docker run -d \
--restart unless-stopped \
--name deepbounty-worker \
-e SERVER_WS_URL="wss://deepbounty.example.com/api/ws" \
-e SERVER_SECRET_KEY="YOUR_WORKER_KEY" \
-e ENABLE_AGGRESSIVE_TASKS="true" \
-e MAX_CONCURRENCY="5" \
dd06/deepbounty-worker:latestNotes:
- If
DEEPBOUNTY_ACCESS_MODE=local, workers still connect via/api/ws(kept public). - If DeepBounty is behind another reverse proxy/load balancer, the “local-only” IP check may need proxy real-IP forwarding to be accurate.