mirror of
https://github.com/juanfont/headscale.git
synced 2026-11-01 03:04:07 +09:00
CHANGELOG: align the 0.29.7 entries with earlier releases
Link merged PRs, use the 0.29 API path, and word fixes as in previous releases.
This commit is contained in:
1 parent
abe807a9b5
commit
c9cf210b8b
1 file changed
+19
-17
+19
-17
@@ -6,12 +6,14 @@
|
||||
|
||||
### Security
|
||||
|
||||
This is a security release and it includes fixes for findings from Anthropic's OSS Scanner project and findings from the Tailworm report. None of the issues found were critical, but some could lead to DOS and similar issues of Headscale and we recommend upgrading as soon as possible.
|
||||
This is a security release. It fixes findings from Anthropic's oss-scanner project and
|
||||
the Tailworm report. None are critical, but some can cause denial of service in
|
||||
Headscale. We recommend that all users upgrade to Headscale 0.29.7 **and** Tailscale
|
||||
v1.104.4 or newer as soon as possible, especially those using Tailscale SSH.
|
||||
|
||||
We recommend that all users upgrade to Headscale 0.29.7 **and** Tailscale v1.104.4 or newer,
|
||||
especially those using Tailscale SSH. Tailscale v1.104.4 fixes vulnerabilities in SSH
|
||||
forwarding, SSH session handling and Serve. These fixes run in `tailscaled` on your
|
||||
nodes; upgrading Headscale alone does not apply them.
|
||||
Tailscale v1.104.4 fixes vulnerabilities in SSH forwarding, SSH session handling and
|
||||
Serve. These fixes run in `tailscaled` on your nodes; upgrading Headscale alone does
|
||||
not apply them.
|
||||
|
||||
See Tailscale's
|
||||
[security bulletins](https://tailscale.com/security-bulletins#ts-2026-014) and
|
||||
@@ -20,34 +22,34 @@ See Tailscale's
|
||||
To disable SSH agent and port forwarding on a node, set
|
||||
`TS_SSH_DISABLE_FORWARDING=1` in the `tailscaled` service environment and restart
|
||||
the service. This setting applies to all Tailscale SSH sessions on that node and
|
||||
is also available in older clients.
|
||||
is also available in older clients. [#3624](https://github.com/juanfont/headscale/pull/3624)
|
||||
|
||||
This release also fixes the issues that [oss-scanner](https://github.com/anthropics/oss-scanner/tree/main/projects/headscale)
|
||||
reported in Headscale: ANT-2026-MLP8ZR5T, ANT-2026-LYVGXVSW, ANT-2026-AWGRB7O1, ANT-2026-QMCAFJ1Q, ANT-2026-RQS7JAPP, ANT-2026-5B6KE87K, ANT-2026-KFCFFM34, ANT-2026-K903ZEUA, ANT-2026-NM50ZP4N, ANT-2026-ZC18AF82, ANT-2026-NWTIBB02, ANT-2026-MX8FKG4K. [#3603](https://github.com/juanfont/headscale/pull/3603)
|
||||
|
||||
### Changes
|
||||
|
||||
- Metrics are no longer exposed to unregistered clients through the Noise protocol. They remain available only on the configured metrics listener; an empty `metrics_listen_addr` disables that listener. [#3623](https://github.com/juanfont/headscale/pull/3623)
|
||||
- Update the Tailscale dependency to v1.104.4, which bounds how much of an unexpected DERP HTTP response is read [#3600](https://github.com/juanfont/headscale/pull/3600)
|
||||
- Preserve pending registrations and OIDC logins at capacity instead of evicting active approvals; refuse excess work with a retry response and reserve capacity for registered nodes' SSH checks. [#3586](https://github.com/juanfont/headscale/pull/3586)
|
||||
- Retain pending registration data as owned serialized payloads capped at 64 KiB, preserving tags and expiry while bounding stored data. Oversized interactive registrations are rejected explicitly. [#3586](https://github.com/juanfont/headscale/pull/3586)
|
||||
- Validate OIDC login session type before allocating state, consume callback state atomically, and release SSH authentication capacity after the client consumes its verdict. [#3586](https://github.com/juanfont/headscale/pull/3586)
|
||||
- A route that is a single address inside the node ranges, in either spelling, is approved and listed but never served; wider routes and `::ffff:` prefixes are still served [#3603](https://github.com/juanfont/headscale/pull/3603)
|
||||
- Metrics are no longer exposed to unregistered clients through the Noise protocol. They remain available only on the configured metrics listener; an empty `metrics_listen_addr` disables that listener [#3623](https://github.com/juanfont/headscale/pull/3623)
|
||||
- Update the Tailscale dependency to v1.104.4, which bounds how much of an unexpected DERP HTTP response is read [#3577](https://github.com/juanfont/headscale/pull/3577)
|
||||
- Keep pending registrations and OIDC logins at capacity instead of evicting ones awaiting approval; new requests get a retry response, and registered nodes keep capacity for SSH checks [#3586](https://github.com/juanfont/headscale/pull/3586)
|
||||
- Cap stored pending registration data at 64 KiB, keeping tags and expiry; oversized interactive registrations are rejected [#3586](https://github.com/juanfont/headscale/pull/3586)
|
||||
- Check the OIDC login type before storing anything, accept each OIDC callback only once, and free an SSH check's slot once the client has read its result [#3586](https://github.com/juanfont/headscale/pull/3586)
|
||||
- Stop serving a route that is a single address inside the node IP ranges, such as `100.64.0.11/32` or `::ffff:100.64.0.11/128`, because it names a node, not a subnet; the route stays approved and listed, and wider routes are still served [#3603](https://github.com/juanfont/headscale/pull/3603)
|
||||
- Require a valid pre-auth key to re-register an expired tagged node [#3603](https://github.com/juanfont/headscale/pull/3603)
|
||||
- Another user's key or login on a tagged machine now creates a new device for that user instead of re-authenticating the tagged node [#3603](https://github.com/juanfont/headscale/pull/3603)
|
||||
- Fix one node with a stored key expiry outside the years 0 to 9999 in UTC failing the map of every node that can see it; it is now left out of its peers' maps and the startup check names it with the fix command [#3603](https://github.com/juanfont/headscale/pull/3603)
|
||||
- Refuse a key expiry outside the years 0 to 9999 in UTC on registration, on the OIDC token-expiry path and in `headscale nodes expire` / `POST /api/v1/node/{nodeId}/expire` (400); the latest accepted expiry no longer fails node listings on PostgreSQL in a zone east of UTC [#3603](https://github.com/juanfont/headscale/pull/3603)
|
||||
- Refuse a key expiry outside the years 0 to 9999 in UTC on registration, on the OIDC token-expiry path and in `headscale nodes expire` / `POST /api/v1/node/{node_id}/expire` (HTTP 400); the latest accepted expiry no longer fails node listings on PostgreSQL in a zone east of UTC [#3603](https://github.com/juanfont/headscale/pull/3603)
|
||||
- Keep the first 256 endpoints and 4096 announced routes from client reports; oversized hostnames, requested tags or other metadata return a registration error or HTTP 413 on map updates. Zoned IPv6 endpoints are refused [#3603](https://github.com/juanfont/headscale/pull/3603)
|
||||
- At startup, trim stored hostnames, endpoints and routes to the client-report limits and remove zoned endpoints. Hostinfo exceeding its size or tag limit is dropped until the next valid report [#3603](https://github.com/juanfont/headscale/pull/3603)
|
||||
- Pending interactive registrations and follow-up waits keep only the hostname, OS and requested tags; other device details arrive with the first map request. Reauthentication preserves routes, services and endpoints [#3603](https://github.com/juanfont/headscale/pull/3603)
|
||||
- Web reauthentication preserves the discovery key so peers can still reach the device [#3603](https://github.com/juanfont/headscale/pull/3603)
|
||||
- Fix web reauthentication dropping the discovery key, so peers could not reach the device [#3603](https://github.com/juanfont/headscale/pull/3603)
|
||||
- A stalled request body, or a Noise tunnel with no open request, is closed after 30 seconds [#3603](https://github.com/juanfont/headscale/pull/3603)
|
||||
- A registration follow-up from a machine other than the one that started the registration is refused before it waits [#3603](https://github.com/juanfont/headscale/pull/3603)
|
||||
- Only the newest follow-up waits on a pending registration or SSH check; older ones are answered at once [#3603](https://github.com/juanfont/headscale/pull/3603)
|
||||
- Registration locks are freed once no registration uses them [#3603](https://github.com/juanfont/headscale/pull/3603)
|
||||
- Concurrent deletes of one node free its addresses and announce its removal once [#3603](https://github.com/juanfont/headscale/pull/3603)
|
||||
- Fix registration locks staying in memory after the registration ends [#3603](https://github.com/juanfont/headscale/pull/3603)
|
||||
- Fix concurrent deletes of one node freeing its addresses and announcing its removal more than once [#3603](https://github.com/juanfont/headscale/pull/3603)
|
||||
- OIDC verifies an email against the document supplying it; an `email_verified` flag without an address no longer verifies another document's email [#3603](https://github.com/juanfont/headscale/pull/3603)
|
||||
- Fix release builds reporting their version with a `+dirty` suffix [#3583](https://github.com/juanfont/headscale/issues/3583)
|
||||
- Fix release builds reporting their version with a `+dirty` suffix [#3584](https://github.com/juanfont/headscale/pull/3584)
|
||||
- Fix SSH policy `acceptEnv` having no effect, so allowed environment variables reach SSH sessions. Upgrade SSH destination nodes to Tailscale v1.104.4 or newer before using `acceptEnv`, because older clients can disclose forwarded values [#3569](https://github.com/juanfont/headscale/pull/3569)
|
||||
|
||||
## 0.29.6 (2026-10-24)
|
||||
|
||||
Reference in new issue
Block a user