# Security policy ## Supported versions quicgate is a rolling release. Security fixes land on `master` and are published as a fresh `ghcr.io/quicgate/quicgate:latest` image. Always run the latest image; older image digests do not receive backported fixes. ## Reporting a vulnerability **Please do not open a public issue for security problems.** Report privately through GitHub's built-in flow: 1. Go to the [**Security** tab](https://github.com/Quicgate/quicgate/security) of this repository. 2. Click **Report a vulnerability**. 3. Describe the issue, the impact, and steps to reproduce. This opens a private advisory visible only to you and the maintainer. You'll get a response as soon as possible — this is a small hobby project, so please allow a few days. If you cannot use the private reporting flow, open a normal issue that only says "security issue, please enable a private channel" (no details) and wait to be contacted. ## Scope and hardening notes Some things are deployment responsibilities rather than bugs: please keep them in mind before reporting: - **The admin UI/API (port 81) must never be exposed to the internet.** Put it behind quicgate itself with an access list, a VPN, or a firewall rule. Treat a publicly reachable admin port as a misconfiguration, not a vulnerability. - **Change the default `admin@example.com` / `changeme` credentials** on first run (the app forces the password change; set your own sign-in address under Account & security) and enable 2FA. - quicgate ships hardened TLS defaults (AEAD-only cipher suites, configurable minimum version, HSTS) but the operator chooses what to expose. Reports about the default credentials existing, or about the admin port being reachable in an intentionally-open test setup, are out of scope. ## Reviews so far quicgate is reviewed from outside when somebody is willing to, and the results are public: - **September 2026, whole product (on 1.8.1):** remediated in 1.9.0; the changelog lists every finding. - **19 September 2026, the WireGuard work (on 1.17.1):** twelve findings, five rated high, none an unauthenticated remote attack; all fixed in 1.17.2, each with a regression test. The record is in SPEC-wireguard.md, section 16, round 3. The fixes have not been reviewed from outside yet, which is why LAN access is still marked experimental. - **27 September 2026, whole product with a functional check (on 1.17.5):** a code review of every package, automated scanning, live probing, and a claim-by-claim check of the advertised features against real ACME, OpenID Connect, Docker and WireGuard test doubles. One finding rated high (behind a proxy that sends `X-Forwarded-For` as separate header lines, a client could choose its own address), twenty medium, the rest low or informational; none an unauthenticated remote attack. Twelve functional defects were found on the way, among them a TLS-terminating stream listener that restarted on every reload and a portal button that could never work. Everything is fixed in 1.18.0, each with a regression test. A review of the fixes before the release changed three of them: auto-ban counts refusals by address again (only what a browser was made to send for another site's page is left out), wrong passwords no longer lock an account (only wrong second-factor codes do, per account, and failures per network), and TCP streams keep the kernel's zero-copy path. The fixes have not been reviewed from outside yet. A review is not a guarantee. If you find something, the section above says how to tell us, and we would rather hear it bluntly than not at all.