Konfirmity
All security advisories

//security advisory

Tailworm: Unpatched Tailscale SSH Flaws

On 25 October 2026 a researcher published Tailworm, a set of flaws in Tailscale, without waiting for a fix. The most important one affects servers running Tailscale SSH: anyone allowed to log in through it, even to an ordinary account, can reach root on that server. No fixed version or Tailscale bulletin exists yet. Until one does, treat every Tailscale SSH grant as root access and narrow it.

On this page
  1. Are you affected?
  2. What to do
  3. Check your setup
  4. Until a fix ships
  5. The findings
  6. Signs of abuse
  7. Fix status
  8. Where the sources differ
  9. Timeline
  10. Recording it for compliance
  11. FAQ
  12. Sources

Are you affected by Tailworm?

Most of the risk sits with servers that run Tailscale SSH. Find the row that describes you.

  • You run Tailscale SSH on servers

    Linux, or macOS with the open-source tailscaled, and your policy has ssh rules

    Act now

    Treat every Tailscale SSH grant as root access to that server until a fix ships. Turn it off where you do not need it and narrow the rest. Until a fix ships

  • You run headscale

    The self-hosted, open-source control server

    Act now

    SSH forwarding cannot be turned off on headscale 0.29.5, so every SSH grant is root access. Keep the server off the open internet. headscale

  • You use app connectors

    Especially through the Tailscale Kubernetes operator

    Update needed

    Remove connector entitlements nobody needs, and limit where connector hosts can send traffic, for example with a default-deny egress policy in Kubernetes.

  • You forward a port to a Unix socket with tailscale serve

    tailscale serve --tcp <port> unix:<path>

    Update needed

    Remove any forward to tailscaled’s own socket or another privileged socket. It can hand control of the device to other machines on your tailnet.

  • You use Tailscale only as a network

    No Tailscale SSH, connectors or serve forwards

    Low risk

    Not affected by the main findings. Turn on auto-update so the fixed release arrives without anyone remembering to install it.

  • You use normal OpenSSH over Tailscale

    sshd on the server, Tailscale only carrying the traffic

    Protected

    Not affected. Tailscale SSH does not change sshd or authorized_keys, and the researcher found OpenSSH clean for this class of flaw.

What to do

There is no patch to install yet, so this is about reducing who can reach root, today.

  1. Find every server running Tailscale SSH

    Read the ssh section of your tailnet policy, then check each server. How to check
  2. Turn it off where you do not need it

    Many teams switched it on fleet-wide for convenience. Every server that does not need it is one less route to root.
  3. Narrow the SSH rules you keep

    One group to one set of servers, never a whole tag or everyone. Treat each rule as granting root, because limiting logins to non-root users does not stop these flaws. Example rule
  4. Consider turning off SSH forwarding on servers

    The main finding needs forwarding. An undocumented server setting turns it off, at the cost of breaking tools that tunnel over SSH.
  5. Turn on auto-update and watch for the fix

    The fixed release will be announced in Tailscale’s security bulletins. Auto-update gets it onto servers without anyone remembering.

Check your setup

Three places to look: the policy file, each server, and the admin console.

The policy file

Open your tailnet policy in the admin console and read the ssh section. Each rule there lets the devices or people in src log in to the devices in dst. Rules that use a whole tag, autogroup:member or a large group as the source are the ones to narrow first.

Each server

Linux server
# On each Linux server: is Tailscale SSH turned on, and which version runs?
tailscale debug prefs | grep RunSSH      # "RunSSH": true means it is on
tailscale version

Tailscale SSH can only run as a server on Linux and on macOS with the open-source tailscaled, according to Tailscale’s documentation. Other platforms cannot accept logins through it.

The admin console

The Machines page can filter for devices with an update available, and shows each device’s version. Use it to see which devices will need the fixed release, and which have auto-update turned on.

Until a fix ships

Ordered by how much each step cuts the risk. The first two are documented by Tailscale. The third is not.

1. Turn Tailscale SSH off where you do not need it

Linux server
# Turn Tailscale SSH off on a server that does not need it.
# Make sure you have another way in first, or you can lock yourself out.
sudo tailscale set --ssh=false

Tailscale’s own warning: make sure you have another way to log in before turning it off. Normal OpenSSH is not affected by these flaws.

2. Make every SSH rule one-to-one

In the researcher’s lab, rules that let one small group reach one set of servers were the only control that stopped the attack spreading. Do not use a whole tag or everyone as the source, and do not grant root or accounts with passwordless sudo. According to the researcher, check mode does not help here, because it only gates the login, not what happens inside the session.

Tailnet policy
"ssh": [
  {
    "action": "check",
    "src": ["group:db-admins"],
    "dst": ["tag:prod-db"],
    "users": ["dbadmin"]
  }
]

3. Turn off SSH forwarding on the server

The root escalation works through SSH forwarding. Tailscale’s policy file has no documented setting to turn it off. Its code does: a server environment setting that, in 1.104.2, rejects every kind of SSH forwarding. It is read when tailscaled starts, and Tailscale’s Linux service loads it from /etc/default/tailscaled.

Linux server
# Undocumented setting found in Tailscale's code. Test before relying on it.
echo 'TS_SSH_DISABLE_FORWARDING=true' | sudo tee -a /etc/default/tailscaled
sudo systemctl restart tailscaled        # ends any open Tailscale SSH sessions

Tailscale does not document or endorse this setting. It also breaks anything that tunnels over SSH, such as VS Code Remote SSH or database tunnels. Test it on one server first, and confirm with ssh -L that forwarding is refused.

headscale

On headscale 0.29.5, forwarding is granted on every accepted SSH session and cannot be turned off in the policy. Treat every headscale SSH grant as root access, use the server setting above where you can, and keep the headscale server off the open internet. headscale 0.29.6 does not address these findings.

App connectors and tailscale serve

  • Remove connector entitlements nobody uses, and limit where connector hosts can send traffic. In Kubernetes, a default-deny egress policy on the connector’s namespace does this.
  • Remove any tailscale serve --tcp forward that points at a Unix socket, especially /run/tailscale/tailscaled.sock.

These follow the researcher’s interim mitigations, except where noted. Tailscale has not yet published its own.

The findings

Eleven findings in five areas, tested on Tailscale 1.104.2 and headscale 0.29.5. Severities are the researcher’s own. None has a CVE or CVSS score yet.

Tailworm findings by area
AreaWhat the researcher reportsWho is exposedSeverityFix
Tailscale SSH socket forwarding (three findings)A user allowed to SSH in, even to an ordinary account, gets tailscaled, which runs as root, to connect to, replace or race root-only Unix sockets. In the lab this gave a root shell and read /etc/shadow.Servers running Tailscale SSH where a rule lets the attacker log in.HighNot released. A fix that moves forwarding out of the root process is open for review.
Tailscale SSH session churnRepeated window-size and environment messages grew tailscaled’s memory by about 536 MB in 7 seconds, and it stayed high after disconnecting.Servers running Tailscale SSH.HighNot released.
App connectors (experimental)A device entitled to one app could reach any destination through the connector, including cloud metadata services and services inside Kubernetes.Tailnets using app connectors, mainly through the Kubernetes operator.HighNone published.
tailscale serveA TCP forward to tailscaled’s socket lets other machines change the device’s settings. A separate race can leak app permissions between mounts.Devices with that forward configured, or serving apps that rely on Tailscale app permissions.High and MediumThe permissions race is fixed in unreleased code.
headscale and the relay clientUnauthenticated registrations can push out pending approvals and block new devices from joining. A hostile relay can make a client use about 1.34 GB of memory from a 10 MB response.Internet-reachable headscale servers, and clients pointed at a hostile relay.Medium to Highheadscale 0.29.6 does not address these.

Why the main finding matters

Tailscale SSH runs inside tailscaled, which runs as root, and lets a user forward Unix sockets between their machine and the server. The researcher found that tailscaled does that forwarding as root, not as the logged-in user. An ordinary user can therefore reach sockets only root should reach, such as the Docker socket, and from there take over the server.

This is the same code an earlier bulletin, TS-2026-004, fixed in 1.98.9 by checking where a socket path really leads. Tailworm’s race gets around that check by changing the path between the check and its use.

What an attacker needs first

This is not an attack from the internet. The attacker first needs a foothold on a device that your SSH rules allow to log in, for example through a compromised laptop, a vulnerable web app or a malicious dependency. The report’s point is that Tailscale SSH then turns that one foothold into root on every server the rules reach.

Signs of abuse

Visibility is limited. Tailscale does not log individual SSH forwarding requests, and session recordings capture terminal output, not forwarded traffic.

  • Configuration audit log. Look for unexpected devices joining, auth keys created or used outside change windows, and policy edits. Tailscale keeps these for 90 days on every plan. Audit logging
  • On servers. The researcher suggests auditing Unix socket creation, deletion and permission changes in /tmp, home folders and /run/user, and alerting on bursts of renames there.
  • Session recordings, if you use them, show what was typed into a terminal. A session that only forwards sockets leaves nothing to watch. Session recording

If you find signs of a compromise, the researcher advises deleting the device in the admin console rather than only rebuilding it, because a rebuild does not revoke a device key an attacker has already copied. Then rotate auth keys and review recent policy changes.

An open Tailscale change says that today, revoking access in the policy does not close sessions that only forward traffic. Until it ships, restart tailscaled or delete the device to be sure an attacker is cut off. tailscale/tailscale #21944

Fix status

As of 25 October 2026 there is no fixed release. The newest Tailscale version is 1.104.2, the one the researcher tested.

  • In progress. Tailscale has merged several Tailscale SSH hardening changes and the fix for the serve permissions race, and has opened a change that has sockets opened by a process running as the logged-in user, never as root. That is the fix the researcher recommends for the main finding. None of this is in a release yet.
  • Not yet announced. Tailscale has published no bulletin, CVE or affected version range. Socket forwarding first shipped in 1.98.0, so earlier versions are unlikely to have the main finding, but Tailscale has not confirmed this.
  • When it lands. Install the fixed version on every server running Tailscale SSH first. Updating restarts tailscaled, which ends open Tailscale SSH sessions.

Auto-update, set per device with tailscale set --auto-update, usually installs a release about a week after it ships, sooner for important security fixes. It does not survive restarts in containers. Tailscale update docs

Where the sources differ

The report was published without coordination, and early coverage gets some details wrong. Here is what each source says and how we read it.

Points where sources disagree
QuestionWhat the sources sayOur reading
Can hosted Tailscale turn off SSH forwarding per rule?The researcher and Cybersecuritynews say to set each rule’s forwarding fields to false. Tailscale’s documented SSH rule fields are action, src, dst, users, checkPeriod and acceptEnv, with no forwarding setting.We found no documented way to do this in the policy file. Use the server setting above or turn Tailscale SSH off.
How easy the root escalation isCybersecuritynews says an ordinary session gained root almost instantly. The report shows that only with a root socket inside the allowed folders. Against the standard Docker socket it needed a race, and one route to a root shell worked 0 to 4% of the time.Serious and real, but not equally quick on every server. Treat it as root access anyway.
Whether every device sees every other deviceThe report says each node receives the full peer list. A Tailscale engineer says its hosted service only sends a device the peers its policy lets it reach.This is probably a difference between headscale and hosted Tailscale.
Whether it is wormableThe report measured automatic spread across a lab tailnet with broad SSH rules. Some commenters say it is not wormable in the usual sense, because the attacker needs a first foothold.It spreads only as far as your SSH rules allow. One-to-one rules stopped it in the researcher’s lab.
Whether Tailscale has respondedCybersecuritynews says Tailscale has not confirmed the findings. A Tailscale engineer says it is working on them, and related fixes are in Tailscale’s public code.Tailscale is responding, but has not yet published a bulletin or fixed release.

No attacks have been reported, and no Tailscale flaw is in the CISA KEV catalog. The report describes the attacks in detail, but the researcher’s full reproduction kits are not published. She says the report was sent to Tailscale but not coordinated.

Timeline

Times are UTC.

  1. 2026-04-07

    Tailscale SSH gains Unix socket forwarding, the code behind the main finding. It first ships in 1.98.0.

    tailscale/tailscale #19006

  2. 2026-10-21

    Tailscale releases 1.104.2, the version the researcher tested. It is still the newest release.

    Tailscale changelog

  3. 2026-10-23 · 23:35 UTC

    The first related Tailscale SSH hardening change appears in Tailscale’s public code.

    tailscale/tailscale

  4. 2026-10-25 · 00:39 UTC

    Tailscale merges a fix for the tailscale serve permissions race. It is not yet in a release.

    tailscale/tailscale #21931

  5. 2026-10-25 · 00:59 UTC

    The Tailworm report is shared publicly. The researcher says it was reported to Tailscale but not coordinated.

    Hacker News

  6. 2026-10-25 · 01:38 UTC

    A Tailscale engineer says the team has been working on it and more details will follow.

    Hacker News

  7. 2026-10-25 · 17:24 UTC

    Tailscale opens a change that moves SSH forwarding out of the root process, the fix the researcher recommends.

    tailscale/tailscale #21942

Recording it for compliance

Tailscale SSH is often how a team grants admin access to servers, so auditors will treat this as a privileged-access issue. With no patch, the record of what you changed and why is the evidence.

Controls to record this event against
FrameworkControlWhat to record
ISO 27001:2022A.8.2Privileged access rights. Record that Tailscale SSH grants are treated as root access, and who holds them.
ISO 27001:2022A.5.15, A.5.18Access control and access rights. Keep the policy file before and after you narrowed the SSH rules.
ISO 27001:2022A.8.8Technical vulnerabilities. With no patch yet, record the decision, the temporary controls and a date to revisit.
ISO 27001:2022A.8.15, A.8.16Logging and monitoring. Note that SSH forwarding is not logged, and what you monitor instead.
ISO 27001:2022A.5.19, A.5.21Supplier and supply chain security. Track Tailscale’s bulletin and the fixed version.
SOC 2CC6.1, CC6.3Logical access and least privilege.
SOC 2CC7.1, CC7.2Identifying the vulnerability and monitoring.
SOC 2CC9.2Vendor risk for Tailscale.

Evidence to keep: the date you assessed it, the list of servers with Tailscale SSH and what you decided for each, the policy file before and after, any server settings you changed, and the date you installed the fixed release.

For how these controls work day to day, see our guides to ISO 27001 vulnerability management, SOC 2 vulnerability management and SOC 2 third-party risk.

Tailworm FAQ

Short answers. The sections above have the detail and sources.

What is Tailworm?

Tailworm is the name researcher Erica Windisch of Cyberdione Labs gave to a set of flaws she found in Tailscale 1.104.2 and the self-hosted headscale server 0.29.5, published on 25 October 2026 without waiting for a fix. The most important lets anyone allowed to log in through Tailscale SSH, even to an ordinary account, reach root on that server by abusing how Tailscale forwards Unix sockets. Other findings affect app connectors, tailscale serve, headscale and the relay client.

Is there a patch for the Tailworm flaws?

Not yet. As of 25 October 2026 the newest Tailscale release is 1.104.2, the version the researcher tested, and Tailscale has published no bulletin. Fixes are being written in Tailscale's public code, including one that moves socket forwarding out of the root process. Turn on auto-update and watch Tailscale's security bulletins for the fixed version.

Am I affected if I do not use Tailscale SSH?

Not by the main root-escalation finding, which needs Tailscale SSH turned on for the server and an SSH rule that lets someone log in. Using Tailscale only as a network, or running normal OpenSSH over it, is not affected by that finding. The separate findings in app connectors, tailscale serve, headscale and the relay client have their own conditions.

Does limiting Tailscale SSH to non-root users (autogroup:nonroot) protect me?

No. The researcher reached root from fully unprivileged accounts, and says restricting logins to non-root users is defence in depth only. Treat any Tailscale SSH grant as root access to that server until a fix ships.

Can I turn off SSH forwarding in my Tailscale policy?

Not through any documented setting. Tailscale's SSH rules accept only action, src, dst, users, checkPeriod and acceptEnv. On a server, an undocumented setting in Tailscale's code, TS_SSH_DISABLE_FORWARDING, blocks all SSH forwarding when tailscaled starts with it. Tailscale has not endorsed it, and it also breaks tools that tunnel over SSH, so test it first.

Is Tailworm being exploited?

No attacks had been reported as of 25 October 2026, and no Tailscale CVE is in the CISA Known Exploited Vulnerabilities catalog. The researcher's report describes the attacks in detail, but her full reproduction kits are not published. An attacker first needs a foothold on a device that is allowed to SSH in, such as a compromised laptop, server or dependency.

Does Tailworm affect headscale?

Yes. On headscale 0.29.5, SSH forwarding is granted on every accepted session and cannot be turned off, so the researcher says to treat every headscale SSH grant as root access. An internet-reachable headscale server can also be flooded with registrations that block new devices from joining. headscale 0.29.6 does not address these findings.

Sources