Security fixes are applied to the latest release on the default branch. Older tags are not maintained unless noted in release notes.
Before exposing watchPot outside a lab network:
- TLS — Docker Compose includes nginx with a self-signed local CA by default (
https://localhost). Trustdeploy/tls/out/watchpot-local-ca.crtfor a clean browser experience, or use a real certificate in production. SetWATCHPOT_ALLOW_LOOPBACK_CORS=falsewhen internet-facing. - Secrets — Rotate the bootstrap admin password, JWT secret (
app_settings.jwt_secret), and all agent tokens after first login. - OpenAPI — Set
EXPOSE_OPENAPI=falseon the API (disables/docs,/redoc,/openapi.json). - CORS — Configure allowed origins in Settings → CORS; set
WATCHPOT_ALLOW_LOOPBACK_CORS=falsein production. - Metrics — Set
WATCHPOT_METRICS_TOKENand scrape/metricswith that bearer token; do not expose metrics publicly without auth. - Registration — Keep
allow_public_registration=false(default) unless you explicitly want open sign-up. - Database — Use strong credentials; do not ship default
watchpot:watchpotoutside compose demos. - Agent tokens — Treat like passwords; store only in secret managers or restricted
.envfiles (never commit). - Docker socket — Agents with
docker.sockaccess can control containers on the host; isolate honeypot hosts accordingly. - Operator access — Authenticated operators can queue shell commands on pots via
docker exec; restrict UI access.
| Component | Trust level |
|---|---|
| Operator UI + JWT | Full control-plane access |
| Agent bearer token | Pot-scoped: stacks, events, backup upload, command execution |
| Public agent install bundle | Enrollment helper only; requires operator-created pot |
| Honeypot containers | Untrusted; assume compromise |