<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Security Bulletins on Tailscale</title>
        <link>https://tailscale.com/security-bulletins/</link>
        <description>Recent security bulletins from Tailscale</description>
        <lastBuildDate>Thu, 05 Mar 2026 13:39:08 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>tailscale.com</generator>
        <language>en-US</language>
        <copyright>© 2026 Tailscale Inc. All rights reserved.</copyright>
        <atom:link href="https://tailscale.com/security-bulletins/index.xml" rel="self" type="application/rss+xml"/>
        <item>
            <title>TS-2026-001</title>
            <link>https://tailscale.com/security-bulletins/#ts-2026-001</link>
            <guid>https://tailscale.com/security-bulletins/#ts-2026-001</guid>
            <pubDate>Thu, 15 Jan 2026 00:00:00 GMT</pubDate>
            <description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;Description&lt;/em&gt;&lt;/strong&gt;: Arbitrary command execution with elevated privileges in tssentineld&lt;/p&gt;
&lt;h4&gt;What happened?&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;tssentineld&lt;/code&gt; is a launchd service that is installed in &lt;a href=&quot;/kb/1362/mdm&quot;&gt;managed environments&lt;/a&gt;
when the &lt;a href=&quot;/kb/1315/mdm-keys#set-tailscale-to-always-be-connected&quot;&gt;AlwaysOn.Enabled&lt;/a&gt; MDM policy is present on macOS. Its sole
responsibility is to ensure that Tailscale.app is relaunched if terminated.
As a launchd service, it runs as &lt;code&gt;root&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The implementation used an NSTask and &lt;code&gt;/bin/sh -c sudo -u [username]&lt;/code&gt;, using basic string
template substitution for the username. An attacker with either direct access
to the memory backing the username string or by setting the current username
to a malicious value could use this to inject commands running with the same
privileges as &lt;code&gt;tssentineld&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;This vulnerability is fixed in Tailscale version 1.94.0 and newer.&lt;/p&gt;
&lt;h4&gt;What was the impact?&lt;/h4&gt;
&lt;p&gt;Malicious local users that can manipulate their username or manipulate memory of tssentineld
can execute arbitrary commands as root.&lt;/p&gt;
&lt;h4&gt;Who was affected?&lt;/h4&gt;
&lt;p&gt;The &lt;a href=&quot;/kb/1065/macos-variants&quot;&gt;macOS standalone variant&lt;/a&gt; from 1.84.0 to 1.92.3, when configured
via MDM to enable the &lt;a href=&quot;/kb/1315/mdm-keys#set-tailscale-to-always-be-connected&quot;&gt;AlwaysOn.Enabled&lt;/a&gt; policy is affected.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;tssentineld&lt;/code&gt; is only activated on clients managed by MDM and employing the
&lt;a href=&quot;/kb/1315/mdm-keys#set-tailscale-to-always-be-connected&quot;&gt;AlwaysOn.Enabled&lt;/a&gt; policy and requires admin permission to install and
activate. Memory manipulation to inject a malicious command requires a separate
vulnerability or existing root access. The user may, however, modify their username
in such a way that &lt;code&gt;tssentineld&lt;/code&gt; could execute arbitrary shell commands with elevated
privileges.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;/kb/1065/macos-variants&quot;&gt;macOS package available from the App Store&lt;/a&gt; does not support the
installation of launchd daemons and is not affected.&lt;/p&gt;
&lt;h4&gt;What do I need to do?&lt;/h4&gt;
&lt;p&gt;If you are using the &lt;a href=&quot;/kb/1315/mdm-keys#set-tailscale-to-always-be-connected&quot;&gt;AlwaysOn.Enabled&lt;/a&gt; policy with standalone macOS clients, update to version 1.94.0 or newer.&lt;/p&gt;
</description>
        </item>
        <item>
            <title>TS-2025-008</title>
            <link>https://tailscale.com/security-bulletins/#ts-2025-008</link>
            <guid>https://tailscale.com/security-bulletins/#ts-2025-008</guid>
            <pubDate>Wed, 19 Nov 2025 00:00:00 GMT</pubDate>
            <description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;Description&lt;/em&gt;&lt;/strong&gt;: Nodes without &lt;code&gt;--statedir&lt;/code&gt; or &lt;code&gt;TS_STATE_DIR&lt;/code&gt; failed to enforce signing checks in tailnets with Tailnet Lock enabled.&lt;/p&gt;
&lt;h4&gt;What happened?&lt;/h4&gt;
&lt;p&gt;In tailnets where &lt;a href=&quot;/kb/1226/tailnet-lock&quot;&gt;Tailnet Lock&lt;/a&gt; is enabled, unsigned nodes running the &lt;code&gt;tailscaled&lt;/code&gt; daemon (for example, on Linux) without specifying a &lt;code&gt;--statedir&lt;/code&gt; or &lt;code&gt;--state&lt;/code&gt; failed to enforce the required signing checks. This allowed them to communicate with other similarly misconfigured, unsigned nodes, or with malicious nodes that joined the tailnet. This behaviour bypassed the Tailnet Lock security policy for a specific subset of nodes.&lt;/p&gt;
&lt;p&gt;When Tailnet Lock is enabled, Tailscale nodes will only communicate if their node keys have been signed by a trusted signing node.&lt;/p&gt;
&lt;p&gt;The set of trusted signing nodes is tracked by the &lt;a href=&quot;/kb/1226/tailnet-lock#tailnet-key-authority&quot;&gt;tailnet key authority (TKA)&lt;/a&gt;. This set is distributed to all nodes in the tailnet, and each node must store this state locally so that it can verify peer signatures.&lt;/p&gt;
&lt;p&gt;The TKA state is stored on disk in the state directory.
Prior to 1.90.8, this was the only storage option.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If you use the macOS, Windows, iOS, Android, and tvOS clients, the state directory is set automatically.&lt;/li&gt;
&lt;li&gt;If you run the &lt;code&gt;tailscaled&lt;/code&gt; daemon, the state directory is set by the &lt;a href=&quot;/kb/1278/tailscaled#flags-to-tailscaled&quot;&gt;&lt;code&gt;--statedir&lt;/code&gt;&lt;/a&gt; or &lt;code&gt;--state&lt;/code&gt; flags.&lt;/li&gt;
&lt;li&gt;If you use the default systemd unit files distributed with the official Tailscale &lt;code&gt;deb&lt;/code&gt;, &lt;code&gt;rpm&lt;/code&gt;, and &lt;code&gt;tar.gz&lt;/code&gt; packages, the &lt;code&gt;--state&lt;/code&gt; flag is set automatically.&lt;/li&gt;
&lt;li&gt;If you use Tailscale in Docker or Kubernetes, the state directory is set by the &lt;a href=&quot;/kb/1282/docker#ts_state_dir&quot;&gt;&lt;code&gt;TS_STATE_DIR&lt;/code&gt; environment variable&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If &lt;code&gt;tailscaled&lt;/code&gt; was started without a state directory (&lt;code&gt;--statedir&lt;/code&gt;, &lt;code&gt;--state&lt;/code&gt;, and/or &lt;code&gt;TS_STATE_DIR&lt;/code&gt; were omitted), it would be unable to store the set of trusted signing nodes. Rather than failing and reporting an error, such a node erroneously skipped checking whether peer signatures were signed, which is a failure to enforce Tailnet Lock.&lt;/p&gt;
&lt;h4&gt;What was the impact?&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;There is no indication of this issue being exploited in the wild.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The bug allowed communication between two or more unsigned nodes, each running without a state directory, even though Tailnet Lock was enabled.&lt;/p&gt;
&lt;p&gt;While the bug is present across many versions, the risk of exploitation is low. It was not possible for an unsigned node without a &lt;code&gt;--statedir&lt;/code&gt; to connect to a node that did have a state directory, as the latter would correctly enforce the policy and reject the connection from the unsigned peer.&lt;/p&gt;
&lt;h4&gt;Who was affected?&lt;/h4&gt;
&lt;p&gt;The vulnerability only manifests when all three of the following conditions are met:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Tailnet Lock is enabled in the tailnet,&lt;/li&gt;
&lt;li&gt;At least two nodes were running the &lt;code&gt;tailscaled&lt;/code&gt; daemon without the &lt;code&gt;--statedir&lt;/code&gt;/&lt;code&gt;--state&lt;/code&gt; flags, or without the &lt;code&gt;TS_STATE_DIR&lt;/code&gt; environment variable, and&lt;/li&gt;
&lt;li&gt;At least one of the node keys was not signed.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This bug was present in all Tailscale clients from the introduction of Tailnet Lock, and is fixed in version 1.90.8.&lt;/p&gt;
&lt;p&gt;You can tell if a node is affected by this issue by running &lt;code&gt;tailscale lock status&lt;/code&gt;.
If the output says &lt;code&gt;Tailnet Lock is NOT enabled&lt;/code&gt; but Tailnet Lock is enabled in your Tailnet, the node is not enforcing signing checks correctly.&lt;/p&gt;
&lt;p&gt;Alternatively, you can look for the following text in your &lt;a href=&quot;/kb/1011/log-mesh-traffic&quot;&gt;client logs&lt;/a&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;network-lock unavailable; no state directory
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;(The pre-release name for Tailnet Lock was &quot;network lock&quot;, which still persists in parts of the codebase.)&lt;/p&gt;
&lt;h4&gt;What do I need to do?&lt;/h4&gt;
&lt;p&gt;If you don&#039;t use Tailnet Lock, no action is required.&lt;/p&gt;
&lt;p&gt;If you do use Tailnet Lock:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Review the configuration of any nodes that run the &lt;code&gt;tailscaled&lt;/code&gt; daemon.&lt;/strong&gt;
Specifically, check the startup parameters for the &lt;code&gt;tailscaled&lt;/code&gt; service.
Any nodes running &lt;code&gt;tailscaled&lt;/code&gt; without a state directory are potentially vulnerable until upgraded.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Upgrade all nodes running the &lt;code&gt;tailscaled&lt;/code&gt; daemon to 1.90.8 or later.&lt;/strong&gt;
Alternatively, set a state directory by:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Adding the &lt;code&gt;--statedir&lt;/code&gt; flag if you run the &lt;code&gt;tailscaled&lt;/code&gt; daemon, or&lt;/li&gt;
&lt;li&gt;Adding the &lt;code&gt;TS_STATE_DIR&lt;/code&gt; environment variable if you run Tailscale in Docker or Kubernetes.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;In version 1.90.8 and later, nodes without a state directory will now store the TKA in memory and enforce Tailnet Lock signing requirements.&lt;/p&gt;
&lt;p&gt;However, nodes that store TKA in memory must re-fetch the complete TKA from the coordination server whenever they start.
&lt;strong&gt;We strongly recommend setting a state directory for all nodes&lt;/strong&gt;, allowing them to store the TKA on disk and eliminate the startup control plane dependency.&lt;/p&gt;
</description>
        </item>
        <item>
            <title>TS-2025-007</title>
            <link>https://tailscale.com/security-bulletins/#ts-2025-007</link>
            <guid>https://tailscale.com/security-bulletins/#ts-2025-007</guid>
            <pubDate>Fri, 07 Nov 2025 00:00:00 GMT</pubDate>
            <description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;Description&lt;/em&gt;&lt;/strong&gt;: A one-off auth key could be reused from multiple devices&lt;/p&gt;
&lt;h4&gt;What happened?&lt;/h4&gt;
&lt;p&gt;A time-of-check/time-of-use (TOCTOU) issue allowed multiple nodes to register
using the same &lt;a href=&quot;/kb/1085/auth-keys&quot;&gt;one-off auth key&lt;/a&gt;. These registration attempts
would have to happen at approximately the same time to succeed.&lt;/p&gt;
&lt;p&gt;The Tailscale coordination server relies on database transactions to ensure
consistency and prevent race conditions. The API handler for node registration
requests uses a read transaction to validate the request, including the auth
key, and then a separate write transaction to complete the registration.
One-off auth keys are invalidated during the write transaction stage.
Previously, if two registration requests came in at the same time they would
both successfully validate the auth key during the read transaction and proceed
to register the node. We fixed the API handler to re-validate the auth key
during the write transaction stage to catch this race condition.&lt;/p&gt;
&lt;h4&gt;What was the impact?&lt;/h4&gt;
&lt;p&gt;A one-off auth key could be reused multiple times to register multiple
nodes, rather than just one.&lt;/p&gt;
&lt;h4&gt;Who was affected?&lt;/h4&gt;
&lt;p&gt;Tailnets using one-off auth keys through automation. All nodes would have to
obtain a legitimate auth key for the tailnet. Malicious nodes cannot abuse this
issue to join the tailnet.&lt;/p&gt;
&lt;p&gt;Tailscale audit logs do not have enough information to detect this race
condition happening. We plan to improve our audit logs to make detection of
incidents involving auth keys easier in the future.&lt;/p&gt;
&lt;h4&gt;What do I need to do?&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;No action is required&lt;/strong&gt;. Tailscale has deployed a fix to the coordination server as of 2025-11-07.&lt;/p&gt;
&lt;h4&gt;Credits&lt;/h4&gt;
&lt;p&gt;We would like to thank &lt;a href=&quot;https://github.com/madisp&quot;&gt;madisp&lt;/a&gt; for reporting this issue.&lt;/p&gt;
</description>
        </item>
        <item>
            <title>TS-2025-006</title>
            <link>https://tailscale.com/security-bulletins/#ts-2025-006</link>
            <guid>https://tailscale.com/security-bulletins/#ts-2025-006</guid>
            <pubDate>Tue, 28 Oct 2025 00:00:00 GMT</pubDate>
            <description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;Description&lt;/em&gt;&lt;/strong&gt;: A potential access control logic issue affected shared subnet router nodes between tailnets.&lt;/p&gt;
&lt;h4&gt;What happened?&lt;/h4&gt;
&lt;p&gt;Tailscale nodes that are subnet routers and shared with other tailnets did not enforce protocol filters in ACLs. For example, a subnet router with an IP grant of &lt;code&gt;&quot;udp:1234&quot;&lt;/code&gt; in the policy file would allow TCP, UDP, and any other protocol connections to port &lt;code&gt;1234&lt;/code&gt;. This bug was fixed in our control plane and does not require any update.&lt;/p&gt;
&lt;p&gt;The Tailscale Control Plane performs a process known as &lt;a href=&quot;/kb/1087/device-visibility&quot;&gt;network map trimming&lt;/a&gt; to ensure that only nodes with authorized access to each other appear in their respective clients.&lt;/p&gt;
&lt;p&gt;As part of this process, the Control Plane transforms ACLs for nodes that serve as &lt;a href=&quot;/kb/1019/subnets&quot;&gt;subnet routers&lt;/a&gt;, &lt;a href=&quot;/kb/1103/exit-nodes&quot;&gt;exit node&lt;/a&gt;, or &lt;a href=&quot;kb/1281/app-connectors&quot;&gt;app connector&lt;/a&gt; and are &lt;a href=&quot;/kb/1084/sharing&quot;&gt;shared externally&lt;/a&gt; with other tailnets to constrain the access of external tailnet members to only the shared node and prohibit their access to the routed subnets.&lt;/p&gt;
&lt;p&gt;This filtering contained a bug, producing ACLs for these nodes that omitted their IP Protocol number information entirely. This caused those nodes to accept connections using arbitrary protocols from both local and external tailnets the node was shared with. The &lt;code&gt;src&lt;/code&gt;/&lt;code&gt;dst&lt;/code&gt; restrictions, as well as port restrictions still applied, so these nodes were not accessible broadly.&lt;/p&gt;
&lt;p&gt;For ACL rules that relied on protocol-based filtering, such as &lt;code&gt;imcp:*&lt;/code&gt; this would have allowed connections from the source using arbitrary protocols to the destination.&lt;/p&gt;
&lt;h4&gt;What was the impact?&lt;/h4&gt;
&lt;p&gt;Local and external tailnet members with existing access to subnet routers that were shared externally would have been able to exceed their authorized access and establish connections using arbitrary protocols to these nodes.&lt;/p&gt;
&lt;p&gt;Local and external members who were not included in the source of the impacted ACL groups would not have been able to access impacted nodes using these rules.&lt;/p&gt;
&lt;p&gt;There is &lt;strong&gt;no indication of this issue being exploited&lt;/strong&gt; in the wild. The exposure is limited to nodes that were intentionally shared to another tailnet.&lt;/p&gt;
&lt;h4&gt;Who was affected?&lt;/h4&gt;
&lt;p&gt;Tailnets with nodes that are subnet routers, that were also shared with external tailnets, and whose ACLs for these nodes relied on protocol filtering were affected.&lt;/p&gt;
&lt;p&gt;This bug was present in all Tailscale clients from the introduction of these features, and was fixed for all clients through the Tailscale control plane on October 29th 2025.&lt;/p&gt;
&lt;h4&gt;What do I need to do?&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;No action is required&lt;/strong&gt;. Tailscale has deployed a fix to the control plane as of 2025-10-29.&lt;/p&gt;
&lt;h4&gt;Credits&lt;/h4&gt;
&lt;p&gt;We would like to thank &lt;a href=&quot;https://www.linkedin.com/in/thariq-shanavas&quot;&gt;Thariq Shanavas&lt;/a&gt; for reporting this issue.&lt;/p&gt;
</description>
        </item>
        <item>
            <title>TS-2025-005</title>
            <link>https://tailscale.com/security-bulletins/#ts-2025-005</link>
            <guid>https://tailscale.com/security-bulletins/#ts-2025-005</guid>
            <pubDate>Thu, 07 Aug 2025 00:00:00 GMT</pubDate>
            <description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;Description&lt;/em&gt;&lt;/strong&gt;: Logging of MDM-provided auth keys&lt;/p&gt;
&lt;h4&gt;What happened?&lt;/h4&gt;
&lt;p&gt;A change in Tailscale version 1.84.0 on macOS and iOS caused all
&lt;a href=&quot;/kb/1315/mdm-keys&quot;&gt;MDM-provided&lt;/a&gt; configuration values to be logged and uploaded to the
Tailscale &lt;a href=&quot;/kb/1011/log-mesh-traffic#client-logs&quot;&gt;log server&lt;/a&gt;. One of the possible MDM values is an &lt;a href=&quot;/kb/1315/mdm-keys#set-an-auth-key&quot;&gt;auth
key&lt;/a&gt; used to automatically register the node. This resulted in
the Tailscale log server storing user &lt;a href=&quot;/kb/1085/auth-keys&quot;&gt;auth keys&lt;/a&gt; along with
other client logs.&lt;/p&gt;
&lt;p&gt;The logs collected by the Tailscale log server are only accessible to Tailscale
employees, so no auth keys were leaked to potential attackers.&lt;/p&gt;
&lt;p&gt;Tailscale version 1.86.4 redacts the auth key, and other textual values, before logging
them.&lt;/p&gt;
&lt;h4&gt;What was the impact?&lt;/h4&gt;
&lt;p&gt;MDM-provisioned auth keys were uploaded to the Tailscale log server. No keys
have leaked outside of Tailscale infrastructure. Auth keys provided on the CLI
or using environment variables were never logged.&lt;/p&gt;
&lt;p&gt;The impact depends on the &lt;a href=&quot;/kb/1085/auth-keys#types-of-auth-keys&quot;&gt;type of auth key&lt;/a&gt; used:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;One-off auth keys are used and invalidated when the node is registered; there
is no risk to your tailnet&lt;/li&gt;
&lt;li&gt;Reusable auth keys could be used again to register nodes if stolen&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/kb/1226/tailnet-lock#add-a-node-using-a-pre-signed-auth-key&quot;&gt;Pre-signed auth keys for Tailnet Lock&lt;/a&gt; are
like reusable auth keys, but can also register nodes that don&#039;t need to be
signed by another signing node in the tailnet&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;Who was affected?&lt;/h4&gt;
&lt;p&gt;Customers using &lt;a href=&quot;/kb/1315/mdm-keys#set-an-auth-key&quot;&gt;MDM to distribute auth keys&lt;/a&gt;, with macOS and
iOS clients running Tailscale versions between 1.84.0 and 1.86.2, are affected.&lt;/p&gt;
&lt;h4&gt;What do I need to do?&lt;/h4&gt;
&lt;p&gt;If you don&#039;t use MDM to distribute auth keys to your devices, no action is
needed.&lt;/p&gt;
&lt;p&gt;If you do distribute auth keys with MDM, upgrade all macOS and iOS nodes to
Tailscale version 1.86.4 or later. Additionally, if you distribute reusable auth keys,
or pre-signed auth keys for Tailnet Lock, we recommend that you rotate these
keys.&lt;/p&gt;
</description>
        </item>
        <item>
            <title>TS-2025-004</title>
            <link>https://tailscale.com/security-bulletins/#ts-2025-004</link>
            <guid>https://tailscale.com/security-bulletins/#ts-2025-004</guid>
            <pubDate>Tue, 27 May 2025 00:00:00 GMT</pubDate>
            <description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;Description&lt;/em&gt;&lt;/strong&gt;: Tailnets using shared public email providers&lt;/p&gt;
&lt;h4&gt;What happened?&lt;/h4&gt;
&lt;p&gt;On May 22, 2025 our Reddit community gave us &lt;a href=&quot;https://www.reddit.com/r/Tailscale/comments/1ksy3xy/someone_just_randomly_joined_my_tailnet/&quot;&gt;the necessary kick&lt;/a&gt;
to address an issue with handling shared public email provider domains (&quot;shared
domains&quot;). We mitigated the risk for new tailnets being created on previously
unknown shared domains by enabling &lt;a href=&quot;/kb/1239/user-approval&quot;&gt;user approval&lt;/a&gt; by
default. This issue affects only a small portion of our user base, and this
bulletin provides some background, mitigation steps, and our future plans.&lt;/p&gt;
&lt;h5&gt;Background&lt;/h5&gt;
&lt;p&gt;Tailscale users are mapped to tailnets by their email address domain (with a
few exceptions*). This means that &lt;code&gt;user1@example.com&lt;/code&gt; and &lt;code&gt;user2@example.com&lt;/code&gt;
can both log in to tailnet &lt;code&gt;example.com&lt;/code&gt;. We chose this default behavior because
it reduces onboarding friction for new users and tailnet admins.&lt;/p&gt;
&lt;p&gt;The downside of this default behavior is that if a user&#039;s email address comes
from a shared domain, multiple unrelated users may be able to join the same
tailnet without realizing that others are in their tailnet too.&lt;/p&gt;
&lt;p&gt;Tailscale has a workaround for this scenario: we flag known shared domains in
our database. For example, when &lt;code&gt;user@gmail.com&lt;/code&gt; logs in for the first time, we
create a personal tailnet named &lt;code&gt;user@gmail.com&lt;/code&gt; for them instead of adding
them to one giant &lt;code&gt;gmail.com&lt;/code&gt; tailnet. If there is an existing shared domain
tailnet, we &quot;decompose&quot; it - break it up into new personal tailnets for each
user with only their nodes. Very popular email providers, like Gmail or Yahoo,
have been decomposed from the very beginning.&lt;/p&gt;
&lt;p&gt;This workaround has an obvious flaw: we can&#039;t flag all shared domains in our
database proactively, because there is no authoritative list of such domains
and new providers can show up at any time. So far we have patched over this
flaw by retroactively flagging new shared domains when users report them to us.
This has been convenient for ease of onboarding new users, especially users on
corporate domains.&lt;/p&gt;
&lt;p&gt;* We use special OIDC claims to map logins to tailnets on Google Workspace
(&lt;code&gt;hd&lt;/code&gt; claim) and Microsoft Entra (&lt;code&gt;tid&lt;/code&gt; claim).&lt;/p&gt;
&lt;h5&gt;What changed&lt;/h5&gt;
&lt;p&gt;On May 22, 2025 a post on Reddit made the severity of this issue more obvious.
The poster was using a previously unknown shared domain. We flagged the new
shared domain and decomposed the tailnet.&lt;/p&gt;
&lt;p&gt;To mitigate the potential risk for tailnets on shared domains, we enabled &lt;a href=&quot;/kb/1239/user-approval&quot;&gt;user
approval&lt;/a&gt; by default for all new tailnets. This way, even if
unexpected users log in using a shared domain that is not decomposed yet, an
administrator will have to approve them first. We did not change the setting
for any existing tailnets to avoid breaking any workflows.&lt;/p&gt;
&lt;p&gt;Since May 22nd, we also decomposed 130 additional tailnets based on signals
like: number of users, payment plan, recent activity, whether they have a
Google Workspace or a Microsoft Entra tenant, and basic online research. Before
May 22nd, we had already flagged and decomposed 534 shared domains, many
proactively, but some in response to support tickets.&lt;/p&gt;
&lt;h5&gt;What we&#039;re doing next&lt;/h5&gt;
&lt;p&gt;We have certainly dug ourselves into a hole here. There are various public
lists of shared domains, but it is tricky to figure out which existing tailnets
are meant to be single-user and which are not. There are shared email
hosting providers, customer emails created by ISPs, university emails,
disposable email providers, etc. In all cases a tailnet could be a legitimate
corporate tailnet for the company or university, and decomposing the tailnet
could break their setup.&lt;/p&gt;
&lt;p&gt;There are several planned actions and projects that should improve the
situation:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Short-term
&lt;ol&gt;
&lt;li&gt;Proactively flag more shared domains that don&#039;t have tailnets yet, using
public email provider lists and the &lt;a href=&quot;https://publicsuffix.org&quot;&gt;Public Suffix List&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Reach out to admins of tailnets that are potentially on shared domains,
but where we can&#039;t be certain, with advice on how to protect and audit their
tailnets.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;Medium-term
&lt;ol&gt;
&lt;li&gt;Mark any new domain coming through a Google or Microsoft login as shared
if it&#039;s not associated with Google Workspace or a private Microsoft Entra
tenant.&lt;/li&gt;
&lt;li&gt;Prompt owners of existing tailnets like the above to enable User
Approval on next login. Today this is ~1.7% of all tailnets.&lt;/li&gt;
&lt;li&gt;Create a process for unflagging a shared domain through a support ticket
and DNS ownership verification in case of false positives.&lt;/li&gt;
&lt;li&gt;We are discussing changing the default ACL in new tailnets, but no
decision has been made yet.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;Long-term: a large identity model change has been in the works for roughly a
year that, among other things, will make all new user registrations create a
personal tailnet instead of a domain-wide tailnet by default.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;What was the impact?&lt;/h4&gt;
&lt;p&gt;There are two potentially risky scenarios with shared domains: malicious users
and malicious admins.&lt;/p&gt;
&lt;p&gt;Malicious users could join a tailnet of an unsuspecting user and access exposed
ports on that user&#039;s nodes. Tailnet ACLs could limit that impact, but default
ACLs allow access to all ports on all nodes. Note that &lt;a href=&quot;/kb/1193/tailscale-ssh&quot;&gt;Tailscale SSH&lt;/a&gt;
is not allowed between nodes of different users, so a malicious user would need
to exploit some other software on a victim&#039;s node to gain access or
information. Also note that the free plan of Tailscale is limited to 3 users.&lt;/p&gt;
&lt;p&gt;Malicious admins could create a tailnet on a shared domain and wait, or
social-engineer victims to join it. Once victims join the tailnet, a malicious
admin could access all open ports on victims&#039; nodes, and set up a &lt;a href=&quot;/kb/1019/subnets&quot;&gt;subnet
router&lt;/a&gt; to intercept their traffic. A malicious admin could
also set up their own &lt;a href=&quot;/kb/1054/dns#override-dns-servers&quot;&gt;DNS server&lt;/a&gt; for the tailnet to record
and spoof DNS responses.&lt;/p&gt;
&lt;p&gt;We are not aware of any instances of either of these scenarios happening.&lt;/p&gt;
&lt;h4&gt;Who was affected?&lt;/h4&gt;
&lt;p&gt;Users of 664 known shared domains out of a total 166,488 unique domains we&#039;ve
seen across all tailnets may have had their nodes exposed to other users with
the same email domain. 534 of these shared domains have been been decomposed
throughout Tailscale&#039;s history and not recently.&lt;/p&gt;
&lt;p&gt;There may be other tailnets using shared domains that we haven&#039;t discovered
yet.&lt;/p&gt;
&lt;h5&gt;Who was not affected?&lt;/h5&gt;
&lt;p&gt;The following categories of users are not affected:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Users with custom email domains (corporate or personal)&lt;/li&gt;
&lt;li&gt;Users with &lt;a href=&quot;/kb/1240/sso-custom-oidc&quot;&gt;custom OIDC providers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GitHub users, including personal and org tailnets&lt;/li&gt;
&lt;li&gt;Owners of tailnets with &lt;a href=&quot;/kb/1239/user-approval&quot;&gt;User Approval&lt;/a&gt; or &lt;a href=&quot;/kb/1099/device-approval&quot;&gt;Device
Approval&lt;/a&gt; enabled&lt;/li&gt;
&lt;li&gt;Owners of tailnets with &lt;a href=&quot;/kb/1226/tailnet-lock&quot;&gt;Tailnet Lock&lt;/a&gt; enabled&lt;/li&gt;
&lt;li&gt;Users of very popular email providers, like &lt;code&gt;gmail.com&lt;/code&gt;, &lt;code&gt;outlook.com&lt;/code&gt;,
&lt;code&gt;yahoo.com&lt;/code&gt;, &lt;code&gt;protonmail.com&lt;/code&gt;, and others&lt;/li&gt;
&lt;li&gt;Users with custom restrictive &lt;a href=&quot;/kb/1018/acls&quot;&gt;ACLs&lt;/a&gt; that avoid &lt;code&gt;autogroup:member&lt;/code&gt;
and other broad selectors in &lt;code&gt;src&lt;/code&gt; clauses&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;What do I need to do?&lt;/h4&gt;
&lt;p&gt;If your tailnet name in the top-left corner of the &lt;a href=&quot;https://login.tailscale.com/&quot;&gt;Admin
Console&lt;/a&gt; is an email address rather than a bare domain, no
action is needed.&lt;/p&gt;
&lt;p&gt;If you are in a tailnet on a shared domain:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;/contact/support&quot;&gt;Contact support&lt;/a&gt; to request your tailnet to be decomposed.&lt;/li&gt;
&lt;li&gt;If you&#039;re the tailnet owner, review the &lt;a href=&quot;https://login.tailscale.com/admin/users&quot;&gt;list of users&lt;/a&gt; in your
tailnet and &lt;a href=&quot;/kb/1203/audit-logging&quot;&gt;audit logs&lt;/a&gt; for evidence of any suspicious
activity.&lt;/li&gt;
&lt;li&gt;If you&#039;re the tailnet owner and don&#039;t want to decompose your tailnet, enable
&lt;a href=&quot;/kb/1239/user-approval&quot;&gt;user&lt;/a&gt; and/or &lt;a href=&quot;/kb/1099/device-approval&quot;&gt;device&lt;/a&gt; approval.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If you are in a tailnet on a domain that was wrongfully decomposed, &lt;a href=&quot;/contact/support&quot;&gt;contact
support&lt;/a&gt; to reset your tailnet.&lt;/p&gt;
&lt;h4&gt;Timeline&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;March 2019: Tailscale started, Google and Azure AD (now Entra) authentication
implemented&lt;/li&gt;
&lt;li&gt;December 2019
&lt;ul&gt;
&lt;li&gt;decision to maintain a list of shared domains was made&lt;/li&gt;
&lt;li&gt;first shared domain hardcoded - &lt;code&gt;gmail.com&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Tailscale launched to a small set of users&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;November 2020: &lt;a href=&quot;/kb/1084/sharing&quot;&gt;Node sharing&lt;/a&gt; released&lt;/li&gt;
&lt;li&gt;January 2021: the hardcoded list of shared domains moved into a database
table, tools created for the support team to decompose new shared domains&lt;/li&gt;
&lt;li&gt;June 2021: GitHub authentication added&lt;/li&gt;
&lt;li&gt;March 2023: Custom OIDC authentication added&lt;/li&gt;
&lt;li&gt;April 2023: Passkey authentication added&lt;/li&gt;
&lt;li&gt;April 2023: Apple authentication added&lt;/li&gt;
&lt;li&gt;May 2023: &lt;a href=&quot;/kb/1271/invite-any-user&quot;&gt;External user invites&lt;/a&gt; added
&lt;ul&gt;
&lt;li&gt;This was primarily the point at which creating a tailnet for email domains
stopped being necessary. Multiple users could join a shared tailnet by
an invitation to access each other&#039;s nodes, even on personal accounts from
shared domains.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;May 2025:
&lt;ul&gt;
&lt;li&gt;May 22nd: Reddit user posted about an unexpected member of their tailnet&lt;/li&gt;
&lt;li&gt;May 22nd: User approval enabled by default for new tailnets&lt;/li&gt;
&lt;li&gt;May 23rd-27th: 130 shared domain tailnets identified and decomposed&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
            <title>TS-2025-003</title>
            <link>https://tailscale.com/security-bulletins/#ts-2025-003</link>
            <guid>https://tailscale.com/security-bulletins/#ts-2025-003</guid>
            <pubDate>Wed, 21 May 2025 00:00:00 GMT</pubDate>
            <description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;Description&lt;/em&gt;&lt;/strong&gt;: Insecure non-constant time comparison in DERP server mesh authentication&lt;/p&gt;
&lt;h4&gt;What happened?&lt;/h4&gt;
&lt;p&gt;Tailscale&#039;s &lt;a href=&quot;/kb/1232/derp-servers&quot;&gt;DERP (Designated Encrypted Relay for Packets) servers&lt;/a&gt; provide connectivity between Tailscale nodes in the event that they cannot mutually communicate due to network restrictions. DERP servers deployed in the same region communicate using a private mesh API to coordinate client connections amongst themselves. These private mesh connections authenticate using a pre-shared secret key.&lt;/p&gt;
&lt;p&gt;The DERP servers previously used an insecure non-constant time comparison when verifying the mesh authentication secret. This would have allowed an attacker to discover the mesh secret by performing a side channel timing attack.&lt;/p&gt;
&lt;p&gt;The issue was present since the introduction of DERP meshing and patched on May 21, 2025. We have updated all Tailscale-managed DERP servers and rotated their mesh secrets.&lt;/p&gt;
&lt;h4&gt;Who was affected?&lt;/h4&gt;
&lt;p&gt;All Tailscale-operated DERP servers and Tailscale users who operate their own custom DERP servers with more than one server per region.&lt;/p&gt;
&lt;h4&gt;What was the impact?&lt;/h4&gt;
&lt;p&gt;An attacker who discovered the mesh key could not see any plaintext traffic between nodes, since all traffic is end-to-end encrypted.&lt;/p&gt;
&lt;p&gt;An attacker with mesh access would have been able to enumerate all peers connected to a DERP server, including their WireGuard public key and their source IP address and port.&lt;/p&gt;
&lt;p&gt;An attacker with mesh access would have been able to perform a denial-of-service attack (DoS attack), prohibiting a node’s keys on any DERP servers by forcing disconnects of meshed DERP servers by using the &lt;a href=&quot;https://pkg.go.dev/tailscale.com/derp#Client.ClosePeer&quot;&gt;ClosePeer&lt;/a&gt; API.&lt;/p&gt;
&lt;p&gt;We have no evidence to indicate any abuse of this issue.&lt;/p&gt;
&lt;h4&gt;What do I need to do?&lt;/h4&gt;
&lt;p&gt;If you operate your own custom DERP servers in a mesh setup, you should update to the latest version and rotate any mesh keys that were previously in use.&lt;/p&gt;
</description>
        </item>
        <item>
            <title>TS-2025-002</title>
            <link>https://tailscale.com/security-bulletins/#ts-2025-002</link>
            <guid>https://tailscale.com/security-bulletins/#ts-2025-002</guid>
            <pubDate>Thu, 15 May 2025 00:00:00 GMT</pubDate>
            <description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;Description&lt;/em&gt;&lt;/strong&gt;: Privilege escalation in proxy-to-grafana via header spoofing&lt;/p&gt;
&lt;h4&gt;What happened?&lt;/h4&gt;
&lt;p&gt;The Tailscale &lt;a href=&quot;/kb/1523/grafana&quot;&gt;Grafana proxy&lt;/a&gt; is a HTTP reverse proxy for Grafana that annotates requests with &lt;code&gt;X-Webauth-*&lt;/code&gt; headers bearing the requesting user&#039;s &lt;a href=&quot;/kb/1080/cli#whois&quot;&gt;whois&lt;/a&gt;-based Tailscale identity.&lt;/p&gt;
&lt;p&gt;The Grafana proxy is intended to be used in combination with &lt;a href=&quot;https://grafana.com/docs/grafana/latest/setup-grafana/configure-security/configure-authentication/auth-proxy/#login-token-and-session-cookie&quot;&gt;Grafana&#039;s session-based authentication&lt;/a&gt; using cookies issued in response to requests made to &lt;code&gt;/login&lt;/code&gt; to authenticate subsequent requests to other endpoints.&lt;/p&gt;
&lt;p&gt;When configured to use session-based authentication, Grafana&#039;s &lt;code&gt;/api/&lt;/code&gt; routes will &lt;strong&gt;continue to accept&lt;/strong&gt; &lt;code&gt;X-Webauth-*&lt;/code&gt; headers for authentication. Previous versions of the Grafana proxy did not strip these &lt;code&gt;X-Webauth-*&lt;/code&gt; headers from API requests allowing them to be forged by a malicious tailnet node.&lt;/p&gt;
&lt;p&gt;The issue was present since the initial release of the Grafana proxy, and was patched on May 15th, 2025. The Grafana proxy now strips &lt;code&gt;X-Webauth-*&lt;/code&gt; headers from all incoming requests.&lt;/p&gt;
&lt;h4&gt;Who was affected?&lt;/h4&gt;
&lt;p&gt;Tailnets using Grafana in combination with the Grafana proxy to authenticate users.&lt;/p&gt;
&lt;h4&gt;What was the impact?&lt;/h4&gt;
&lt;p&gt;Grafana instances protected by the Grafana proxy would have been vulnerable to privilege escalation via HTTP request header forgery from members of their tailnet.&lt;/p&gt;
&lt;h4&gt;What do I need to do?&lt;/h4&gt;
&lt;p&gt;Update to the latest Grafana proxy by running &lt;code&gt;go install tailscale.com/cmd/proxy-to-grafana@latest&lt;/code&gt;&lt;/p&gt;
&lt;h4&gt;Credits&lt;/h4&gt;
&lt;p&gt;Thanks to Yeongrok Gim for reporting this issue.&lt;/p&gt;
</description>
        </item>
        <item>
            <title>TS-2025-001</title>
            <link>https://tailscale.com/security-bulletins/#ts-2025-001</link>
            <guid>https://tailscale.com/security-bulletins/#ts-2025-001</guid>
            <pubDate>Fri, 07 Mar 2025 00:00:00 GMT</pubDate>
            <description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;Description&lt;/em&gt;&lt;/strong&gt;: Potential for continued admin console access past inactivity timeout&lt;/p&gt;
&lt;h4&gt;What happened?&lt;/h4&gt;
&lt;p&gt;The &lt;a href=&quot;/kb/1461/admin-console-session-timeout&quot;&gt;admin console session timeout&lt;/a&gt; works by recording tailnet-specific activity timestamps on login and from browser requests triggered by user activity. Previously the admin console also erroneously considered the act of switching between multiple tailnets to be a login and recorded a fresh timestamp for the user in the destination tailnet while switching.&lt;/p&gt;
&lt;p&gt;For tailnets whose users were also &lt;a href=&quot;/kb/1271/invite-any-user&quot;&gt;members of other tailnets&lt;/a&gt; with less strict inactivity timeouts, these users may have been able to continue their access to the admin console for longer than expected if they switched between tailnets and did not time out of the less restrictive tailnet.&lt;/p&gt;
&lt;p&gt;The issue was present since inactivity timeout was initially released in August 2024, and was fixed in production on March 7th, 2025. A user who switches to a tailnet in which their session has already expired will be logged out and redirected to the login page.&lt;/p&gt;
&lt;h4&gt;Who was affected?&lt;/h4&gt;
&lt;p&gt;Tailnets with admin console session timeout configurations and users who are members of other tailnets with less strict session timeout configurations.&lt;/p&gt;
&lt;h4&gt;What was the impact?&lt;/h4&gt;
&lt;p&gt;Users of tailnets with strict admin console session timeouts may have been able to continue their access to the admin console past expected timeouts by switching to and from other tailnets in the admin console whose console configurations were less strict.&lt;/p&gt;
&lt;h4&gt;What do I need to do?&lt;/h4&gt;
&lt;p&gt;No action is required.&lt;/p&gt;
</description>
        </item>
        <item>
            <title>TS-2024-013</title>
            <link>https://tailscale.com/security-bulletins/#ts-2024-013</link>
            <guid>https://tailscale.com/security-bulletins/#ts-2024-013</guid>
            <pubDate>Wed, 04 Dec 2024 00:00:00 GMT</pubDate>
            <description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;Description&lt;/em&gt;&lt;/strong&gt;: Potential for Tailscale SSH recording failures&lt;/p&gt;
&lt;h4&gt;What happened?&lt;/h4&gt;
&lt;p&gt;Tailscale &lt;a href=&quot;/kb/1246/tailscale-ssh-session-recording&quot;&gt;SSH recording&lt;/a&gt; deployments that enforce SSH recording
using &lt;code&gt;enforceRecorder&lt;/code&gt; could fail to record session activity in several
situations.&lt;/p&gt;
&lt;h5&gt;Failure to write to the storage backend&lt;/h5&gt;
&lt;p&gt;If &lt;code&gt;tsrecorder&lt;/code&gt; instances were unable to write to their configured storage, SSH
sessions would be allowed to execute for a few seconds (typically under one or
two) while the first output bytes failed to write.&lt;/p&gt;
&lt;p&gt;A &lt;code&gt;tsrecorder&lt;/code&gt; instance can fail to write to its configured storage for many
reasons, including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Misconfigured IAM permissions when using S3 for storage.&lt;/li&gt;
&lt;li&gt;Misconfigured file permissions when using the local filesystem for storage.&lt;/li&gt;
&lt;li&gt;Insufficient free space when using the local filesystem for storage.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;tsrecorder&lt;/code&gt; now exercises the full set of required storage actions on startup.&lt;/p&gt;
&lt;h5&gt;Unreachable tsrecorder after a session is established&lt;/h5&gt;
&lt;p&gt;If &lt;code&gt;tsrecorder&lt;/code&gt; instances became unreachable after a session had started, the
SSH session would take several minutes to terminate. This could happen when
&lt;code&gt;tsrecorder&lt;/code&gt; went offline or when ACLs were updated to restrict access to
&lt;code&gt;tsrecorder&lt;/code&gt; nodes.&lt;/p&gt;
&lt;p&gt;The Tailscale client now detects &lt;code&gt;tsrecorder&lt;/code&gt; unreachability within 30 seconds
and terminates the connection.&lt;/p&gt;
&lt;h4&gt;Who was affected?&lt;/h4&gt;
&lt;p&gt;Users of Tailscale SSH recording with &lt;code&gt;enforceRecorder&lt;/code&gt; option and with
&lt;code&gt;tsrecorder&lt;/code&gt; and Tailscale client versions prior to 1.78.0.&lt;/p&gt;
&lt;h4&gt;What was the impact?&lt;/h4&gt;
&lt;p&gt;Users connecting over &lt;a href=&quot;kb/1193/tailscale-ssh&quot;&gt;Tailscale SSH&lt;/a&gt; to nodes that enforce session
recording via &lt;code&gt;enforceRecorder&lt;/code&gt; ACL flags would have been able to execute
commands briefly before having their access terminated due to recording
failures.&lt;/p&gt;
&lt;h4&gt;What do I need to do?&lt;/h4&gt;
&lt;p&gt;Update &lt;code&gt;tsrecorder&lt;/code&gt; instances and Tailscale clients to version 1.78.0 or later.&lt;/p&gt;
</description>
        </item>
        <item>
            <title>TS-2024-012</title>
            <link>https://tailscale.com/security-bulletins/#ts-2024-012</link>
            <guid>https://tailscale.com/security-bulletins/#ts-2024-012</guid>
            <pubDate>Wed, 02 Oct 2024 00:00:00 GMT</pubDate>
            <description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;Description&lt;/em&gt;&lt;/strong&gt;: Tailscale Funnel abused for phishing&lt;/p&gt;
&lt;h4&gt;What happened?&lt;/h4&gt;
&lt;p&gt;A malicious user abused &lt;a href=&quot;/kb/1223/funnel&quot;&gt;Tailscale Funnel&lt;/a&gt; to host a phishing page
targeting Facebook users. This user created multiple free Tailscale accounts to
use as an obfuscation/anonymity proxy for their VPS instance hosting the
phishing page.&lt;/p&gt;
&lt;p&gt;We received the first report about a phishing page on September 23rd, 2024, and
took down the Funnel page the same day. We received the second report on October
1st, 2024, for the same phishing page on a different Tailscale account. We took
down the second page, added detection for new similar pages, and repeatedly
shut down new attacker accounts as they were created. After a few more
attempts, the attacker stopped creating new accounts.&lt;/p&gt;
&lt;h4&gt;Who was affected?&lt;/h4&gt;
&lt;p&gt;232 unique IP addresses accessed the attacker&#039;s Funnel nodes. Of those, 87 IP addresses made more
than one request, suggesting a possible phishing form submission.&lt;/p&gt;
&lt;h4&gt;What was the impact?&lt;/h4&gt;
&lt;p&gt;Some Facebook users could have been phished for their credentials. Since
Tailscale Funnel proxies can only see encrypted TLS traffic, we cannot confirm
whether anyone was successfully phished.&lt;/p&gt;
&lt;h4&gt;What do I need to do?&lt;/h4&gt;
&lt;p&gt;Don&#039;t use Tailscale Funnel for phishing.&lt;/p&gt;
</description>
        </item>
        <item>
            <title>TS-2024-011</title>
            <link>https://tailscale.com/security-bulletins/#ts-2024-011</link>
            <guid>https://tailscale.com/security-bulletins/#ts-2024-011</guid>
            <pubDate>Mon, 22 Jul 2024 00:00:00 GMT</pubDate>
            <description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;Description&lt;/em&gt;&lt;/strong&gt;: SCIM group name disclosure via the ACL editor&lt;/p&gt;
&lt;h4&gt;What happened?&lt;/h4&gt;
&lt;p&gt;The &lt;a href=&quot;/kb/1338/acl-edit&quot;&gt;ACL editor&lt;/a&gt; in the admin console did not check &lt;a href=&quot;/kb/1290/user-group-provisioning&quot;&gt;SCIM&lt;/a&gt;
group names in the ACL rules against the tailnet name. This allowed tailnet A
to use SCIM groups from tailnet B in their ACL rules. A malicious user in
tailnet A could not gain access to target tailnet B this way. However, they
could use the fact that ACLs get saved without warnings to learn about valid
SCIM group names in other tailnets.&lt;/p&gt;
&lt;p&gt;This issue was fixed on July 19th, 2024. A user trying to save ACLs with SCIM
group names from other tailnets will always receive a warning that these groups
do not exist, even if they do exist in other tailnets.&lt;/p&gt;
&lt;h4&gt;Who was affected?&lt;/h4&gt;
&lt;p&gt;None of the existing tailnets&#039; ACLs appear to use SCIM group names from other
tailnets maliciously. A handful of customers used the wrong SCIM group names
from their production tailnets in their test tailnets by accident.&lt;/p&gt;
&lt;h4&gt;What was the impact?&lt;/h4&gt;
&lt;p&gt;A malicious user could learn about SCIM group names used in other tailnets.&lt;/p&gt;
&lt;h4&gt;What do I need to do?&lt;/h4&gt;
&lt;p&gt;No action is required.&lt;/p&gt;
</description>
        </item>
        <item>
            <title>TS-2024-010</title>
            <link>https://tailscale.com/security-bulletins/#ts-2024-010</link>
            <guid>https://tailscale.com/security-bulletins/#ts-2024-010</guid>
            <pubDate>Fri, 19 Jul 2024 00:00:00 GMT</pubDate>
            <description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;Description&lt;/em&gt;&lt;/strong&gt;: Accidental ACL edits due to browser caching&lt;/p&gt;
&lt;h4&gt;What happened?&lt;/h4&gt;
&lt;p&gt;When switching tailnets in the admin console, an &lt;a href=&quot;/kb/1138/user-roles#admin&quot;&gt;Admin&lt;/a&gt; user
could overwrite the &lt;a href=&quot;/kb/1018/acls&quot;&gt;ACLs&lt;/a&gt; of one tailnet with pending changes to ACLs
from another tailnet.&lt;/p&gt;
&lt;p&gt;When a user has unsaved ACL changes in the admin console, those changes are
cached in browser storage. If this user is a member of multiple tailnets,
tailnet A and tailnet B, and is editing ACLs for tailnet A, using the tailnet
switcher in the top-right corner of the page would not clear the cached ACL
changes correctly. In some rare cases, saving ACLs of tailnet B after the
switch would use the cached ACL contents from tailnet A.&lt;/p&gt;
&lt;p&gt;A user can be an Admin in multiple tailnets when they use GitHub to log in, and are a member of GitHub organizations, or the user is &lt;a href=&quot;/kb/1271/invite-any-user&quot;&gt;invited&lt;/a&gt; to another tailnet and granted the Admin role.&lt;/p&gt;
&lt;p&gt;Tailnet switching in the admin console was added on May 22nd, 2023. We fixed
this bug on July 17th, 2024.&lt;/p&gt;
&lt;h4&gt;Who was affected?&lt;/h4&gt;
&lt;p&gt;Any user who is an Admin in multiple tailnets and edited ACLs in the admin
console between May 22, 2023 and July 17th, 2024 could trigger this bug after
switching the active tailnet.&lt;/p&gt;
&lt;h4&gt;What was the impact?&lt;/h4&gt;
&lt;p&gt;An Admin user could overwrite the ACLs of one tailnet with ACLs from another
tailnet.&lt;/p&gt;
&lt;h4&gt;What do I need to do?&lt;/h4&gt;
&lt;p&gt;If you are an Admin of multiple tailnets using the same login name, review the
ACLs in your tailnets for correctness.&lt;/p&gt;
</description>
        </item>
        <item>
            <title>TS-2024-009</title>
            <link>https://tailscale.com/security-bulletins/#ts-2024-009</link>
            <guid>https://tailscale.com/security-bulletins/#ts-2024-009</guid>
            <pubDate>Thu, 27 Jun 2024 00:00:00 GMT</pubDate>
            <description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;Description&lt;/em&gt;&lt;/strong&gt;: Potential for API credential disclosure over plaintext HTTP&lt;/p&gt;
&lt;h4&gt;What happened?&lt;/h4&gt;
&lt;p&gt;The &lt;a href=&quot;/kb/1101/api&quot;&gt;Tailscale API&lt;/a&gt; is primarily accessible over TLS-encrypted HTTP at
&lt;code&gt;api.tailscale.com&lt;/code&gt;. It also has a limited plaintext HTTP handler to serve HTTP
to HTTPS redirects.&lt;/p&gt;
&lt;p&gt;Browsers that connect over plaintext HTTP do not send cookies marked as &lt;code&gt;Secure&lt;/code&gt;
to prevent them from being disclosed to network intermediaries.&lt;/p&gt;
&lt;p&gt;However, API clients that connect using plaintext HTTP and send requests
with authentication tokens in headers have no such protections to prevent
disclosure.&lt;/p&gt;
&lt;p&gt;Before June 26, 2024, the Tailscale API did not reject credentialed plaintext
API requests and instead served them HTTP 302 redirects as it would to browsers.
Typical HTTP client libraries handle redirects transparently, and consequently, the user
would not necessarily know their credentials had been exposed.&lt;/p&gt;
&lt;p&gt;Starting on June 26, 2024, the Tailscale API now returns errors for all plaintext
HTTP requests that include credentials. Additionally, the Tailscale API now
automatically revokes API keys that it observes sent over HTTP and notifies
Tailnet security owners of this action.&lt;/p&gt;
&lt;h4&gt;Who was affected?&lt;/h4&gt;
&lt;p&gt;Any Tailscale API client that connected over plaintext HTTP using credentials
before June 26, 2024.&lt;/p&gt;
&lt;h4&gt;What was the impact?&lt;/h4&gt;
&lt;p&gt;API clients that connected over plaintext HTTP before June 26, 2024 would have
exposed their credentials to network intermediaries, risking them to theft and
replay.&lt;/p&gt;
&lt;h4&gt;What do I need to do?&lt;/h4&gt;
&lt;p&gt;No action is needed at this time.&lt;/p&gt;
&lt;h4&gt;Credits&lt;/h4&gt;
&lt;p&gt;Thanks to &lt;a href=&quot;https://jviide.iki.fi/&quot;&gt;Joachim Viide&lt;/a&gt; for reporting this issue.&lt;/p&gt;
</description>
        </item>
        <item>
            <title>TS-2024-008</title>
            <link>https://tailscale.com/security-bulletins/#ts-2024-008</link>
            <guid>https://tailscale.com/security-bulletins/#ts-2024-008</guid>
            <pubDate>Fri, 14 Jun 2024 00:00:00 GMT</pubDate>
            <description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;Description&lt;/em&gt;&lt;/strong&gt;: Partial loss of audit and network flow logs&lt;/p&gt;
&lt;h5&gt;What happened?&lt;/h5&gt;
&lt;p&gt;An integer overflow in our logs processing service led to some customer logs
to be non-deterministically dropped with a probability of 14%.
The overflow condition first exhibited on June 7th, 2024 at 20:45 UTC and
was detected and resolved by June 14th, 2024 at 00:40 UTC.&lt;/p&gt;
&lt;h5&gt;Who was affected?&lt;/h5&gt;
&lt;p&gt;All tailnets that rely on audit and network flow logs have been affected.&lt;/p&gt;
&lt;h5&gt;What was the impact?&lt;/h5&gt;
&lt;p&gt;The 14% chance of dropped log entries affects storing of logs such as
&lt;a href=&quot;/kb/1203/audit-logging&quot;&gt;configuration audit logs&lt;/a&gt; and
&lt;a href=&quot;/kb/1219/network-flow-logs&quot;&gt;network flow logs&lt;/a&gt;.
While logs can be retrieved for the timeframe that the overflow bug was active,
some fraction of the entries may be missing.&lt;/p&gt;
&lt;h5&gt;What do I need to do?&lt;/h5&gt;
&lt;p&gt;No action is needed at this time.&lt;/p&gt;
&lt;p&gt;We fixed the bug, added additional error checking, and
deployed both to the logs processing service.&lt;/p&gt;
</description>
        </item>
        <item>
            <title>TS-2024-007</title>
            <link>https://tailscale.com/security-bulletins/#ts-2024-007</link>
            <guid>https://tailscale.com/security-bulletins/#ts-2024-007</guid>
            <pubDate>Wed, 12 Jun 2024 00:00:00 GMT</pubDate>
            <description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;Description&lt;/em&gt;&lt;/strong&gt;: Incorrect DNS resolution with split DNS on macOS and iOS&lt;/p&gt;
&lt;h5&gt;What happened?&lt;/h5&gt;
&lt;p&gt;On Tailscale macOS and iOS clients with split DNS configurations (like &lt;a href=&quot;/kb/1281/app-connectors&quot;&gt;App
Connectors&lt;/a&gt; or &lt;a href=&quot;/kb/1054/dns#nameservers&quot;&gt;Restricted
Nameservers&lt;/a&gt;), lookups of bare tailnet node names
could in rare cases return incorrect answers. For example, if a node &lt;code&gt;mynode&lt;/code&gt;
and an App Connector for &lt;code&gt;*.example.com&lt;/code&gt; exist on a tailnet, DNS lookups for
&lt;code&gt;mynode&lt;/code&gt; could return the answer for &lt;code&gt;mynode.example.com&lt;/code&gt; instead of the local
tailnet IP. This mis-configuration is intermittent, and most often triggers for
a few seconds when switching device networks (for example from Wi-Fi to a phone
hotspot).&lt;/p&gt;
&lt;p&gt;We fixed this bug in client version 1.68.0, and notified the security contacts
of potentially affected tailnets over email.&lt;/p&gt;
&lt;h5&gt;Who was affected?&lt;/h5&gt;
&lt;p&gt;All tailnets that use App Connectors or Restricted Domains, and have macOS or
iOS nodes could have been affected.&lt;/p&gt;
&lt;p&gt;This bug is usually intermittently-triggered when switching networks in our
experience. Only lookups of bare domains, like &lt;code&gt;mynode&lt;/code&gt; but not
&lt;code&gt;mynode.mytailnet.ts.net&lt;/code&gt;, are at risk.&lt;/p&gt;
&lt;p&gt;Note that not all split DNS domains are dangerous. Only domains where an
attacker can choose their FQDN to match a node name, and controls the
destination to receive non-TLS traffic could be abused.&lt;/p&gt;
&lt;p&gt;We are not aware of any active exploitation of this vulnerability.&lt;/p&gt;
&lt;h5&gt;What was the impact?&lt;/h5&gt;
&lt;p&gt;For a split DNS domain &lt;code&gt;example.com&lt;/code&gt;, an attacker with control over
&lt;code&gt;mynode.example.com&lt;/code&gt; can impersonate a non-TLS server running on node &lt;code&gt;mynode&lt;/code&gt;
on the tailnet. This attack is opportunistic and passive - it relies on the
user connecting to &lt;code&gt;mynode&lt;/code&gt; using its bare domain and cannot be forced
remotely.&lt;/p&gt;
&lt;h5&gt;What do I need to do?&lt;/h5&gt;
&lt;p&gt;Upgrade your macOS and iOS clients to 1.68.0 or later.&lt;/p&gt;
</description>
        </item>
        <item>
            <title>TS-2024-006</title>
            <link>https://tailscale.com/security-bulletins/#ts-2024-006</link>
            <guid>https://tailscale.com/security-bulletins/#ts-2024-006</guid>
            <pubDate>Wed, 22 May 2024 00:00:00 GMT</pubDate>
            <description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;Description&lt;/em&gt;&lt;/strong&gt;: Tailnet SSO provider migration impacting invited users&lt;/p&gt;
&lt;h5&gt;What happened?&lt;/h5&gt;
&lt;p&gt;When tailnets are created, they are associated with an &lt;a href=&quot;/kb/1013/sso-providers&quot;&gt;SSO
provider&lt;/a&gt; such as Google or Microsoft, requiring all members
of the tailnet to authenticate using that provider. In addition, Tailscale also
supports inviting &lt;a href=&quot;/kb/1271/invite-any-user&quot;&gt;external users&lt;/a&gt; to tailnets to allow
sharing with contractors, friends, or other collaborators who may use a
different SSO provider than that of the inviting tailnet to log in to
Tailscale.&lt;/p&gt;
&lt;p&gt;Customers with an existing tailnet who wish to use a different SSO provider can
request to migrate via customer support. The internal tool used to perform these
migrations previously migrated the SSO provider for
&lt;em&gt;all members&lt;/em&gt; of a tailnet, including those of invited external members.&lt;/p&gt;
&lt;p&gt;We fixed this internal tool to migrate direct tailnet members, excluding invited
members on May 20, 2024.&lt;/p&gt;
&lt;p&gt;We reverted the erroneous SSO provider changes and notified affected
users on May 23, 2024.&lt;/p&gt;
&lt;h5&gt;Who was affected?&lt;/h5&gt;
&lt;p&gt;55 users were invited external members of tailnets whose SSO provider was
subsequently migrated prior to May 20, 2024. We have notified the security
contacts for the tailnets where users were affected by this incident.&lt;/p&gt;
&lt;h5&gt;What was the impact?&lt;/h5&gt;
&lt;p&gt;Users whose SSO providers were erroneously migrated would have been
unable to log in to Tailscale during this time, as their SSO source
would differ from the one on record.&lt;/p&gt;
&lt;h5&gt;What do I need to do?&lt;/h5&gt;
&lt;p&gt;No action is needed at this time.&lt;/p&gt;
</description>
        </item>
        <item>
            <title>TS-2024-005</title>
            <link>https://tailscale.com/security-bulletins/#ts-2024-005</link>
            <guid>https://tailscale.com/security-bulletins/#ts-2024-005</guid>
            <pubDate>Wed, 08 May 2024 00:00:00 GMT</pubDate>
            <description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;Description&lt;/em&gt;&lt;/strong&gt;: Insufficient inbound packet filtering in subnet routers and exit nodes&lt;/p&gt;
&lt;h5&gt;What happened?&lt;/h5&gt;
&lt;p&gt;In Tailscale versions earlier than 1.66.0, &lt;a href=&quot;/kb/1103/exit-nodes&quot;&gt;exit nodes&lt;/a&gt;, &lt;a href=&quot;/kb/1019/subnets&quot;&gt;subnet
routers&lt;/a&gt;, and &lt;a href=&quot;/kb/1281/app-connectors&quot;&gt;app connectors&lt;/a&gt;, could
allow inbound connections to other tailnet nodes from their local area network
(LAN). This vulnerability only affects Linux exit nodes, subnet routers, and
app connectors in tailnets where &lt;a href=&quot;/kb/1018/acls&quot;&gt;ACLs&lt;/a&gt; allow &lt;code&gt;&quot;src&quot;: &quot;*&quot;&lt;/code&gt;, such as
with &lt;a href=&quot;/kb/1192/acl-samples#allow-all-default-acl&quot;&gt;default ACLs&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Tailscale version 1.66.0 fixes the vulnerability. Additionally, a server-side
update changes the interpretation of &lt;code&gt;&quot;src&quot;: &quot;*&quot;&lt;/code&gt; to mitigate the issue
specifically for exit nodes.&lt;/p&gt;
&lt;p&gt;Special thanks to &lt;a href=&quot;https://www.linkedin.com/in/hakan-ergan/&quot;&gt;Hakan Ergan&lt;/a&gt; for reporting a similar
concern that led us to discover this vulnerability.&lt;/p&gt;
&lt;h5&gt;Who was affected?&lt;/h5&gt;
&lt;p&gt;This affected the following nodes using Tailscale version 1.65 or earlier:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Exit nodes on Linux&lt;/li&gt;
&lt;li&gt;Subnet routers on Linux&lt;/li&gt;
&lt;li&gt;App connectors on Linux&lt;/li&gt;
&lt;li&gt;Regular nodes on all platforms connecting to the above nodes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tailnets with custom ACLs that do not use &lt;code&gt;&quot;src&quot;: &quot;*&quot;&lt;/code&gt; or any other value that
includes external IPs were not affected.&lt;/p&gt;
&lt;p&gt;We are not aware of any active exploitation of this vulnerability.&lt;/p&gt;
&lt;h5&gt;What was the impact?&lt;/h5&gt;
&lt;p&gt;Devices outside of the tailnet, but on the same LAN as an exit node, subnet
router, or app connector could connect to ports on tailnet nodes that are
allowed by ACLs.&lt;/p&gt;
&lt;h5&gt;What do I need to do?&lt;/h5&gt;
&lt;p&gt;Upgrade the following nodes to 1.66.0 or later:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Subnet routers on Linux&lt;/li&gt;
&lt;li&gt;App connectors on Linux&lt;/li&gt;
&lt;li&gt;Regular nodes on all platforms that use exit nodes &lt;a href=&quot;/kb/1084/sharing#sharing--exit-nodes&quot;&gt;shared from other
tailnets&lt;/a&gt; or &lt;a href=&quot;/kb/1258/mullvad-exit-nodes&quot;&gt;Mullvad exit nodes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We recommend enabling auto-updates and updating all nodes to the latest
version, but it is not required to mitigate this vulnerability.&lt;/p&gt;
&lt;p&gt;A server-side change mitigated this vulnerability for other types of affected
nodes.&lt;/p&gt;
&lt;h5&gt;Technical details&lt;/h5&gt;
&lt;p&gt;Below, we refer to exit nodes, subnet routers, and app connectors as
&lt;em&gt;packet-forwarding nodes&lt;/em&gt;, because the details apply to all of them. Specific
types of packet-forwarding nodes are mentioned explicitly where their behavior
is different.&lt;/p&gt;
&lt;p&gt;Before 1.66.0, packets between regular nodes and destination hosts behind
packet-forwarding nodes were filtered based on source/destination IP as
specified in tailnet ACLs. Specifying &lt;code&gt;&quot;src&quot;: &quot;*&quot;&lt;/code&gt; in ACLs is equivalent to
&lt;code&gt;&quot;src&quot;: [&quot;0.0.0.0/0&quot;, &quot;::/0&quot;]&lt;/code&gt;, meaning any IP address. This allowed source IPs
outside of the tailnet to send packets to tailnet nodes via a packet-forwarding
node. This could be abused by malicious LAN hosts to connect into the tailnet
using a known tailnet node IP.&lt;/p&gt;
&lt;p&gt;The attack only works on a LAN because:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;it relies on next-hop routing, which only works in a LAN&lt;/li&gt;
&lt;li&gt;destination IPs are in the subnet router&#039;s approved range, or in the &lt;a href=&quot;/kb/1015/100.x-addresses&quot;&gt;CGNAT
range&lt;/a&gt; &lt;code&gt;100.64.0.0/10&lt;/code&gt;, which are not routable over the Internet.&lt;/li&gt;
&lt;/ul&gt;
&lt;h6&gt;Attacks&lt;/h6&gt;
&lt;p&gt;Here are several attack scenarios.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Packet-forwarding node on an untrusted LAN.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/files/images/security-bulletins/2024-05-08-01.svg&quot; alt=&quot;diagram showing a LAN machine connecting to a victim node&quot;&gt;&lt;/p&gt;
&lt;p&gt;A malicious host &lt;code&gt;10.0.0.1&lt;/code&gt; on the same LAN as the packet-forwarding node
&lt;code&gt;10.0.0.2&lt;/code&gt; could craft packets with destination IP of a tailnet node
&lt;code&gt;100.64.0.1&lt;/code&gt; (using a command like &lt;code&gt;ip route add 100.64.0.1/32 via 10.0.0.2 dev eth0&lt;/code&gt;) and send them to the packet-forwarding node. The packet-forwarding node
would accept them and forward them to the victim node. The victim node would
see a packet from &lt;code&gt;10.0.0.1&lt;/code&gt; and accept it if the tailnet ACLs allow this
source IP.&lt;/p&gt;
&lt;p&gt;This scenario is very similar to a legitimate use-case of
&lt;a href=&quot;/kb/1214/site-to-site&quot;&gt;site-to-site&lt;/a&gt; networking, where two subnets are bridged using
Tailscale subnet routers and the flag &lt;code&gt;--snat-subnet-routes=false&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Malicious shared exit node&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/files/images/security-bulletins/2024-05-08-02.svg&quot; alt=&quot;diagram showing a malicious exit node connecting a the victim node&quot;&gt;&lt;/p&gt;
&lt;p&gt;A malicious exit node &lt;code&gt;100.64.0.4&lt;/code&gt; from tailnet A could craft packets with
destination IP of tailnet B node &lt;code&gt;100.64.0.3&lt;/code&gt; and any source IP other than
&lt;code&gt;100.64.0.4&lt;/code&gt;. Due to the built-in &lt;a href=&quot;/kb/1084/sharing#quarantine&quot;&gt;quarantining&lt;/a&gt; of shared
nodes, packets from &lt;code&gt;100.64.0.4&lt;/code&gt; are rejected.&lt;/p&gt;
&lt;h6&gt;Mitigations&lt;/h6&gt;
&lt;p&gt;We implemented 3 separate mitigations for these attacks.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Redefine &lt;code&gt;&quot;src&quot;: &quot;*&quot;&lt;/code&gt; in ACLs&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;While &lt;code&gt;*&lt;/code&gt; is a convenient shorthand in ACLs, Tailscale users almost never need
to allow connections from any IP. In most cases users intend &lt;code&gt;*&lt;/code&gt; as &quot;all other
nodes in my tailnet&quot;. As a mitigation for this vulnerability, we redefined &lt;code&gt;*&lt;/code&gt;
in &lt;code&gt;src&lt;/code&gt; section of ACLs to include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;all tailnet nodes&lt;/li&gt;
&lt;li&gt;all IPs from approved subnet routes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The inclusion of IPs from approved subnet routes is needed for the site-to-site
networking setup.&lt;/p&gt;
&lt;p&gt;For users that need the old semantics of &lt;code&gt;*&lt;/code&gt; we added a new
&lt;a href=&quot;/kb/1337/acl-syntax#src&quot;&gt;&lt;code&gt;autogroup:danger-all&lt;/code&gt;&lt;/a&gt;, which matches the old definition of &lt;code&gt;*&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Stateful packet filtering on packet-forwarding nodes&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;On Linux packet-forwarding nodes we added stateful packet filtering. This means
that these nodes keep track of forwarded connections and only allow return
packets for existing outbound connections. Inbound packets that don&#039;t belong to
an existing connection are dropped.&lt;/p&gt;
&lt;p&gt;Because routing is implemented differently on non-Linux platforms, this
mitigation is only necessary on Linux.&lt;/p&gt;
&lt;p&gt;Stateful filtering is enabled by default, except for existing subnet routers
that set &lt;code&gt;--snat-subnet-routes=false&lt;/code&gt;. You can disable stateful filtering using
&lt;code&gt;tailscale up --stateful-filtering=false&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Client-side quarantining of shared nodes&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;/kb/1084/sharing#quarantine&quot;&gt;Quarantining&lt;/a&gt; of shared nodes was implemented by a packet
filter sent from the Tailscale control plane. This packet filter instructs
nodes to drop any inbound connections from the source IP of the shared node. To
prevent malicious shared exit nodes from crafting packets with different source
IPs, additional client-side quarantining logic was added. The 1.66.0 and later
clients reject all inbound connections from quarantined nodes, regardless of
their source IP. This is similar to how the &lt;a href=&quot;/kb/1072/client-preferences#allow-incoming-connections&quot;&gt;&quot;shields up&quot;&lt;/a&gt; mode
works within the tailnet.&lt;/p&gt;
</description>
        </item>
        <item>
            <title>TS-2024-004</title>
            <link>https://tailscale.com/security-bulletins/#ts-2024-004</link>
            <guid>https://tailscale.com/security-bulletins/#ts-2024-004</guid>
            <pubDate>Mon, 06 May 2024 00:00:00 GMT</pubDate>
            <description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;Description&lt;/em&gt;&lt;/strong&gt;: Unclear network flow logs collection status for alpha testers.&lt;/p&gt;
&lt;h5&gt;What happened?&lt;/h5&gt;
&lt;p&gt;When &lt;a href=&quot;/kb/1219/network-flow-logs&quot;&gt;network flow logs&lt;/a&gt; first entered private alpha, tailnet admins who were interested in testing out the feature had to request to be manually opted into the alpha testing track. When we subsequently introduced admin console settings for self-serve network flow logs for the public beta launch, these settings were not properly connected to the alpha testing track. As a result, for the small number of tailnets that volunteered for alpha testing, the admin console interface did not show that logs were still being collected as initially requested.&lt;/p&gt;
&lt;p&gt;We fixed this bug on April 25, 2024 and the admin console now correctly shows the status of network flow logs for all users.&lt;/p&gt;
&lt;h5&gt;Who was affected?&lt;/h5&gt;
&lt;p&gt;15 tailnets were opted into network flow log collection through the alpha testing track that did not re-enroll through the admin console. We notified security contacts for the affected tailnets about this bug.&lt;/p&gt;
&lt;h5&gt;What was the impact?&lt;/h5&gt;
&lt;p&gt;The admin panel did not reflect the correct status for network flow log collection for affected tailnets, and admins of these tailnets may not have realized that network flow logs were still being collected.&lt;/p&gt;
&lt;h5&gt;What do I need to do?&lt;/h5&gt;
&lt;p&gt;No action is needed at this time.&lt;/p&gt;
</description>
        </item>
        <item>
            <title>TS-2024-003</title>
            <link>https://tailscale.com/security-bulletins/#ts-2024-003</link>
            <guid>https://tailscale.com/security-bulletins/#ts-2024-003</guid>
            <pubDate>Tue, 23 Apr 2024 00:00:00 GMT</pubDate>
            <description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;Description&lt;/em&gt;&lt;/strong&gt;: Bug in SSH check mode with &lt;code&gt;checkPeriod&lt;/code&gt; set to &lt;code&gt;0s&lt;/code&gt;.&lt;/p&gt;
&lt;h5&gt;What happened?&lt;/h5&gt;
&lt;p&gt;&lt;a href=&quot;/kb/1193/tailscale-ssh#configure-tailscale-ssh-with-check-mode&quot;&gt;Check mode&lt;/a&gt; in Tailscale SSH forces an SSH client to periodically
re-authenticate when connecting to SSH servers. The period is configured via
the &lt;code&gt;checkPeriod&lt;/code&gt; attribute in Tailscale ACLs, and defaults to 12 hours.&lt;/p&gt;
&lt;p&gt;A bug in ACL parsing interpreted &lt;code&gt;&quot;checkPeriod&quot;: &quot;0s&quot;&lt;/code&gt; as unset, and used the
default period of 12 hours instead.&lt;/p&gt;
&lt;p&gt;We deployed a fix for the bug in ACL parsing logic on 2024-04-23. SSH clients
in tailnets that set &lt;code&gt;&quot;checkPeriod&quot;: &quot;0s&quot;&lt;/code&gt; are now correctly prompted for
re-authentication on every connection.&lt;/p&gt;
&lt;p&gt;Note that a special value &lt;code&gt;&quot;checkPeriod&quot;: &quot;always&quot;&lt;/code&gt; is the documented
recommended way to achieve this behavior.&lt;/p&gt;
&lt;p&gt;We thank &lt;a href=&quot;https://twitter.com/plaidfinch&quot;&gt;Finch&lt;/a&gt; for reporting this issue.&lt;/p&gt;
&lt;h5&gt;Who was affected?&lt;/h5&gt;
&lt;p&gt;17 tailnets use Tailscale SSH with &lt;code&gt;&quot;action&quot;: &quot;check&quot;&lt;/code&gt; and &lt;code&gt;&quot;checkPeriod&quot;: &quot;0s&quot;&lt;/code&gt;. We notified security contacts for the affected tailnets about this bug.&lt;/p&gt;
&lt;h5&gt;What was the impact?&lt;/h5&gt;
&lt;p&gt;SSH clients in the affected tailnets were prompted to re-authenticate every 12
hours, instead of during each connection as intended by the tailnet
administrators.&lt;/p&gt;
&lt;h5&gt;What do I need to do?&lt;/h5&gt;
&lt;p&gt;No action is needed at this time.&lt;/p&gt;
</description>
        </item>
        <item>
            <title>TS-2024-002</title>
            <link>https://tailscale.com/security-bulletins/#ts-2024-002</link>
            <guid>https://tailscale.com/security-bulletins/#ts-2024-002</guid>
            <pubDate>Tue, 30 Jan 2024 00:00:00 GMT</pubDate>
            <description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;Description&lt;/em&gt;&lt;/strong&gt;: We resolved an information disclosure vulnerability in the
&lt;a href=&quot;/kb/1073/hello&quot;&gt;hello.ts.net&lt;/a&gt; service.&lt;/p&gt;
&lt;h5&gt;What happened?&lt;/h5&gt;
&lt;p&gt;On January 15 2024, we became aware of a potential information disclosure
vulnerability in the &lt;code&gt;hello.ts.net&lt;/code&gt; service, which could show the identity of a
different Tailscale user when loaded. The &lt;code&gt;hello.ts.net&lt;/code&gt; service receives
identity information and public keys of nodes tied to their IP address. On
November 28 2023, we made a &lt;a href=&quot;/blog/choose-your-ip&quot;&gt;change&lt;/a&gt; to how IPs are assigned to
Tailscale nodes, making them globally non-unique. When the Tailscale service
assigned the same IP to multiple nodes, &lt;code&gt;hello.ts.net&lt;/code&gt; would receive identity
information for one of the nodes at random. We confirmed on January 26 2024
that, if one of the other nodes with that IP loaded &lt;code&gt;hello.ts.net&lt;/code&gt;, they would
see another user&#039;s name, email, and hostname.&lt;/p&gt;
&lt;p&gt;The Tailscale Security Team immediately took &lt;code&gt;hello.ts.net&lt;/code&gt; offline while the
fix was in progress. The issue has been fixed and the &lt;code&gt;hello.ts.net&lt;/code&gt; service
was restored on January 29 2024.&lt;/p&gt;
&lt;h5&gt;Who was affected?&lt;/h5&gt;
&lt;p&gt;The incident was isolated to 10 users across 9 tailnets who could have had
their information leaked to other Tailscale users. We notified the tailnet
security contacts directly in accordance with our obligations under applicable
data privacy laws. Due to the random nature of the vulnerability, we cannot
confirm that all of those users were indeed affected.&lt;/p&gt;
&lt;p&gt;Regular &lt;a href=&quot;/kb/1084/sharing&quot;&gt;shared nodes&lt;/a&gt; always see unique node IPs and were not
vulnerable in a manner similar to &lt;code&gt;hello.ts.net&lt;/code&gt;.&lt;/p&gt;
&lt;h5&gt;What was the impact?&lt;/h5&gt;
&lt;p&gt;A small number of users had their name, email, and hostname potentially exposed
to other Tailscale users that had nodes sharing the same IP.&lt;/p&gt;
&lt;p&gt;In addition, the &lt;code&gt;hello.ts.net&lt;/code&gt; service was offline between January 26-29
2024. Several users reported being negatively impacted by this.&lt;/p&gt;
&lt;h5&gt;What do I need to do?&lt;/h5&gt;
&lt;p&gt;No action is needed at this time.&lt;/p&gt;
&lt;p&gt;If you have a dependency on &lt;code&gt;hello.ts.net&lt;/code&gt; as a probing target for Tailscale
connectivity, consider using &lt;a href=&quot;/kb/1073/hello#does-hellotsnet-have-a-reliability-guarantee&quot;&gt;a different probing
mechanism&lt;/a&gt;.&lt;/p&gt;
</description>
        </item>
        <item>
            <title>TS-2024-001</title>
            <link>https://tailscale.com/security-bulletins/#ts-2024-001</link>
            <guid>https://tailscale.com/security-bulletins/#ts-2024-001</guid>
            <pubDate>Mon, 08 Jan 2024 00:00:00 GMT</pubDate>
            <description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;Description&lt;/em&gt;&lt;/strong&gt;: On Windows before Tailscale version 1.52 and on Linux before
Tailscale 1.54, the &lt;code&gt;tailscale serve&lt;/code&gt; and &lt;code&gt;tailscale funnel&lt;/code&gt; features allowed
users to serve the contents of directories that their user account could not
access, but which the &lt;code&gt;tailscaled&lt;/code&gt; service process could.&lt;/p&gt;
&lt;h5&gt;What happened?&lt;/h5&gt;
&lt;p&gt;A user could escalate their own file read access by running, for example,
&lt;code&gt;tailscale.exe serve http / C:\&lt;/code&gt;, and then browsing to the local HTTP endpoint.&lt;/p&gt;
&lt;p&gt;The issue can also occur on Linux if the local administrator enabled an operator
user ID with &lt;code&gt;tailscale up --operator=$USER&lt;/code&gt;, as the &lt;code&gt;$USER&lt;/code&gt; account could
&lt;code&gt;serve&lt;/code&gt; itself files that it could not normally read.&lt;/p&gt;
&lt;h5&gt;Who is affected?&lt;/h5&gt;
&lt;p&gt;Owners of Windows deployments for which the users of Tailscale nodes do not also
have OS-level administrative access, and owners of Linux deployments where the
administrator enabled non-root &lt;code&gt;--operator&lt;/code&gt; access.&lt;/p&gt;
&lt;p&gt;This issue can only be triggered by a local user and cannot be triggered
remotely.&lt;/p&gt;
&lt;h5&gt;What is the impact?&lt;/h5&gt;
&lt;p&gt;This issue enables local privilege escalation (file read access). Access to
certain system files (such as &lt;code&gt;/etc/shadow&lt;/code&gt; on Linux) can then be used to obtain
full administrative control over the host.&lt;/p&gt;
&lt;h5&gt;What do I need to do?&lt;/h5&gt;
&lt;p&gt;On Windows 10 and later, upgrade to Tailscale 1.52 (&lt;a href=&quot;/changelog#2023-10-30-client&quot;&gt;released 30 October
2023&lt;/a&gt;) or later, which resolves the issue.&lt;/p&gt;
&lt;p&gt;On Windows 7 and 8, upgrade to Tailscale 1.44.3 (&lt;a href=&quot;/changelog#2024-01-08-client&quot;&gt;released 8 Jan
2024&lt;/a&gt;), which resolves the issue.&lt;/p&gt;
&lt;p&gt;On Linux, upgrade to 1.54 (&lt;a href=&quot;/changelog#2023-11-15-client&quot;&gt;released 15 November 2023&lt;/a&gt;) or later,
which resolves the issue.&lt;/p&gt;
&lt;p&gt;The best practice is to run the latest stable version, which as of this writing
is &lt;a href=&quot;/changelog#2023-12-15-client&quot;&gt;1.56.1&lt;/a&gt;. Consider turning on &lt;a href=&quot;/blog/auto-update-beta&quot;&gt;automatic updates&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Use &lt;a href=&quot;/kb/1223/funnel&quot;&gt;Tailscale ACLs&lt;/a&gt; to control the availability of Funnel.&lt;/p&gt;
</description>
        </item>
        <item>
            <title>TS-2023-009</title>
            <link>https://tailscale.com/security-bulletins/#ts-2023-009</link>
            <guid>https://tailscale.com/security-bulletins/#ts-2023-009</guid>
            <pubDate>Fri, 22 Dec 2023 00:00:00 GMT</pubDate>
            <description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;Description&lt;/em&gt;&lt;/strong&gt;: &lt;a href=&quot;https://trufflesecurity.com/blog/google-oauth-is-broken-sort-of/&quot;&gt;The OAuth implementation of Google Workspace&lt;/a&gt; allows for the creation of Google accounts associated with a given Workspace domain that are not actually controlled by that workspace, e.g. alice+foo@example.com. As a result, these accounts may be used to retain access to systems that use Google Workspace SSO login even after the original account has been deactivated or removed.&lt;/p&gt;
&lt;h5&gt;What happened?&lt;/h5&gt;
&lt;p&gt;Tailscale uses Google as one of the possible identity providers for creating and joining a tailnet. Users who have emails with the same domain name can automatically sign in using SSO and be added to the corresponding tailnet (unless &lt;a href=&quot;https://tailscale.com/kb/1239/user-approval&quot;&gt;user approval&lt;/a&gt; is turned on for the tailnet)​​. The OAuth vulnerability reported by Truffle Security means that it is possible for an attacker to create a new personal Google Account that is attached to an alias of their legitimate Workspace account. This new account will not register as being part of the domain&#039;s Workspace, and thus cannot be removed by its admins. However, if the attacker then uses the new, spoofed Google Account to log into Tailscale, we would have treated it as a legitimate user in the tailnet. Thus, users could remain connected to a tailnet using this spoofed account even if their primary Workspace account has been disabled, e.g. after employee termination.&lt;/p&gt;
&lt;p&gt;We became aware of the vulnerability on 2023-12-21 when its disclosure by Truffle Security was circulated widely. We deployed a remediation that prevents personal Google accounts from logging into tailnets associated with Workspace accounts on 2023-12-21.&lt;/p&gt;
&lt;h5&gt;Who is affected?&lt;/h5&gt;
&lt;p&gt;Everyone who uses Google Workspace to sign in.&lt;/p&gt;
&lt;h5&gt;What is the impact?&lt;/h5&gt;
&lt;p&gt;Tailnets that use Google Workspace as their SSO provider may have Tailscale users that do not have a corresponding user in the Google Workspace. Prior to 2023-12-21, this would have made it possible for those users to retain access to Tailscale after their SSO account was deleted. Following the remediation, these users can no longer login to Tailscale.&lt;/p&gt;
&lt;h5&gt;What do I need to do?&lt;/h5&gt;
&lt;p&gt;Tailscale admins should visit &lt;a href=&quot;https://login.tailscale.com/admin/users&quot;&gt;the Users page of the Tailscale admin console&lt;/a&gt; and audit the list of users to see if there are unknown addresses that should not be there. Admins can also &lt;a href=&quot;https://tailscale.com/kb/1229/export-user-list&quot;&gt;export this list of users&lt;/a&gt; as a CSV file to examine offline.&lt;/p&gt;
&lt;p&gt;For extra security, you can turn on &lt;a href=&quot;https://tailscale.com/kb/1239/user-approval&quot;&gt;user approval&lt;/a&gt; for your Tailnet so that every new user of Tailscale has to be manually approved by an admin. Note: this does not mitigate against situations where the attacker is themselves an admin of Tailscale.&lt;/p&gt;
</description>
        </item>
        <item>
            <title>TS-2023-008</title>
            <link>https://tailscale.com/security-bulletins/#ts-2023-008</link>
            <guid>https://tailscale.com/security-bulletins/#ts-2023-008</guid>
            <pubDate>Wed, 01 Nov 2023 00:00:00 GMT</pubDate>
            <description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;Description&lt;/em&gt;&lt;/strong&gt;: Privilege escalation bugs in the Tailscale
Kubernetes operator&#039;s API proxy allowed authenticated tailnet clients
to send Kubernetes API requests as the operator&#039;s service account.&lt;/p&gt;
&lt;p&gt;Tailscale Kubernetes operator version v1.53.37 fixes the issue and
users of the operator who enable the API proxy functionality should
update as described below.&lt;/p&gt;
&lt;h5&gt;What happened?&lt;/h5&gt;
&lt;p&gt;The Tailscale Kubernetes operator can optionally act as &lt;a href=&quot;/kb/1437/kubernetes-operator-api-server-proxy&quot;&gt;an API server
proxy&lt;/a&gt;
for the cluster&#039;s Kubernetes API. This proxy allows authenticated
tailnet users to use their tailnet identity in Kubernetes
authentication and RBAC rules. The API server proxy uses
&lt;a href=&quot;https://kubernetes.io/docs/reference/access-authn-authz/authentication/#user-impersonation&quot;&gt;impersonation
headers&lt;/a&gt;
to translate tailnet identities to Kubernetes identities.&lt;/p&gt;
&lt;p&gt;The operator prior to v1.53.37 has two bugs in the forwarding logic,
which affects different modes of operation:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;In the default proxy mode that applies Tailscale identity to
proxied requests, incorrect header sanitization allowed a request
with a crafted &lt;code&gt;Connection&lt;/code&gt; header to drop the impersonation
headers from the proxied request. This caused the proxied request
to be authenticated as the operator&#039;s service account, and inherit
the operator&#039;s permissions.&lt;/li&gt;
&lt;li&gt;In the
&lt;a href=&quot;/kb/1437/kubernetes-operator-api-server-proxy#configuring-api-server-proxy-in-noauth-mode&quot;&gt;no-auth&lt;/a&gt;
proxy mode, which does not apply Tailscale identity to forwarded
requests, a specially crafted request could similarly cause the
proxied request to use the operator&#039;s identity, with similar
results.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The bug was reported by &lt;a href=&quot;https://github.com/enj&quot;&gt;Mo Khan&lt;/a&gt; from Microsoft on
2023-11-01, and fixed on the same day.&lt;/p&gt;
&lt;h5&gt;Who is affected?&lt;/h5&gt;
&lt;p&gt;Tailnets using &lt;a href=&quot;/kb/1437/kubernetes-operator-api-server-proxy&quot;&gt;the API server
proxy&lt;/a&gt;
in Tailscale Kubernetes operator images with the following tags are affected:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;unstable-v1.53.20&lt;/code&gt; or earlier&lt;/li&gt;
&lt;li&gt;&lt;code&gt;unstable&lt;/code&gt; deployed before the tag was updated to 1.53.37, some time
on 2023-11-01.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Operator users running in the default operator configuration are
&lt;strong&gt;not&lt;/strong&gt; affected, as the API proxy is not enabled by default.&lt;/p&gt;
&lt;h5&gt;What is the impact?&lt;/h5&gt;
&lt;p&gt;Authenticated tailnet users who have access to the operator&#039;s API
proxy can make requests to the Kubernetes API with operator
privileges. In the proxy mode that allows the operator to use
impersonation, this can be used for further privilege escalation to
other cluster identities.&lt;/p&gt;
&lt;p&gt;External attackers &lt;strong&gt;cannot&lt;/strong&gt; exploit this vulnerability without being
a member of the tailnet.&lt;/p&gt;
&lt;h5&gt;What do I need to do?&lt;/h5&gt;
&lt;p&gt;Update the Tailscale Kubernetes operator image to version unstable-v1.53.37 or
later.&lt;/p&gt;
&lt;p&gt;If you used the official &lt;a href=&quot;https://github.com/tailscale/tailscale/blob/main/cmd/k8s-operator/deploy/manifests/operator.yaml&quot;&gt;operator manifest
file&lt;/a&gt;,
download the new manifest file and run &lt;code&gt;kubectl apply -f manifest.yaml&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;If you used the Helm chart, set the
&lt;a href=&quot;https://github.com/tailscale/tailscale/blob/ca4c940a4d0ac3274ee91a58e4823afb3c92ae0b/cmd/k8s-operator/deploy/chart/values.yaml#L16&quot;&gt;&lt;code&gt;operatorConfig.image.tag&lt;/code&gt;&lt;/a&gt;
to &lt;code&gt;unstable-v1.53.37&lt;/code&gt; in the &lt;code&gt;values.yaml&lt;/code&gt; file and run &lt;code&gt;helm upgrade &amp;#x3C;path-to-chart-directory&gt; -n tailscale -f &amp;#x3C;path-to-values-file&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;If you wrote your own manifest or Helm chart, update the &lt;code&gt;k8s-operator&lt;/code&gt; image
tag to &lt;code&gt;unstable-v1.53.37&lt;/code&gt; and redeploy it.&lt;/p&gt;
</description>
        </item>
        <item>
            <title>TS-2023-007</title>
            <link>https://tailscale.com/security-bulletins/#ts-2023-007</link>
            <guid>https://tailscale.com/security-bulletins/#ts-2023-007</guid>
            <pubDate>Thu, 26 Oct 2023 00:00:00 GMT</pubDate>
            <description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;Description&lt;/em&gt;&lt;/strong&gt;: Microsoft Defender is flagging Tailscale 1.46.1 as malware.
These classifications are false positives, and we are working with Microsoft to
resolve the situation.&lt;/p&gt;
&lt;p&gt;As of 2023-10-27 1:05 AM UTC, we have confirmed that Microsoft have addressed
the false positive, meaning Defender no longer flags Tailscale 1.46.1 as
malware. A rescan of &lt;a href=&quot;https://www.virustotal.com/gui/file/cfbf0c7ef964198e39f9cc97350626673468d311b8626c6b9bef6c95e40e569b&quot;&gt;tailscaled.exe 1.46.1 on VirusTotal&lt;/a&gt; confirms this.&lt;/p&gt;
&lt;h5&gt;What happened?&lt;/h5&gt;
&lt;p&gt;Microsoft Defender was flagging Tailscale 1.46.1 as malware. This caused
Defender to quarantine the binaries, meaning they could not run.&lt;/p&gt;
&lt;p&gt;We submitted Tailscale 1.46.1 to Microsoft to investigate the false positive,
who then updated Defender to avoid flagging this release as malware at
2023-10-27 1:05 AM UTC.&lt;/p&gt;
&lt;h5&gt;Who is affected?&lt;/h5&gt;
&lt;p&gt;People using Defender and Tailscale 1.46.1.&lt;/p&gt;
&lt;h5&gt;What is the impact?&lt;/h5&gt;
&lt;p&gt;Tailscale will not run on affected machines.&lt;/p&gt;
&lt;h5&gt;What do I need to do?&lt;/h5&gt;
&lt;p&gt;To resolve this issue on your own tailnet, you can take either or both of 2
approaches:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Update to a newer version of Tailscale. Newer versions are not affected by this problem.&lt;/li&gt;
&lt;li&gt;Create an exception in Microsoft Defender. Microsoft has published &lt;a href=&quot;https://support.microsoft.com/en-us/windows/add-an-exclusion-to-windows-security-811816c0-4dfd-af4a-47e4-c301afe13b26&quot;&gt;instructions explaining how to do this&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Update Microsoft Defender.&lt;/li&gt;
&lt;/ol&gt;
</description>
        </item>
        <item>
            <title>TS-2023-006</title>
            <link>https://tailscale.com/security-bulletins/#ts-2023-006</link>
            <guid>https://tailscale.com/security-bulletins/#ts-2023-006</guid>
            <pubDate>Tue, 22 Aug 2023 00:00:00 GMT</pubDate>
            <description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;Description&lt;/em&gt;&lt;/strong&gt;: An issue in the Tailscale client, combined with a behavior
of the UPnP implementations in some routers, could expose all UDP ports of a
node to external networks (usually the internet).&lt;/p&gt;
&lt;p&gt;As of 2023-08-22 2:30 AM UTC, we have changed the Tailscale coordination server
to advise nodes to stop using UPnP for port mapping. In some cases this can
degrade NAT traversal and may cause some connections to route through DERP.
This may increase node-to-node latency and decrease throughput. Version 1.48.1
resolves the issue and re-enables port mapping via UPnP.&lt;/p&gt;
&lt;h5&gt;What happened?&lt;/h5&gt;
&lt;p&gt;Tailscale nodes use UPnP as one of the mechanisms to open UDP port forwarding
in routers to help with NAT traversal. Tailscale picks a node port and an
external router port and requests forwarding between them. On first start
Tailscale requested external port &lt;code&gt;0&lt;/code&gt;, which many routers interpret as a
request to pick a random available port. However, some routers interpret this
as a request to listen on all external ports and forward traffic to matching
node ports.&lt;/p&gt;
&lt;p&gt;Depending on the router&#039;s implementation of UPnP, a node could end up open to
all UDP traffic from external networks. If some processes listen on UDP ports
on the node, this could be used as a vector of attack against other software
running on the node.&lt;/p&gt;
&lt;p&gt;Any firewall software running on the node would be able to stop unwanted UDP
packets, if configured to do so.&lt;/p&gt;
&lt;p&gt;The bug was discovered and fixed on 2023-08-21, and the fix was published in
the 1.48.1 release.&lt;/p&gt;
&lt;h5&gt;Who is affected?&lt;/h5&gt;
&lt;p&gt;The only known vulnerable routers are those running the &lt;code&gt;miniupnpd&lt;/code&gt; server,
versions 1.9 (2016) or earlier. Other UPnP server implementations may also be
vulnerable, but Tailscale is not aware of any as of 2023-08-22.&lt;/p&gt;
&lt;p&gt;A small percentage of nodes listened on router port &lt;code&gt;0&lt;/code&gt; via UPnP before the
mitigation was deployed. All nodes running vulnerable versions now have UPnP
port mapping disabled.&lt;/p&gt;
&lt;h5&gt;What is the impact?&lt;/h5&gt;
&lt;p&gt;Any node service listening on UDP ports from any IP could receive traffic from
external networks. This only applies to networks where the router implements
UPnP wildcard port support.&lt;/p&gt;
&lt;p&gt;If such a service does not implement authentication and/or authorization,
allows packets to trigger sensitive actions, or has separate
remotely-exploitable vulnerabilities, the node could be compromised by an
attacker.&lt;/p&gt;
&lt;h5&gt;What do I need to do?&lt;/h5&gt;
&lt;p&gt;UPnP on vulnerable versions was disabled by the coordination server. Update
Tailscale to version 1.48.1 or later to restore NAT traversal using UPnP for
better node connectivity.&lt;/p&gt;
&lt;p&gt;We do not recommend disabling UPnP or other port-mapping protocols on your
router. These protocols greatly improve connectivity for Tailscale and other
applications.&lt;/p&gt;
</description>
        </item>
        <item>
            <title>TS-2023-005</title>
            <link>https://tailscale.com/security-bulletins/#ts-2023-005</link>
            <guid>https://tailscale.com/security-bulletins/#ts-2023-005</guid>
            <pubDate>Fri, 28 Apr 2023 00:00:00 GMT</pubDate>
            <description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;Description&lt;/em&gt;&lt;/strong&gt;: An issue in the Tailscale coordination server in device
reauthentication logic caused previously authenticated and tagged devices to
lose their &lt;a href=&quot;/kb/1068/acl-tags/&quot;&gt;ACL tags&lt;/a&gt; upon reauthentication.&lt;/p&gt;
&lt;h5&gt;What happened?&lt;/h5&gt;
&lt;p&gt;The logic that handles the reauthentication to a new identity on an
already-authenticated device with tags had a bug: instead of updating the
device’s logged-in identity to the newly authenticated user, the device’s
identity became that of the user who originally added it to the tailnet, without
any tags.&lt;/p&gt;
&lt;p&gt;The bug was introduced on 2022-10-26, and discovered and remediated on
2023-04-21. The bug was discovered when troubleshooting a user-reported issue.&lt;/p&gt;
&lt;h5&gt;Who is affected?&lt;/h5&gt;
&lt;p&gt;189 tailnets triggered this bug in the course of normal use of Tailscale, either
directly by explicitly re-authenticating a device, or indirectly by using &lt;a href=&quot;/kb/1225/fast-user-switching/&quot;&gt;fast
user switching&lt;/a&gt; to switch between multiple
tailnets.&lt;/p&gt;
&lt;p&gt;We have notified affected organizations where we have &lt;a href=&quot;/kb/1224/contact-preferences/#setting-the-security-issues-email&quot;&gt;security
contacts&lt;/a&gt;.&lt;/p&gt;
&lt;h5&gt;What is the impact?&lt;/h5&gt;
&lt;p&gt;Devices that encountered the bug had their tags removed, which reverted the
device’s identity to that of the user who originally authenticated the device,
or the owner of the auth key that was originally used to authenticate the
device. In either case, this is the user listed as “Creator” in the Machines tab
of the admin panel. Depending on access rules in the tailnet policy file, this
could change the device’s network permissions.&lt;/p&gt;
&lt;p&gt;We have analyzed the audit logs for affected tailnets, and found no evidence of
deliberate exploitation. In most instances, device owners noticed the incorrect
outcome of reauthentication, and corrected the device’s state themselves.&lt;/p&gt;
&lt;h5&gt;What do I need to do?&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;If you were not contacted by Tailscale, no action is required.&lt;/strong&gt;  If you were
contacted by Tailscale, reapply the desired tags to affected devices in the
admin console, or by reauthenticating the devices. Tailscale has deployed a fix
to the coordination server as of 2023-04-21, and notified affected
organizations.&lt;/p&gt;
</description>
        </item>
        <item>
            <title>TS-2023-004</title>
            <link>https://tailscale.com/security-bulletins/#ts-2023-004</link>
            <guid>https://tailscale.com/security-bulletins/#ts-2023-004</guid>
            <pubDate>Tue, 04 Apr 2023 00:00:00 GMT</pubDate>
            <description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;Description&lt;/em&gt;&lt;/strong&gt;: An issue in the Tailscale coordination server allowed tailnets created by GitHub organizations which were subsequently renamed to be associated with a new GitHub organization with the previous name.&lt;/p&gt;
&lt;h4&gt;What happened?&lt;/h4&gt;
&lt;p&gt;Tailscale mapped tailnets created by GitHub organizations to their organization name, rather than to their organization ID. This meant that if a GitHub organization was renamed, and the previous name taken over by a new GitHub organization, the existing tailnet would be tied to the new GitHub organization instead of the original one.&lt;/p&gt;
&lt;h4&gt;Who is affected?&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Up to 1,305 tailnets created by GitHub organizations may have been affected, if those GitHub organizations were renamed between 2021-06-18 and 2023-03-30 and fully relinquished the old GitHub organization name&lt;/strong&gt;. Additional tailnets created by GitHub organizations could be verified to definitely not have been renamed in that time period based on organization membership.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;No tailnets were definitively found to have been affected&lt;/strong&gt;. If a tailnet created by a GitHub organization is affected, we can detect this the next time an unauthorized user logs in to the tailnet belonging to the renamed organization and block their access. We will contact the &lt;a href=&quot;/kb/1224/contact-preferences/#setting-the-security-issues-email&quot;&gt;security contact&lt;/a&gt; for that tailnet if that happens.&lt;/p&gt;
&lt;h4&gt;What is the impact?&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;A renamed GitHub organization may have had their previous tailnet visible to a newly created GitHub organization with the same name.&lt;/strong&gt;
The new GitHub organization would be aware of the existence of the previous tailnet. Devices added to the new GitHub organization would be aware of the existence and some metadata of previous added devices, including: their host names, their OS and version, when the devices were last connected, and their public IP addresses. They would have been able to connect to these devices if allowed by ACLs. The new GitHub organization would not have had any admin access or be able to see or modify any setting in the admin console.&lt;/p&gt;
&lt;p&gt;There is no evidence of this vulnerability being purposefully triggered or exploited.&lt;/p&gt;
&lt;h4&gt;What do I need to do?&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;No action is required&lt;/strong&gt;. Tailscale has deployed a fix to the coordination server as of 2023-03-30.&lt;/p&gt;
&lt;p&gt;GitHub organizations which were previously renamed and lost access to their tailnet should &lt;a href=&quot;/contact/support/&quot;&gt;contact support&lt;/a&gt;. When renaming a GitHub organization, &lt;a href=&quot;/contact/support/?type=sso&quot;&gt;contact support&lt;/a&gt; to migrate the tailnet to the new GitHub organization.&lt;/p&gt;
&lt;h4&gt;Credits&lt;/h4&gt;
&lt;p&gt;We would like to thank &lt;a href=&quot;https://6f.io/&quot;&gt;Thomas Way&lt;/a&gt; for reporting this issue.&lt;/p&gt;
</description>
        </item>
        <item>
            <title>TS-2023-003</title>
            <link>https://tailscale.com/security-bulletins/#ts-2023-003</link>
            <guid>https://tailscale.com/security-bulletins/#ts-2023-003</guid>
            <pubDate>Wed, 22 Mar 2023 00:00:00 GMT</pubDate>
            <description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;Reference&lt;/em&gt;&lt;/strong&gt;: &lt;a href=&quot;https://www.cve.org/CVERecord?id=CVE-2023-28436&quot;&gt;CVE-2023-28436&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Severity&lt;/em&gt;&lt;/strong&gt;: Medium&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;CVSS vector string&lt;/em&gt;&lt;/strong&gt;: CVSS:3.0/AV:A/AC:L/PR:H/UI:R/S:C/C:H/I:N/A:N&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Description&lt;/em&gt;&lt;/strong&gt;: A vulnerability identified in the implementation of Tailscale SSH in FreeBSD allowed commands to be run with a higher privilege group ID than that specified by Tailscale SSH access rules.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Affected platforms&lt;/em&gt;&lt;/strong&gt;: FreeBSD&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Patched Tailscale client versions&lt;/em&gt;&lt;/strong&gt;: v1.38.2 or later&lt;/p&gt;
&lt;h4&gt;What happened?&lt;/h4&gt;
&lt;p&gt;A difference in the behavior of the FreeBSD &lt;code&gt;setgroups&lt;/code&gt; system call from POSIX meant that the Tailscale client running on a FreeBSD-based operating system did not appropriately restrict groups on the host when using Tailscale SSH. When accessing a FreeBSD host over Tailscale SSH, the egid of the tailscaled process was used instead of that of the user specified in Tailscale SSH access rules.&lt;/p&gt;
&lt;h4&gt;Who is affected?&lt;/h4&gt;
&lt;p&gt;9 tailnets with 22 FreeBSD nodes running Tailscale SSH since Tailscale v1.34 (released on 2022-12-04) may have had Tailscale SSH sessions with a higher privilege group ID than that specified in Tailscale SSH access rules.&lt;/p&gt;
&lt;p&gt;We have notified affected organizations where we have &lt;a href=&quot;/kb/1224/contact-preferences/#setting-the-security-issues-email&quot;&gt;security contacts&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;What is the impact?&lt;/h4&gt;
&lt;p&gt;Tailscale SSH commands may have been run with a higher privilege group ID than that specified in Tailscale SSH access rules if they met all of the following criteria:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The destination node was a FreeBSD device with Tailscale SSH enabled;&lt;/li&gt;
&lt;li&gt;Tailscale SSH access rules permitted access for non-root users; and&lt;/li&gt;
&lt;li&gt;A non-interactive SSH session was used.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;What do I need to do?&lt;/h4&gt;
&lt;p&gt;If you are running Tailscale on FreeBSD, upgrade to v1.38.2 or later to remediate the issue. Admins of a tailnet can view &lt;a href=&quot;https://login.tailscale.com/admin/machines?q=version%3A%3C1.38.2+freebsd&quot;&gt;FreeBSD nodes with unpatched versions&lt;/a&gt; in the admin console.&lt;/p&gt;
&lt;p&gt;To update the local ports tree in advance of what&#039;s available upstream, you can:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;cd /usr/ports/security/tailscale&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;edit the Makefile to set &lt;code&gt;PORTVERSION&lt;/code&gt; to &lt;code&gt;1.38.2&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;make makesum&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;make install&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Tailscale SSH on other platforms is not affected.&lt;/p&gt;
&lt;h4&gt;Credits&lt;/h4&gt;
&lt;p&gt;We would like to thank &lt;a href=&quot;https://www.linkedin.com/in/rbelgrave/&quot;&gt;Ryan Belgrave&lt;/a&gt; for reporting this issue.&lt;/p&gt;
</description>
        </item>
        <item>
            <title>TS-2023-002</title>
            <link>https://tailscale.com/security-bulletins/#ts-2023-002</link>
            <guid>https://tailscale.com/security-bulletins/#ts-2023-002</guid>
            <pubDate>Tue, 24 Jan 2023 00:00:00 GMT</pubDate>
            <description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;Description&lt;/em&gt;&lt;/strong&gt;: An issue in the Tailscale coordination server allowed nodes with expired node keys to continue communicating with other nodes in a tailnet.&lt;/p&gt;
&lt;h4&gt;What happened?&lt;/h4&gt;
&lt;p&gt;There was a flaw in Tailscale’s logic for expiring node keys. If the set of nodes that can connect in a tailnet (the netmap) didn’t have any changes, then expired node keys were not immediately removed from the netmap. The longest delay in removal was 19 days, from 2022-12-20 to 2023-01-09.&lt;/p&gt;
&lt;h4&gt;Who is affected?&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;All tailnets with nodes whose node keys expired prior to 2023-01-12 may have been affected&lt;/strong&gt;. Admins of a tailnet can view &lt;a href=&quot;https://login.tailscale.com/admin/machines?q=disabled%3Aexpired&quot;&gt;nodes with expired node keys&lt;/a&gt; in the admin console.&lt;/p&gt;
&lt;h4&gt;What is the impact?&lt;/h4&gt;
&lt;p&gt;Connections between nodes could continue after a node key expired, both when the expired node key was the source or when it was the destination of a connection. Connections to nodes with expired node keys would only be possible if they met all of the following criteria:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The peer node was in the same tailnet as, or shared into a tailnet with the node with the expired node key;&lt;/li&gt;
&lt;li&gt;The peer node and the node with the expired node key were allowed to connect based on the access rules in the tailnet policy file at the time of expiry of the node key;&lt;/li&gt;
&lt;li&gt;The tailnet’s netmap, including access rules, nodes added or removed from the tailnet, or connectivity of nodes in the tailnet did not change since the node key expiry; and&lt;/li&gt;
&lt;li&gt;Tailscale had not deployed a change to the coordination server since the node key expiry.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;What do I need to do?&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;No action is required&lt;/strong&gt;. Tailscale has deployed a fix to the coordination server as of 2023-01-11.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Upgrade clients to v1.36 or later for an additional mitigation&lt;/strong&gt;. In conjunction with the coordination server fix, this mitigation prevents nodes from connecting to nodes with expired node keys if the Tailscale coordination server is offline or unreachable.&lt;/p&gt;
&lt;h4&gt;Credits&lt;/h4&gt;
&lt;p&gt;We would like to thank &lt;a href=&quot;https://me.ellisd.com&quot;&gt;Derek Ellis&lt;/a&gt; and &lt;a href=&quot;https://www.cranksecurity.com/&quot;&gt;Alex Eiser&lt;/a&gt; for reporting this issue.&lt;/p&gt;
</description>
        </item>
        <item>
            <title>TS-2023-001</title>
            <link>https://tailscale.com/security-bulletins/#ts-2023-001</link>
            <guid>https://tailscale.com/security-bulletins/#ts-2023-001</guid>
            <pubDate>Tue, 17 Jan 2023 00:00:00 GMT</pubDate>
            <description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;Description&lt;/em&gt;&lt;/strong&gt;: An issue in the Tailscale coordination server allowed a malicious individual to share nodes from other tailnets to themselves, if they knew the node ID of the target.&lt;/p&gt;
&lt;h4&gt;What happened?&lt;/h4&gt;
&lt;p&gt;A bug in Tailscale’s node sharing logic allowed the creation of sharing invitations by unauthorized users. A malicious individual who knew a target node’s database ID could generate and accept a sharing invite for that node without being an admin of the target node’s tailnet.&lt;/p&gt;
&lt;p&gt;This was possible for any node in any tailnet, as long as the individual knew the target’s node ID. The node ID is an integer used in the admin panel’s database, and is not related to the node “StableID” that is visible to Tailscale clients. A node’s ID is only visible in the API or admin console, by admins of either the node’s tailnet or a tailnet to which that node has already been shared. IDs are random 64-bit numbers that are not sequential or otherwise easily guessable.&lt;/p&gt;
&lt;p&gt;The bug was introduced on 2022-09-14, reported to us on 2023-01-11, and remediated on 2023-01-12.&lt;/p&gt;
&lt;h4&gt;Who is affected?&lt;/h4&gt;
&lt;p&gt;All tailnets with nodes are affected.&lt;/p&gt;
&lt;h4&gt;What is the impact?&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;This vulnerability was not triggered or exploited&lt;/strong&gt;. Analysis of tailnet logs shows that no unauthorized shares were created or accepted while the vulnerability was present, except as part of the proof of concept from the individual who reported the vulnerability.&lt;/p&gt;
&lt;p&gt;Admins of a tailnet can review &lt;a href=&quot;https://login.tailscale.com/admin/machines?q=shared%3Aout&quot;&gt;nodes that are shared out of their tailnet&lt;/a&gt; in the admin console. Sharing invites are logged as &lt;a href=&quot;/kb/1203/audit-logging/#events-for-shared-nodes&quot;&gt;events in configuration audit logs&lt;/a&gt;. Admins can also review &lt;a href=&quot;https://login.tailscale.com/admin/logs?events=%5B%22INVITECREATENODE_SHARE%22%2C%22INVITEACCEPTNODE_SHARE%22%5D&quot;&gt;invites created and accepted in their configuration audit logs&lt;/a&gt; in the admin console.&lt;/p&gt;
&lt;h4&gt;What do I need to do?&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;No action is required&lt;/strong&gt;. Tailscale has deployed a fix to the coordination server as of 2023-01-12, and verified that the vulnerability was not exploited.&lt;/p&gt;
&lt;h4&gt;Credits&lt;/h4&gt;
&lt;p&gt;We would like to thank Benjamin Roberts (&lt;a href=&quot;https://github.com/tsujamin&quot;&gt;tsujamin&lt;/a&gt;) for reporting this issue.&lt;/p&gt;
</description>
        </item>
        <item>
            <title>TS-2022-004</title>
            <link>https://tailscale.com/security-bulletins/#ts-2022-004</link>
            <guid>https://tailscale.com/security-bulletins/#ts-2022-004</guid>
            <pubDate>Mon, 21 Nov 2022 00:00:00 GMT</pubDate>
            <description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;Reference&lt;/em&gt;&lt;/strong&gt;: &lt;a href=&quot;https://www.cve.org/CVERecord?id=CVE-2022-41924&quot;&gt;CVE-2022-41924&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Severity&lt;/em&gt;&lt;/strong&gt;: Critical&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;CVSS vector string&lt;/em&gt;&lt;/strong&gt;: CVSS:3.0/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:L/A:H&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Description&lt;/em&gt;&lt;/strong&gt;: A vulnerability identified in the Tailscale Windows client allows a malicious website to reconfigure the Tailscale daemon &lt;code&gt;tailscaled&lt;/code&gt;, which can then be used to remotely execute code.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Affected platforms&lt;/em&gt;&lt;/strong&gt;: Windows&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Patched Tailscale client versions&lt;/em&gt;&lt;/strong&gt;: v1.32.3 or later, v1.33.257 or later (unstable)&lt;/p&gt;
&lt;h4&gt;What happened?&lt;/h4&gt;
&lt;p&gt;In the Tailscale Windows client, the local API was bound to a local TCP socket, and communicated with the Windows client GUI in cleartext with no Host header verification. This allowed an attacker-controlled website visited by the node to rebind DNS to an attacker-controlled DNS server, and then make local API requests in the client, including changing the coordination server to an attacker-controlled coordination server.&lt;/p&gt;
&lt;h4&gt;Who is affected?&lt;/h4&gt;
&lt;p&gt;All Windows clients prior to version v1.32.3 are affected.&lt;/p&gt;
&lt;h4&gt;What is the impact?&lt;/h4&gt;
&lt;p&gt;An attacker-controlled coordination server can send malicious URL responses to the client, including pushing executables or installing an SMB share. These allow the attacker to remotely execute code on the node.&lt;/p&gt;
&lt;p&gt;Reviewing all logs confirms this vulnerability was not triggered or exploited.&lt;/p&gt;
&lt;h4&gt;What do I need to do?&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;If you are running Tailscale on Windows, upgrade to v1.32.3 or later to remediate the issue.&lt;/strong&gt;&lt;/p&gt;
&lt;h4&gt;Credits&lt;/h4&gt;
&lt;p&gt;We would like to thank &lt;a href=&quot;https://github.com/emilytrau&quot;&gt;Emily Trau&lt;/a&gt; and &lt;a href=&quot;https://twitter.com/JJJollyjim&quot;&gt;Jamie McClymont (CyberCX)&lt;/a&gt; for reporting this issue. Further detail is available in &lt;a href=&quot;https://emily.id.au/tailscale&quot;&gt;their blog post&lt;/a&gt;.&lt;/p&gt;
</description>
        </item>
        <item>
            <title>TS-2022-005</title>
            <link>https://tailscale.com/security-bulletins/#ts-2022-005</link>
            <guid>https://tailscale.com/security-bulletins/#ts-2022-005</guid>
            <pubDate>Mon, 21 Nov 2022 00:00:00 GMT</pubDate>
            <description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;Reference&lt;/em&gt;&lt;/strong&gt;: &lt;a href=&quot;https://www.cve.org/CVERecord?id=CVE-2022-41925&quot;&gt;CVE-2022-41925&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Severity&lt;/em&gt;&lt;/strong&gt;: Low&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;CVSS vector string&lt;/em&gt;&lt;/strong&gt;: CVSS:3.0/AV:A/AC:L/PR:N/UI:R/S:C/C:L/I:N/A:N&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Description&lt;/em&gt;&lt;/strong&gt;: A vulnerability identified in the Tailscale client allows a malicious website to access the peer API, which can then be used to access Tailscale environment variables.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Affected platforms&lt;/em&gt;&lt;/strong&gt;: All&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Patched Tailscale client versions&lt;/em&gt;&lt;/strong&gt;: v1.32.3 or later, v1.33.257 or later (unstable)&lt;/p&gt;
&lt;h4&gt;What happened?&lt;/h4&gt;
&lt;p&gt;In the Tailscale client, the peer API was vulnerable to DNS rebinding. This allowed an attacker-controlled website visited by the node to rebind DNS for the peer API to an attacker-controlled DNS server, and then making peer API requests in the client, including accessing the node’s Tailscale environment variables.&lt;/p&gt;
&lt;h4&gt;Who is affected?&lt;/h4&gt;
&lt;p&gt;All Tailscale clients prior to version v1.32.3 are affected.&lt;/p&gt;
&lt;h4&gt;What is the impact?&lt;/h4&gt;
&lt;p&gt;An attacker with access to the peer API on a node could use that access to read the node’s environment variables, including any credentials or secrets stored in environment variables. This may include Tailscale authentication keys, which could then be used to add new nodes to the user’s tailnet. The peer API access could also be used to learn of other nodes in the tailnet or send files via Taildrop.&lt;/p&gt;
&lt;p&gt;An attacker with access to the peer API who sent a malicious file via Taildrop which was accessed while it was loading could use this to gain access to the local API, and remotely execute code.&lt;/p&gt;
&lt;p&gt;There is no evidence of this vulnerability being purposefully triggered or exploited.&lt;/p&gt;
&lt;h4&gt;What do I need to do?&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Upgrade to v1.32.3 or later to remediate the issue.&lt;/strong&gt;&lt;/p&gt;
&lt;h4&gt;Credits&lt;/h4&gt;
&lt;p&gt;We would like to thank &lt;a href=&quot;https://github.com/emilytrau&quot;&gt;Emily Trau&lt;/a&gt; and &lt;a href=&quot;https://twitter.com/JJJollyjim&quot;&gt;Jamie McClymont (CyberCX)&lt;/a&gt; for reporting this issue. Further detail is available in &lt;a href=&quot;https://emily.id.au/tailscale&quot;&gt;their blog post&lt;/a&gt;.&lt;/p&gt;
</description>
        </item>
        <item>
            <title>TS-2022-003</title>
            <link>https://tailscale.com/security-bulletins/#ts-2022-003</link>
            <guid>https://tailscale.com/security-bulletins/#ts-2022-003</guid>
            <pubDate>Tue, 14 Jun 2022 00:00:00 GMT</pubDate>
            <description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;Description&lt;/em&gt;&lt;/strong&gt;: An issue in Tailscale’s implementation of the OAuth authentication flow for GitHub allowed users who authenticate to Tailscale with their GitHub user identity to create a tailnet for a GitHub organization using &lt;a href=&quot;https://docs.github.com/en/enterprise-cloud@latest/authentication/authenticating-with-saml-single-sign-on/about-authentication-with-saml-single-sign-on&quot;&gt;SAML authentication&lt;/a&gt; in &lt;a href=&quot;https://docs.github.com/en/get-started/onboarding/getting-started-with-github-enterprise-cloud&quot;&gt;GitHub Enterprise Cloud&lt;/a&gt;, where Tailscale is not an &lt;a href=&quot;https://docs.github.com/en/enterprise-cloud@latest/authentication/keeping-your-account-and-data-secure/authorizing-oauth-apps&quot;&gt;authorized OAuth app&lt;/a&gt; for their organization.&lt;/p&gt;
&lt;h4&gt;What happened?&lt;/h4&gt;
&lt;p&gt;Tailscale silently ignored a 403 error to the &lt;a href=&quot;https://docs.github.com/en/enterprise-cloud@latest/rest/orgs/orgs#list-organizations-for-the-authenticated-user&quot;&gt;GitHub API query for organizations for an authenticated user&lt;/a&gt; that was returned when a user authenticated to SAML, but the organization had not authorized Tailscale. This only applied to organizations using SAML on GitHub Enterprise Cloud with OAuth app authorization enabled, and where Tailscale was not authorized.&lt;/p&gt;
&lt;p&gt;As a result, a user identity could bypass the organization’s OAuth app access restrictions, and create a tailnet for the GitHub organization.&lt;/p&gt;
&lt;h4&gt;Who is affected?&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Up to 7 tailnets for GitHub organizations on GitHub Enterprise Cloud which use SAML for authentication may have been created between 2021-06-18 and 2022-06-03 without Tailscale being an authorized OAuth app for their GitHub organization&lt;/strong&gt;, and could have used Tailscale to connect devices in that organization. An additional 10 tailnets were created with no or only one device, and so could not have used Tailscale to connect between devices.&lt;/p&gt;
&lt;p&gt;We have notified the Tailscale admins for the affected organizations who we were able to identify. We do not have a way to notify the GitHub organization owners.&lt;/p&gt;
&lt;p&gt;If you’re a GitHub organization owner, you can see if Tailscale is approved for your GitHub organization by going to the organization’s settings page and selecting “Third-party access” from the left-hand navigation. Or, for an organization &lt;code&gt;$your-org&lt;/code&gt;, navigate to&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;https://github.com/organizations/$your-org/settings/oauth_application_policy
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;What is the impact?&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;A tailnet may have been created for a GitHub organization without their GitHub organization owner’s approval&lt;/strong&gt;.  In this case, the use of Tailscale and the creation of a tailnet could be perceived as being sanctioned by their organization when it might not have been.&lt;/p&gt;
&lt;h4&gt;What do I need to do?&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;If you are affected, you will need to re-authenticate to keep using your tailnet&lt;/strong&gt;. Tailscale has expired all admin console sessions for potentially affected GitHub organizations as of 2022-06-13. As a result, users in a potentially affected tailnet will need to re-authenticate the next time they access the admin console, and will not be able to do so without Tailscale being an authorized OAuth app, which may first require getting approval from their GitHub organization owner. Nodes in a potentially affected tailnet will also need to re-authenticate when their node keys expire. If you’re a GitHub organization owner, you can approve Tailscale as an OAuth app by following GitHub’s instructions for &lt;a href=&quot;https://docs.github.com/en/organizations/restricting-access-to-your-organizations-data/approving-oauth-apps-for-your-organization&quot;&gt;Approving OAuth Apps for your organization&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Tailscale has deployed a fix to the coordination server as of 2022-06-03, so that no new tailnets can be created without a GitHub organization owner’s approval.&lt;/p&gt;
&lt;h4&gt;Credits&lt;/h4&gt;
&lt;p&gt;We would like to thank &lt;a href=&quot;https://github.com/acuteaura&quot;&gt;Aurelia&lt;/a&gt; for reporting the issue. Further detail is available in &lt;a href=&quot;https://notes.acuteaura.net/posts/github-enterprise-security/&quot;&gt;their blog post&lt;/a&gt;.&lt;/p&gt;
</description>
        </item>
        <item>
            <title>TS-2022-002</title>
            <link>https://tailscale.com/security-bulletins/#ts-2022-002</link>
            <guid>https://tailscale.com/security-bulletins/#ts-2022-002</guid>
            <pubDate>Wed, 11 May 2022 00:00:00 GMT</pubDate>
            <description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;Description&lt;/em&gt;&lt;/strong&gt;: An issue in the Tailscale coordination server allowed individuals creating a new Tailscale account with a gmail.com email address to join the same tailnet, rather than individual tailnets.&lt;/p&gt;
&lt;h4&gt;What happened?&lt;/h4&gt;
&lt;p&gt;There was a flaw in Tailscale’s logic for migrating accounts between identity providers, and a new gmail.com shared tailnet was accidentally created. Once created, any user who tried to create a new Tailscale account with a gmail.com email address joined the shared gmail.com tailnet.&lt;/p&gt;
&lt;h4&gt;Who is affected?&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;A total of 44 users with 59 devices who created accounts for their gmail.com email addresses on 2022-05-11 between 10:56 and 13:12 PT were affected&lt;/strong&gt;. We have notified affected users.&lt;/p&gt;
&lt;h4&gt;What is the impact?&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Six connections between devices belonging to different users were made, but no traffic of concern flowed between them&lt;/strong&gt;. Four connections were pings, and two connections were UDP traffic on port 27036, likely automated broadcasting by a gaming platform to discover peers to play with. There is no evidence of malicious traffic.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Impacted users could see some metadata about other users and devices from their devices’ clients&lt;/strong&gt;, including users’ names, devices’ host names, and devices’ Tailscale IP addresses. This information &lt;em&gt;was&lt;/em&gt; viewed by at least one user, who reported it to us.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;One user, the tailnet Admin, was able to see all users and devices added to the shared gmail.com tailnet&lt;/strong&gt;. This includes users’ email addresses, names, and when they were last connected; and devices’ host names, their OS and version, when the devices were last connected, and their public IP addresses. This information &lt;em&gt;was&lt;/em&gt; viewed by the user, who reported it to us.&lt;/p&gt;
&lt;h4&gt;What do I need to do?&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;No action is required&lt;/strong&gt;. Tailscale has deployed a fix to the coordination server as of 2022-05-11 13:12 PT.&lt;/p&gt;
&lt;p&gt;New users registering for a Tailscale account with a gmail.com email address will create a tailnet as normal.&lt;/p&gt;
&lt;h4&gt;Credits&lt;/h4&gt;
&lt;p&gt;We would like to thank &lt;a href=&quot;https://www.linkedin.com/in/davidswafford/&quot;&gt;David Swafford&lt;/a&gt; and George Constantinides for reporting the issue.&lt;/p&gt;
</description>
        </item>
        <item>
            <title>TS-2022-001</title>
            <link>https://tailscale.com/security-bulletins/#ts-2022-001</link>
            <guid>https://tailscale.com/security-bulletins/#ts-2022-001</guid>
            <pubDate>Mon, 07 Feb 2022 00:00:00 GMT</pubDate>
            <description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;Description&lt;/em&gt;&lt;/strong&gt;: An issue in the Tailscale coordination server allowed individuals using GitHub to authenticate to Tailscale to have their devices join a tailnet associated with an empty GitHub username.&lt;/p&gt;
&lt;h4&gt;What happened?&lt;/h4&gt;
&lt;p&gt;There was a flaw in Tailscale’s authorization logic for the GitHub identity provider. If a user tried to authenticate to Tailscale using their GitHub identity, and GitHub returned a 500 error, then in some cases, Tailscale interpreted that as authorization for an empty GitHub username, and connected these devices to the tailnet associated with the empty GitHub username.&lt;/p&gt;
&lt;h4&gt;Who is affected?&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;A total of five devices belonging to four users were affected between 2021-06-15 and 2022-02-04&lt;/strong&gt;, when the issue was reported and remediated. We have contacted the two users we were able to identify.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;You may be affected if you authenticated to Tailscale using a GitHub account, and after authorizing a connection using GitHub, you received a connection error.&lt;/strong&gt; Without being asked to select which GitHub user or organization tailnet to connect to, your device would have connected to a tailnet.&lt;/p&gt;
&lt;h4&gt;What is the impact?&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;No device connected to another device in the tailnet.&lt;/strong&gt; Other than the two devices which belonged to the same user, no two devices in the tailnet had valid node keys at the same time, and so did not and would not have been able to establish connections.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A device’s existence and some metadata was shared with devices added later in time.&lt;/strong&gt; Devices added later in time were able to see previously added devices, including: their host names, their OS and version, when the devices were last connected, and their public IP addresses.&lt;/p&gt;
&lt;p&gt;There is no evidence of this vulnerability being purposefully triggered or exploited.&lt;/p&gt;
&lt;h4&gt;Credits&lt;/h4&gt;
&lt;p&gt;We would like to thank Marvin Boothby (&lt;a href=&quot;https://github.com/boothb&quot;&gt;boothb&lt;/a&gt;) for reporting the issue.&lt;/p&gt;
</description>
        </item>
    </channel>
</rss>