“Tailworm”: Tailscale SSH Flaws Allow Escalation to Root

« Tailworm » : des failles Tailscale SSH permettent une élévation vers root

On October 24, 2026, researcher Erica Windisch (Cyberdione Labs) published “Tailworm”, a security assessment of Tailscale and headscale listing eleven findings. Its core concerns Tailscale SSH: any user allowed to log in, even with an ordinary account, could gain root on the target server by abusing Unix socket forwarding. Chained together, the bugs enabled automated machine-to-machine spread in a lab, at under a second per hop. Because the report went public about two hours after it reached the vendor, Tailscale had to ship fixes under pressure; they are available from version 1.104.4.

Key takeaways
  • Eleven findings, several rated high by the researcher, were identified in Tailscale 1.104.2 and headscale 0.29.5; three of them allow escalation to root through Tailscale SSH.
  • Unix socket forwarding (ssh -L / ssh -R) ran with the root privileges of the tailscaled daemon instead of those of the authenticated user.
  • Prerequisites: the attacker must already control an authorized tailnet device and benefit from an SSH rule that permits forwarding. Unauthenticated attackers cannot exploit these flaws.
  • Fix: Tailscale v1.104.4, with four bulletins (TS-2026-014 to TS-2026-017). Some findings (headscale, conn25, Funnel) were still open per the report as of October 28.
ProductsTailscale (client, Tailscale SSH, Serve), headscale
Versions testedTailscale 1.104.2 · headscale 0.29.5
Fixed versionTailscale 1.104.4 or later
Risk levelHigh where Tailscale SSH allows forwarding

What happened

Tailscale is a WireGuard-based mesh VPN widely used for remote access to servers and administration environments. Its Tailscale SSH feature replaces classic SSH authentication with device identity and the access rules defined in the tailnet policy file. headscale is an open-source, self-hostable implementation of the control server.

According to Tailscale’s timeline, concerns about Tailscale SSH circulated on social media on Friday, October 23, and the company started investigating. It received the report on the morning of Saturday, October 24; the researcher published it roughly two hours later, before any fix existed. The uncoordinated disclosure drew criticism, while the researcher argued that rapid awareness would speed up remediation.

Tailscale engineers worked on fixes over the weekend. On October 26, the company published an investigation update and its security bulletins. Version 1.104.4 was tagged on October 27, and a full write-up followed on October 28. The researcher, for her part, credits Tailscale with a “rapid and substantive response.”

Technical analysis

Root escalation through socket forwarding

Findings 1 to 3 make up the most serious scenario. Unix socket forwarding requested by an SSH client was performed by the tailscaled process, which runs as root. The path allowlist (home directory, /tmp, /run/user) was checked purely lexically, so a rename-based TOCTOU race could defeat it.

According to the report, an ordinary SSH user could therefore:

  • execute code as root by reaching the root-owned Docker socket;
  • replace Tailscale’s control socket and capture an enrollment authkey;
  • delete or chmod arbitrary root-owned files;
  • dial systemd’s private bus as root and turn that into a root shell.

The researcher points out that OpenSSH drops privileges before handling forwarding, and that Dropbear fixed the same bug class (CVE-2025-14282) in version 2025.89. Tailscale summarizes the issue as an authenticated session being able to perform operations beyond the privileges of its configured local user, including through SSH forwarding.

The “worm”: spread bounded by access policy

The report describes a full chain: hold the socket bind, intercept local API traffic, capture an authkey, then enroll a rogue node under the victim’s identity. It was demonstrated end to end on a tailnet with Tailnet Lock disabled. In the lab, automated spread to every server reachable under the policy took less than a second per hop, with no user credentials and no interaction.

Tailscale disputes the “self-replicating worm” label, describing it as lateral movement limited to connections the policy allows. Both readings agree on the key point: the blast radius depends directly on how broad your SSH rules are. The researcher notes that per-pair grants stopped the spread, and that hardware-bound device credentials (TPM, Secure Enclave) prevented identity theft.

The other findings

Bulletin / findingComponentDescriptionStatus
TS-2026-014 (findings 1–3)Tailscale SSHUnix socket forwarding ran as root, granting access to root-only socketsFixed in 1.104.4
TS-2026-015 (finding 5)Tailscale SSH / glidersshMemory exhaustion of tailscaled by an authenticated session (denial of service)Fixed in 1.104.4
TS-2026-016 (findings 7–8)ServeUnix backends could reach privileged sockets, including the tailscaled local APIFixed in 1.104.4
TS-2026-017 (finding 11)Serve (HTTP/2)Race letting capabilities from one mount apply to anotherFixed in 1.104.4
Finding 4conn25 (app connectors)Arbitrary egress destinations, including cloud metadata and Kubernetes servicesUnreleased feature; partial fix per the report
Finding 6headscale, DERP clientUnbounded memory consumptionClient fixed; headscale pending per the report
Findings 9–10Funnel, ServeFunnel entitlement check; TS_SERVE_ALLOW_ALL_INTERFACES settingConsidered working as designed by Tailscale
Caveats. No CVE identifiers or CVSS scores have been published for these issues so far; the severity levels quoted are the researcher’s. The results come from lab testing on released software, and neither Tailscale nor the report mentions in-the-wild exploitation. The status of open findings comes from the report page and may have changed since.

Who is affected?

The organizations most exposed are those using Tailscale SSH with rules that allow local or remote forwarding, especially when those rules are broad (access granted to an entire identity or tag, privileged target accounts). Deployments running regular OpenSSH over Tailscale are not affected by the SSH chain. Self-hosted environments on headscale 0.29.5 deserve special attention: according to the report, forwarding cannot be disabled through policy there.

Why it matters

Zero-trust access tools concentrate authorization on device identity. That is a strength, but also a single point of failure: a laptop compromised through phishing, a vulnerable web application or a malicious software package is enough to inherit every permission that device holds. If those permissions include SSH access to many servers, a local privilege escalation becomes a fleet-wide compromise.

The episode is also a reminder that a network access tool is a critical part of the administration chain. It must be inventoried, patched and monitored just like a VPN or a bastion host.

MITRE ATT&CK mapping

Neither the vendor nor the researcher provides an ATT&CK mapping. The table below is an indicative Defensy reading based on the lab scenario described.

TechniqueDescribed behavior
T1021.004 — Remote Services: SSHConnection over Tailscale SSH from a compromised authorized device
T1068 — Exploitation for Privilege EscalationSocket forwarding executed as root, then a root shell via Docker or systemd
T1210 — Exploitation of Remote ServicesAutomated spread to servers permitted by the policy
T1499 — Endpoint Denial of ServiceMemory exhaustion of tailscaled and headscale

Recommendations

  1. ImmediateUpgrade to Tailscale 1.104.4 or later

    Start with servers exposing Tailscale SSH, then cover every node. Check the version actually deployed on each device, including containers and pinned images.

  2. ImmediateDisable SSH forwarding where it is not needed

    In the policy file, turn off local and remote forwarding for rules that do not require it. On nodes not yet upgraded, bulletin TS-2026-014 advises setting TS_SSH_DISABLE_FORWARDING=1 in the tailscaled service environment and restarting the service.

  3. ImmediateTreat every SSH grant as root on headscale

    On headscale 0.29.5, sharply restrict SSH rules, or temporarily fall back to regular OpenSSH over the tunnel until a fix is available.

  4. Short termTighten your SSH access policy

    Replace identity-wide or tag-wide rules with per-pair source/destination grants, avoid privileged target accounts and consider check mode for sensitive systems, keeping in mind that it only gates session establishment, not forwarding.

  5. Short termHarden node identity

    Enable Tailnet Lock, node key expiry on servers and, where possible, hardware-bound state. Rotate any authkeys reachable from potentially exposed hosts.

  6. Medium termMonitor from outside the host

    Forward control-plane logs (node enrollment, policy changes) and server telemetry (socket creation, docker.sock access, unexpected shells) to your SIEM. If a host is compromised, delete the device at the control plane: reimaging does not revoke copied keys.

Defensy’s view

This case highlights an often underestimated reality: your remote access tool is part of your attack surface. Overly broad rules turn a local compromise into fleet-wide lateral movement within seconds.

Our Audit & Offensive Security team reviews your access policies and simulates these lateral movement scenarios. Our SOC, Detection & Response service watches for privilege escalation signals and suspicious device enrollments.

References
  1. Tailscale SSH: Findings and FixesTailscale — Mike Shaver — October 28, 2026
  2. Security Bulletins (TS-2026-014 to TS-2026-017)Tailscale — October 26, 2026
  3. Tailworm — Security assessment of Tailscale v1.104.2 and headscale v0.29.5Cyberdione Labs — Erica Windisch — updated October 27, 2026
  4. Tailscale Rushes Patches After Uncoordinated Disclosure of Tailworm FlawsSecurityWeek — Eduard Kovacs — October 27, 2026
  5. MITRE ATT&CK® — Enterprise MatrixMITRE Corporation