# Security Policy ## What this tool is UnifiOptimizer is a local-first network administration tool. It runs on your own machine (a Mac mini, a Pi, or a small server), talks to a UniFi controller on your own network, and writes everything it collects to a local SQLite file (`data/netadmin.db`). It has no cloud backend, no telemetry, and no phone-home. Nothing leaves your network unless you configure an optional integration (Home Assistant MQTT) or hand an issue dossier to an external LLM yourself. ## Credentials handling - Controller credentials (API key, or username/password) and the JWT signing secret live **only** in `data/secrets.env` (chmod 600), or in the macOS Keychain where available. This file is gitignored and must never be committed. - No credential is ever written to `data/netadmin.db`, to any tracked config file, or to a generated report. - The web UI never stores controller credentials in browser storage. The browser holds only a short-lived JWT (7-day expiry, `SameSite` cookie). - Controller access in the current build is **read-only**: GETs plus a small set of documented read-query POSTs. The fix/apply engine, when enabled, never acts on its own — every change requires an explicit action in the UI or CLI and captures a full before-state for one-click revert. ## Running safely - Bind the daemon to `127.0.0.1` (the default). Do not expose port 8765 to an untrusted network without putting it behind your own authenticated proxy. - CORS is pinned to configured origins; a wildcard is never allowed. - Use a dedicated, revocable controller API key rather than an admin password where your controller supports it. - Rotate the controller credential if it may have been reused or exposed. ## Reporting a vulnerability If you find a security issue, please report it privately rather than opening a public issue. - Contact: please report privately through this repository's **Security** tab → **Report a vulnerability** (GitHub private security advisories). Do not open a public issue for a suspected vulnerability. - Please include: affected version/commit, reproduction steps, and impact. - This is a personal open-source project with no formal SLA. Expect a best-effort acknowledgement; fixes ship on a best-effort basis. Please do not include real credentials, controller hostnames, or packet captures in a report. Sanitize before sending.