//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
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 nowTreat 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 nowSSH 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 neededRemove 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 neededRemove 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 riskNot 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
ProtectedNot 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.
Find every server running Tailscale SSH
Read thesshsection of your tailnet policy, then check each server. How to checkTurn 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.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 ruleConsider 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.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
# 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 versionTailscale 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
# 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=falseTailscale’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.
"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.
# 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 sessionsTailscale 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 --tcpforward 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.
| Area | What the researcher reports | Who is exposed | Severity | Fix |
|---|---|---|---|---|
| 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. | High | Not released. A fix that moves forwarding out of the root process is open for review. |
| Tailscale SSH session churn | Repeated 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. | High | Not 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. | High | None published. |
| tailscale serve | A 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 Medium | The permissions race is fixed in unreleased code. |
| headscale and the relay client | Unauthenticated 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 High | headscale 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.
| Question | What the sources say | Our 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 is | Cybersecuritynews 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 device | The 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 wormable | The 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 responded | Cybersecuritynews 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.
- 2026-04-07
2026-04-07
Tailscale SSH gains Unix socket forwarding, the code behind the main finding. It first ships in 1.98.0.
- 2026-10-21
2026-10-21
Tailscale releases 1.104.2, the version the researcher tested. It is still the newest release.
- 2026-10-23
2026-10-23 · 23:35 UTC
The first related Tailscale SSH hardening change appears in Tailscale’s public code.
- 2026-10-25
2026-10-25 · 00:39 UTC
Tailscale merges a fix for the tailscale serve permissions race. It is not yet in a release.
2026-10-25 · 00:59 UTC
The Tailworm report is shared publicly. The researcher says it was reported to Tailscale but not coordinated.
2026-10-25 · 01:38 UTC
A Tailscale engineer says the team has been working on it and more details will follow.
2026-10-25 · 17:24 UTC
Tailscale opens a change that moves SSH forwarding out of the root process, the fix the researcher recommends.
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.
| Framework | Control | What to record |
|---|---|---|
| ISO 27001:2022 | A.8.2 | Privileged access rights. Record that Tailscale SSH grants are treated as root access, and who holds them. |
| ISO 27001:2022 | A.5.15, A.5.18 | Access control and access rights. Keep the policy file before and after you narrowed the SSH rules. |
| ISO 27001:2022 | A.8.8 | Technical vulnerabilities. With no patch yet, record the decision, the temporary controls and a date to revisit. |
| ISO 27001:2022 | A.8.15, A.8.16 | Logging and monitoring. Note that SSH forwarding is not logged, and what you monitor instead. |
| ISO 27001:2022 | A.5.19, A.5.21 | Supplier and supply chain security. Track Tailscale’s bulletin and the fixed version. |
| SOC 2 | CC6.1, CC6.3 | Logical access and least privilege. |
| SOC 2 | CC7.1, CC7.2 | Identifying the vulnerability and monitoring. |
| SOC 2 | CC9.2 | Vendor 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
- Tailworm report, Erica Windisch, Cyberdione LabsAll eleven findings, the lab results, severities and interim mitigations.
- Tailscale SSH documentationSupported platforms, how to turn it off, and how SSH rules work.
- Tailscale policy file syntaxThe fields an SSH rule accepts.
- Tailscale security bulletinsWhere the fix will be announced. Includes TS-2026-004 on the same forwarding code.
- Tailscale releasesThe newest version, to compare against the fixed release.
- tailscale/tailscale #21942The open change that moves SSH forwarding out of the root process.
- Tailscale engineer on Hacker NewsTailscale’s first public response, and the peer-list point.
- Researcher on Hacker NewsWhich findings matter most, in the researcher’s view.
- Cybersecuritynews, 25 October 2026The news report that brought this to wide attention.