| Version | Supported |
|---|---|
| main | ✅ |
This project follows a rolling release model. The main branch is supported.
If you discover a security vulnerability, please report it responsibly:
- Do not open a public issue for security vulnerabilities.
- Email the maintainers or use GitHub Security Advisories if available.
- Include:
- Description of the vulnerability
- Steps to reproduce
- Potential impact
- Suggested fix (if any)
We will acknowledge receipt and aim to respond within a reasonable timeframe.
- Open WebUI: The default
WEBUI_AUTH=Falsedisables login. This is intended for local/single-user use only. If you expose the stack to a network (e.g., via port forwarding or LAN access), enable authentication by settingWEBUI_AUTH=Truein the environment. - Dashboard / ops-controller: Set
DASHBOARD_AUTH_TOKENandOPS_CONTROLLER_TOKEN(generate withopenssl rand -hex 32) whenever the stack is reachable beyond localhost. - n8n: No built-in auth by default. If port 5678 is reachable from others (LAN, port-forward, Tailscale), enable n8n authentication (Basic Auth or full user management in n8n settings) or restrict access with a firewall / reverse proxy. Prefer not exposing n8n to the public internet without TLS and auth.
Services bind to 0.0.0.0 to allow access from other machines on your network. Use a firewall to restrict access if needed.
- Never commit
.envormcp/.env. They are gitignored. - Use
.env.exampleas a template; copy to.envand fill in values locally. - API keys (OpenAI, Anthropic, etc.) and tokens should only live in
.envfiles, never in the repository. - Never commit
data/— it is gitignored and contains user-specific runtime state (Hermes session data, Discord guild/user IDs, MCP config, etc.). All secrets and setup-specific values belong indata/or.env, not in shared code.
All runtime data is stored under BASE_PATH/data/ via bind mounts. Ensure appropriate filesystem permissions and backups. The data/ directory is gitignored and must remain untracked.
-
OPS_CONTROLLER_TOKENset (generate:openssl rand -hex 32) -
.envnot committed (in.gitignore) - Ops controller port (9000) not exposed to host/network
- Dashboard bound to localhost or Tailscale-only when multi-user
| Threat | Check |
|---|---|
| docker.sock exposure | Only ops-controller and mcp-gateway mount it; dashboard does not |
| Controller compromise | Token in env; no default; never expose port |
| MCP SSRF (browser worker) | Egress blocks for 100.64/10, RFC1918, 169.254.169.254 — ./scripts/ssrf-egress-block.sh --target all |
| Secret exfiltration (general) | Controller-only API keys; dashboard /api/services strips tokens from returned URLs |
| Unauthenticated admin | Set DASHBOARD_AUTH_TOKEN for Tailscale/group use |
- Audit log path writable:
data/ops-controller/
- Reset OPS_CONTROLLER_TOKEN: Generate new token, update
.env, restart dashboard + ops-controller - Restore data: Restore
data/from a local backup - Disable MCP tools: Clear
data/mcp/servers.txtor set to a single safe server - Safe mode: Stop
mcp-gatewayandhermes-gateway; useollama+open-webuionly