Skip to content

v0.16.1 — Findable keys after auto-start, an opt-out where the gates defend nothing, and a hook-auth hole closed

Choose a tag to compare

@lacion lacion released this 22 Jul 12:19
f3c2413

0.16.0's loopback power gates assumed someone saw the daemon print its credentialed link. On auto-started daemons — Coder workspaces, systemd services, hook-spawned daemons — that line goes to a log file, and users hit a locked board with no key in sight. This release makes the key findable everywhere, makes the gates optional where they defend nothing, and closes a hook-auth bypass the 0.16.0 docs had wrongly guaranteed against.

Added

  • FLEETDECK_TRUST_LOOPBACK=on waives the four loopback power gates (/ws/term, POST /mail, gateway_* settings writes, the unsupervised arm) for plain-loopback callers — the pre-0.16.0 behavior, opted into explicitly. Keys off the real peer address, not a header. Startup-fatal combined with LAN bind or FLEETDECK_REQUIRE_TOKEN. Does not waive hook auth. For single-user machines and port-forwarded Coder workspaces where no other OS user can reach 127.0.0.1. docs/CODER.md carries both recipes.
  • The key is findable after auto-start. The SessionStart brief names where the key lives (fleetdeck token / $FLEETDECK_HOME/token); fleetdeck status shows the board URL and points at fleetdeck token; the board key gate explains recovery. fleetdeck status keeps the credentialed link out of routine output so it can't leak into logs/scrollback — pass --show-token to copy the full ?t= URL.

Security

  • gateway_* settings writes stay token-gated even under FLEETDECK_PROXY_AUTH=trust. They reroute every future session's LLM traffic and can exfiltrate the gateway credential; the trusted-proxy signal is derived from caller-controlled Host/Origin a direct-loopback process can forge. Only the explicit FLEETDECK_TRUST_LOOPBACK=on opt-out (real-peer keyed) waives them.
  • Hooks authenticate in every mode, including FLEETDECK_PROXY_AUTH=trust. 0.16.0 gated /hook/* on the bearer, but the proxy-trust exemption in authorized() returned before that gate: a direct-loopback process could forge the configured trusted Host/Origin and POST tokenless hooks on a trust-mode daemon, re-opening the session-impersonation forgeries 0.16.0 closed. The /hook/* gate now leads authorized(), ahead of every loopback and proxy-trust exemption. Regression coverage added (forged headers, TRUST_LOOPBACK on and off).

Full changelog: https://github.com/lacion/fleet-deck/blob/v0.16.1/CHANGELOG.md