Security Bulletins on Tailscale
https://tailscale.com/security-bulletins/
Recent security bulletins from Tailscale
Tue, 01 Apr 2025 04:08:56 GMT
https://validator.w3.org/feed/docs/rss2.html
tailscale.com
en-US
© 2025 Tailscale Inc. All rights reserved.
-
TS-2025-001
https://tailscale.com/security-bulletins/#ts-2025-001
https://tailscale.com/security-bulletins/#ts-2025-001
Fri, 07 Mar 2025 00:00:00 GMT
<p><strong><em>Description</em></strong>: Potential for continued admin console access past inactivity timeout</p>
<h4>What happened?</h4>
<p>The <a href="/kb/1461/admin-console-session-timeout">admin console session timeout</a> 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.</p>
<p>For tailnets whose users were also <a href="/kb/1271/invite-any-user">members of other tailnets</a> 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.</p>
<p>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.</p>
<h4>Who was affected?</h4>
<p>Tailnets with admin console session timeout configurations and users who are members of other tailnets with less strict session timeout configurations.</p>
<h4>What was the impact?</h4>
<p>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.</p>
<h4>What do I need to do?</h4>
<p>No action is required.</p>
-
TS-2024-013
https://tailscale.com/security-bulletins/#ts-2024-013
https://tailscale.com/security-bulletins/#ts-2024-013
Wed, 04 Dec 2024 00:00:00 GMT
<p><strong><em>Description</em></strong>: Potential for Tailscale SSH recording failures</p>
<h4>What happened?</h4>
<p>Tailscale <a href="/kb/1246/tailscale-ssh-session-recording">SSH recording</a> deployments that enforce SSH recording
using <code>enforceRecorder</code> could fail to record session activity in several
situations.</p>
<h5>Failure to write to the storage backend</h5>
<p>If <code>tsrecorder</code> 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.</p>
<p>A <code>tsrecorder</code> instance can fail to write to its configured storage for many
reasons, including:</p>
<ul>
<li>Misconfigured IAM permissions when using S3 for storage.</li>
<li>Misconfigured file permissions when using the local filesystem for storage.</li>
<li>Insufficient free space when using the local filesystem for storage.</li>
</ul>
<p><code>tsrecorder</code> now exercises the full set of required storage actions on startup.</p>
<h5>Unreachable tsrecorder after a session is established</h5>
<p>If <code>tsrecorder</code> instances became unreachable after a session had started, the
SSH session would take several minutes to terminate. This could happen when
<code>tsrecorder</code> went offline or when ACLs were updated to restrict access to
<code>tsrecorder</code> nodes.</p>
<p>The Tailscale client now detects <code>tsrecorder</code> unreachability within 30 seconds
and terminates the connection.</p>
<h4>Who was affected?</h4>
<p>Users of Tailscale SSH recording with <code>enforceRecorder</code> option and with
<code>tsrecorder</code> and Tailscale client versions prior to 1.78.0.</p>
<h4>What was the impact?</h4>
<p>Users connecting over <a href="kb/1193/tailscale-ssh">Tailscale SSH</a> to nodes that enforce session
recording via <code>enforceRecorder</code> ACL flags would have been able to execute
commands briefly before having their access terminated due to recording
failures.</p>
<h4>What do I need to do?</h4>
<p>Update <code>tsrecorder</code> instances and Tailscale clients to version 1.78.0 or later.</p>
-
TS-2024-012
https://tailscale.com/security-bulletins/#ts-2024-012
https://tailscale.com/security-bulletins/#ts-2024-012
Wed, 02 Oct 2024 00:00:00 GMT
<p><strong><em>Description</em></strong>: Tailscale Funnel abused for phishing</p>
<h4>What happened?</h4>
<p>A malicious user abused <a href="/kb/1223/funnel">Tailscale Funnel</a> 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.</p>
<p>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.</p>
<h4>Who was affected?</h4>
<p>232 unique IP addresses accessed the attacker's Funnel nodes. Of those, 87 IP addresses made more
than one request, suggesting a possible phishing form submission.</p>
<h4>What was the impact?</h4>
<p>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.</p>
<h4>What do I need to do?</h4>
<p>Don't use Tailscale Funnel for phishing.</p>
-
TS-2024-011
https://tailscale.com/security-bulletins/#ts-2024-011
https://tailscale.com/security-bulletins/#ts-2024-011
Mon, 22 Jul 2024 00:00:00 GMT
<p><strong><em>Description</em></strong>: SCIM group name disclosure via the ACL editor</p>
<h4>What happened?</h4>
<p>The <a href="/kb/1338/acl-edit">ACL editor</a> in the admin console did not check <a href="/kb/1290/user-group-provisioning">SCIM</a>
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.</p>
<p>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.</p>
<h4>Who was affected?</h4>
<p>None of the existing tailnets' 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.</p>
<h4>What was the impact?</h4>
<p>A malicious user could learn about SCIM group names used in other tailnets.</p>
<h4>What do I need to do?</h4>
<p>No action is required.</p>
-
TS-2024-010
https://tailscale.com/security-bulletins/#ts-2024-010
https://tailscale.com/security-bulletins/#ts-2024-010
Fri, 19 Jul 2024 00:00:00 GMT
<p><strong><em>Description</em></strong>: Accidental ACL edits due to browser caching</p>
<h4>What happened?</h4>
<p>When switching tailnets in the admin console, an <a href="/kb/1138/user-roles#admin">Admin</a> user
could overwrite the <a href="/kb/1018/acls">ACLs</a> of one tailnet with pending changes to ACLs
from another tailnet.</p>
<p>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.</p>
<p>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 <a href="/kb/1271/invite-any-user">invited</a> to another tailnet and granted the Admin role.</p>
<p>Tailnet switching in the admin console was added on May 22nd, 2023. We fixed
this bug on July 17th, 2024.</p>
<h4>Who was affected?</h4>
<p>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.</p>
<h4>What was the impact?</h4>
<p>An Admin user could overwrite the ACLs of one tailnet with ACLs from another
tailnet.</p>
<h4>What do I need to do?</h4>
<p>If you are an Admin of multiple tailnets using the same login name, review the
ACLs in your tailnets for correctness.</p>
-
TS-2024-009
https://tailscale.com/security-bulletins/#ts-2024-009
https://tailscale.com/security-bulletins/#ts-2024-009
Thu, 27 Jun 2024 00:00:00 GMT
<p><strong><em>Description</em></strong>: Potential for API credential disclosure over plaintext HTTP</p>
<h4>What happened?</h4>
<p>The <a href="/kb/1101/api">Tailscale API</a> is primarily accessible over TLS-encrypted HTTP at
<code>api.tailscale.com</code>. It also has a limited plaintext HTTP handler to serve HTTP
to HTTPS redirects.</p>
<p>Browsers that connect over plaintext HTTP do not send cookies marked as <code>Secure</code>
to prevent them from being disclosed to network intermediaries.</p>
<p>However, API clients that connect using plaintext HTTP and send requests
with authentication tokens in headers have no such protections to prevent
disclosure.</p>
<p>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.</p>
<p>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.</p>
<h4>Who was affected?</h4>
<p>Any Tailscale API client that connected over plaintext HTTP using credentials
before June 26, 2024.</p>
<h4>What was the impact?</h4>
<p>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.</p>
<h4>What do I need to do?</h4>
<p>No action is needed at this time.</p>
<h4>Credits</h4>
<p>Thanks to <a href="https://jviide.iki.fi/">Joachim Viide</a> for reporting this issue.</p>
-
TS-2024-008
https://tailscale.com/security-bulletins/#ts-2024-008
https://tailscale.com/security-bulletins/#ts-2024-008
Fri, 14 Jun 2024 00:00:00 GMT
<p><strong><em>Description</em></strong>: Partial loss of audit and network flow logs</p>
<h5>What happened?</h5>
<p>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.</p>
<h5>Who was affected?</h5>
<p>All tailnets that rely on audit and network flow logs have been affected.</p>
<h5>What was the impact?</h5>
<p>The 14% chance of dropped log entries affects storing of logs such as
<a href="/kb/1203/audit-logging">configuration audit logs</a> and
<a href="/kb/1219/network-flow-logs">network flow logs</a>.
While logs can be retrieved for the timeframe that the overflow bug was active,
some fraction of the entries may be missing.</p>
<h5>What do I need to do?</h5>
<p>No action is needed at this time.</p>
<p>We fixed the bug, added additional error checking, and
deployed both to the logs processing service.</p>
-
TS-2024-007
https://tailscale.com/security-bulletins/#ts-2024-007
https://tailscale.com/security-bulletins/#ts-2024-007
Wed, 12 Jun 2024 00:00:00 GMT
<p><strong><em>Description</em></strong>: Incorrect DNS resolution with split DNS on macOS and iOS</p>
<h5>What happened?</h5>
<p>On Tailscale macOS and iOS clients with split DNS configurations (like <a href="/kb/1281/app-connectors">App
Connectors</a> or <a href="/kb/1054/dns#nameservers">Restricted
Nameservers</a>), lookups of bare tailnet node names
could in rare cases return incorrect answers. For example, if a node <code>mynode</code>
and an App Connector for <code>*.example.com</code> exist on a tailnet, DNS lookups for
<code>mynode</code> could return the answer for <code>mynode.example.com</code> 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).</p>
<p>We fixed this bug in client version 1.68.0, and notified the security contacts
of potentially affected tailnets over email.</p>
<h5>Who was affected?</h5>
<p>All tailnets that use App Connectors or Restricted Domains, and have macOS or
iOS nodes could have been affected.</p>
<p>This bug is usually intermittently-triggered when switching networks in our
experience. Only lookups of bare domains, like <code>mynode</code> but not
<code>mynode.mytailnet.ts.net</code>, are at risk.</p>
<p>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.</p>
<p>We are not aware of any active exploitation of this vulnerability.</p>
<h5>What was the impact?</h5>
<p>For a split DNS domain <code>example.com</code>, an attacker with control over
<code>mynode.example.com</code> can impersonate a non-TLS server running on node <code>mynode</code>
on the tailnet. This attack is opportunistic and passive - it relies on the
user connecting to <code>mynode</code> using its bare domain and cannot be forced
remotely.</p>
<h5>What do I need to do?</h5>
<p>Upgrade your macOS and iOS clients to 1.68.0 or later.</p>
-
TS-2024-006
https://tailscale.com/security-bulletins/#ts-2024-006
https://tailscale.com/security-bulletins/#ts-2024-006
Wed, 22 May 2024 00:00:00 GMT
<p><strong><em>Description</em></strong>: Tailnet SSO provider migration impacting invited users</p>
<h5>What happened?</h5>
<p>When tailnets are created, they are associated with an <a href="/kb/1013/sso-providers">SSO
provider</a> such as Google or Microsoft, requiring all members
of the tailnet to authenticate using that provider. In addition, Tailscale also
supports inviting <a href="/kb/1271/invite-any-user">external users</a> 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.</p>
<p>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
<em>all members</em> of a tailnet, including those of invited external members.</p>
<p>We fixed this internal tool to migrate direct tailnet members, excluding invited
members on May 20, 2024.</p>
<p>We reverted the erroneous SSO provider changes and notified affected
users on May 23, 2024.</p>
<h5>Who was affected?</h5>
<p>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.</p>
<h5>What was the impact?</h5>
<p>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.</p>
<h5>What do I need to do?</h5>
<p>No action is needed at this time.</p>
-
TS-2024-005
https://tailscale.com/security-bulletins/#ts-2024-005
https://tailscale.com/security-bulletins/#ts-2024-005
Wed, 08 May 2024 00:00:00 GMT
<p><strong><em>Description</em></strong>: Insufficient inbound packet filtering in subnet routers and exit nodes</p>
<h5>What happened?</h5>
<p>In Tailscale versions earlier than 1.66.0, <a href="/kb/1103/exit-nodes">exit nodes</a>, <a href="/kb/1019/subnets">subnet
routers</a>, and <a href="/kb/1281/app-connectors">app connectors</a>, 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 <a href="/kb/1018/acls">ACLs</a> allow <code>"src": "*"</code>, such as
with <a href="/kb/1192/acl-samples#allow-all-default-acl">default ACLs</a>.</p>
<p>Tailscale version 1.66.0 fixes the vulnerability. Additionally, a server-side
update changes the interpretation of <code>"src": "*"</code> to mitigate the issue
specifically for exit nodes.</p>
<p>Special thanks to <a href="https://www.linkedin.com/in/hakan-ergan/">Hakan Ergan</a> for reporting a similar
concern that led us to discover this vulnerability.</p>
<h5>Who was affected?</h5>
<p>This affected the following nodes using Tailscale version 1.65 or earlier:</p>
<ul>
<li>Exit nodes on Linux</li>
<li>Subnet routers on Linux</li>
<li>App connectors on Linux</li>
<li>Regular nodes on all platforms connecting to the above nodes</li>
</ul>
<p>Tailnets with custom ACLs that do not use <code>"src": "*"</code> or any other value that
includes external IPs were not affected.</p>
<p>We are not aware of any active exploitation of this vulnerability.</p>
<h5>What was the impact?</h5>
<p>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.</p>
<h5>What do I need to do?</h5>
<p>Upgrade the following nodes to 1.66.0 or later:</p>
<ul>
<li>Subnet routers on Linux</li>
<li>App connectors on Linux</li>
<li>Regular nodes on all platforms that use exit nodes <a href="/kb/1084/sharing#sharing--exit-nodes">shared from other
tailnets</a> or <a href="/kb/1258/mullvad-exit-nodes">Mullvad exit nodes</a></li>
</ul>
<p>We recommend enabling auto-updates and updating all nodes to the latest
version, but it is not required to mitigate this vulnerability.</p>
<p>A server-side change mitigated this vulnerability for other types of affected
nodes.</p>
<h5>Technical details</h5>
<p>Below, we refer to exit nodes, subnet routers, and app connectors as
<em>packet-forwarding nodes</em>, because the details apply to all of them. Specific
types of packet-forwarding nodes are mentioned explicitly where their behavior
is different.</p>
<p>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 <code>"src": "*"</code> in ACLs is equivalent to
<code>"src": ["0.0.0.0/0", "::/0"]</code>, 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.</p>
<p>The attack only works on a LAN because:</p>
<ul>
<li>it relies on next-hop routing, which only works in a LAN</li>
<li>destination IPs are in the subnet router's approved range, or in the <a href="/kb/1015/100.x-addresses">CGNAT
range</a> <code>100.64.0.0/10</code>, which are not routable over the Internet.</li>
</ul>
<h6>Attacks</h6>
<p>Here are several attack scenarios.</p>
<p><strong>Packet-forwarding node on an untrusted LAN.</strong></p>
<p><img src="/files/images/security-bulletins/2024-05-08-01.svg" alt="diagram showing a LAN machine connecting to a victim node"></p>
<p>A malicious host <code>10.0.0.1</code> on the same LAN as the packet-forwarding node
<code>10.0.0.2</code> could craft packets with destination IP of a tailnet node
<code>100.64.0.1</code> (using a command like <code>ip route add 100.64.0.1/32 via 10.0.0.2 dev eth0</code>) 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 <code>10.0.0.1</code> and accept it if the tailnet ACLs allow this
source IP.</p>
<p>This scenario is very similar to a legitimate use-case of
<a href="/kb/1214/site-to-site">site-to-site</a> networking, where two subnets are bridged using
Tailscale subnet routers and the flag <code>--snat-subnet-routes=false</code>.</p>
<p><strong>Malicious shared exit node</strong></p>
<p><img src="/files/images/security-bulletins/2024-05-08-02.svg" alt="diagram showing a malicious exit node connecting a the victim node"></p>
<p>A malicious exit node <code>100.64.0.4</code> from tailnet A could craft packets with
destination IP of tailnet B node <code>100.64.0.3</code> and any source IP other than
<code>100.64.0.4</code>. Due to the built-in <a href="/kb/1084/sharing#quarantine">quarantining</a> of shared
nodes, packets from <code>100.64.0.4</code> are rejected.</p>
<h6>Mitigations</h6>
<p>We implemented 3 separate mitigations for these attacks.</p>
<p><strong>Redefine <code>"src": "*"</code> in ACLs</strong></p>
<p>While <code>*</code> is a convenient shorthand in ACLs, Tailscale users almost never need
to allow connections from any IP. In most cases users intend <code>*</code> as "all other
nodes in my tailnet". As a mitigation for this vulnerability, we redefined <code>*</code>
in <code>src</code> section of ACLs to include:</p>
<ul>
<li>all tailnet nodes</li>
<li>all IPs from approved subnet routes</li>
</ul>
<p>The inclusion of IPs from approved subnet routes is needed for the site-to-site
networking setup.</p>
<p>For users that need the old semantics of <code>*</code> we added a new
<a href="/kb/1337/acl-syntax#src"><code>autogroup:danger-all</code></a>, which matches the old definition of <code>*</code>.</p>
<p><strong>Stateful packet filtering on packet-forwarding nodes</strong></p>
<p>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't belong to
an existing connection are dropped.</p>
<p>Because routing is implemented differently on non-Linux platforms, this
mitigation is only necessary on Linux.</p>
<p>Stateful filtering is enabled by default, except for existing subnet routers
that set <code>--snat-subnet-routes=false</code>. You can disable stateful filtering using
<code>tailscale up --stateful-filtering=false</code>.</p>
<p><strong>Client-side quarantining of shared nodes</strong></p>
<p><a href="/kb/1084/sharing#quarantine">Quarantining</a> 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 <a href="/kb/1072/client-preferences#allow-incoming-connections">"shields up"</a> mode
works within the tailnet.</p>
-
TS-2024-004
https://tailscale.com/security-bulletins/#ts-2024-004
https://tailscale.com/security-bulletins/#ts-2024-004
Mon, 06 May 2024 00:00:00 GMT
<p><strong><em>Description</em></strong>: Unclear network flow logs collection status for alpha testers.</p>
<h5>What happened?</h5>
<p>When <a href="/kb/1219/network-flow-logs">network flow logs</a> 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.</p>
<p>We fixed this bug on April 25, 2024 and the admin console now correctly shows the status of network flow logs for all users.</p>
<h5>Who was affected?</h5>
<p>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.</p>
<h5>What was the impact?</h5>
<p>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.</p>
<h5>What do I need to do?</h5>
<p>No action is needed at this time.</p>
-
TS-2024-003
https://tailscale.com/security-bulletins/#ts-2024-003
https://tailscale.com/security-bulletins/#ts-2024-003
Tue, 23 Apr 2024 00:00:00 GMT
<p><strong><em>Description</em></strong>: Bug in SSH check mode with <code>checkPeriod</code> set to <code>0s</code>.</p>
<h5>What happened?</h5>
<p><a href="/kb/1193/tailscale-ssh#configure-tailscale-ssh-with-check-mode">Check mode</a> in Tailscale SSH forces an SSH client to periodically
re-authenticate when connecting to SSH servers. The period is configured via
the <code>checkPeriod</code> attribute in Tailscale ACLs, and defaults to 12 hours.</p>
<p>A bug in ACL parsing interpreted <code>"checkPeriod": "0s"</code> as unset, and used the
default period of 12 hours instead.</p>
<p>We deployed a fix for the bug in ACL parsing logic on 2024-04-23. SSH clients
in tailnets that set <code>"checkPeriod": "0s"</code> are now correctly prompted for
re-authentication on every connection.</p>
<p>Note that a special value <code>"checkPeriod": "always"</code> is the documented
recommended way to achieve this behavior.</p>
<p>We thank <a href="https://twitter.com/plaidfinch">Finch</a> for reporting this issue.</p>
<h5>Who was affected?</h5>
<p>17 tailnets use Tailscale SSH with <code>"action": "check"</code> and <code>"checkPeriod": "0s"</code>. We notified security contacts for the affected tailnets about this bug.</p>
<h5>What was the impact?</h5>
<p>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.</p>
<h5>What do I need to do?</h5>
<p>No action is needed at this time.</p>
-
TS-2024-002
https://tailscale.com/security-bulletins/#ts-2024-002
https://tailscale.com/security-bulletins/#ts-2024-002
Tue, 30 Jan 2024 00:00:00 GMT
<p><strong><em>Description</em></strong>: We resolved an information disclosure vulnerability in the
<a href="/kb/1073/hello">hello.ts.net</a> service.</p>
<h5>What happened?</h5>
<p>On January 15 2024, we became aware of a potential information disclosure
vulnerability in the <code>hello.ts.net</code> service, which could show the identity of a
different Tailscale user when loaded. The <code>hello.ts.net</code> service receives
identity information and public keys of nodes tied to their IP address. On
November 28 2023, we made a <a href="/blog/choose-your-ip">change</a> to how IPs are assigned to
Tailscale nodes, making them globally non-unique. When the Tailscale service
assigned the same IP to multiple nodes, <code>hello.ts.net</code> 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 <code>hello.ts.net</code>, they would
see another user's name, email, and hostname.</p>
<p>The Tailscale Security Team immediately took <code>hello.ts.net</code> offline while the
fix was in progress. The issue has been fixed and the <code>hello.ts.net</code> service
was restored on January 29 2024.</p>
<h5>Who was affected?</h5>
<p>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.</p>
<p>Regular <a href="/kb/1084/sharing">shared nodes</a> always see unique node IPs and were not
vulnerable in a manner similar to <code>hello.ts.net</code>.</p>
<h5>What was the impact?</h5>
<p>A small number of users had their name, email, and hostname potentially exposed
to other Tailscale users that had nodes sharing the same IP.</p>
<p>In addition, the <code>hello.ts.net</code> service was offline between January 26-29
2024. Several users reported being negatively impacted by this.</p>
<h5>What do I need to do?</h5>
<p>No action is needed at this time.</p>
<p>If you have a dependency on <code>hello.ts.net</code> as a probing target for Tailscale
connectivity, consider using <a href="/kb/1073/hello#does-hellotsnet-have-a-reliability-guarantee">a different probing
mechanism</a>.</p>
-
TS-2024-001
https://tailscale.com/security-bulletins/#ts-2024-001
https://tailscale.com/security-bulletins/#ts-2024-001
Mon, 08 Jan 2024 00:00:00 GMT
<p><strong><em>Description</em></strong>: On Windows before Tailscale version 1.52 and on Linux before
Tailscale 1.54, the <code>tailscale serve</code> and <code>tailscale funnel</code> features allowed
users to serve the contents of directories that their user account could not
access, but which the <code>tailscaled</code> service process could.</p>
<h5>What happened?</h5>
<p>A user could escalate their own file read access by running, for example,
<code>tailscale.exe serve http / C:\</code>, and then browsing to the local HTTP endpoint.</p>
<p>The issue can also occur on Linux if the local administrator enabled an operator
user ID with <code>tailscale up --operator=$USER</code>, as the <code>$USER</code> account could
<code>serve</code> itself files that it could not normally read.</p>
<h5>Who is affected?</h5>
<p>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 <code>--operator</code> access.</p>
<p>This issue can only be triggered by a local user and cannot be triggered
remotely.</p>
<h5>What is the impact?</h5>
<p>This issue enables local privilege escalation (file read access). Access to
certain system files (such as <code>/etc/shadow</code> on Linux) can then be used to obtain
full administrative control over the host.</p>
<h5>What do I need to do?</h5>
<p>On Windows 10 and later, upgrade to Tailscale 1.52 (<a href="/changelog#2023-10-30-client">released 30 October
2023</a>) or later, which resolves the issue.</p>
<p>On Windows 7 and 8, upgrade to Tailscale 1.44.3 (<a href="/changelog#2024-01-08-client">released 8 Jan
2024</a>), which resolves the issue.</p>
<p>On Linux, upgrade to 1.54 (<a href="/changelog#2023-11-15-client">released 15 November 2023</a>) or later,
which resolves the issue.</p>
<p>The best practice is to run the latest stable version, which as of this writing
is <a href="/changelog#2023-12-15-client">1.56.1</a>. Consider turning on <a href="/blog/auto-update-beta">automatic updates</a>.</p>
<p>Use <a href="/kb/1223/funnel">Tailscale ACLs</a> to control the availability of Funnel.</p>
-
TS-2023-009
https://tailscale.com/security-bulletins/#ts-2023-009
https://tailscale.com/security-bulletins/#ts-2023-009
Fri, 22 Dec 2023 00:00:00 GMT
<p><strong><em>Description</em></strong>: <a href="https://trufflesecurity.com/blog/google-oauth-is-broken-sort-of/">The OAuth implementation of Google Workspace</a> allows for the creation of Google accounts associated with a given Workspace domain that are not actually controlled by that workspace, e.g. [email protected]. 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.</p>
<h5>What happened?</h5>
<p>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 <a href="https://tailscale.com/kb/1239/user-approval">user approval</a> 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'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.</p>
<p>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.</p>
<h5>Who is affected?</h5>
<p>Everyone who uses Google Workspace to sign in.</p>
<h5>What is the impact?</h5>
<p>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.</p>
<h5>What do I need to do?</h5>
<p>Tailscale admins should visit <a href="https://login.tailscale.com/admin/users">the Users page of the Tailscale admin console</a> and audit the list of users to see if there are unknown addresses that should not be there. Admins can also <a href="https://tailscale.com/kb/1229/export-user-list">export this list of users</a> as a CSV file to examine offline.</p>
<p>For extra security, you can turn on <a href="https://tailscale.com/kb/1239/user-approval">user approval</a> 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.</p>
-
TS-2023-008
https://tailscale.com/security-bulletins/#ts-2023-008
https://tailscale.com/security-bulletins/#ts-2023-008
Wed, 01 Nov 2023 00:00:00 GMT
<p><strong><em>Description</em></strong>: Privilege escalation bugs in the Tailscale
Kubernetes operator's API proxy allowed authenticated tailnet clients
to send Kubernetes API requests as the operator's service account.</p>
<p>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.</p>
<h5>What happened?</h5>
<p>The Tailscale Kubernetes operator can optionally act as <a href="/kb/1437/kubernetes-operator-api-server-proxy">an API server
proxy</a>
for the cluster'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
<a href="https://kubernetes.io/docs/reference/access-authn-authz/authentication/#user-impersonation">impersonation
headers</a>
to translate tailnet identities to Kubernetes identities.</p>
<p>The operator prior to v1.53.37 has two bugs in the forwarding logic,
which affects different modes of operation:</p>
<ul>
<li>In the default proxy mode that applies Tailscale identity to
proxied requests, incorrect header sanitization allowed a request
with a crafted <code>Connection</code> header to drop the impersonation
headers from the proxied request. This caused the proxied request
to be authenticated as the operator's service account, and inherit
the operator's permissions.</li>
<li>In the
<a href="/kb/1437/kubernetes-operator-api-server-proxy#configuring-api-server-proxy-in-noauth-mode">no-auth</a>
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's identity, with similar
results.</li>
</ul>
<p>The bug was reported by <a href="https://github.com/enj">Mo Khan</a> from Microsoft on
2023-11-01, and fixed on the same day.</p>
<h5>Who is affected?</h5>
<p>Tailnets using <a href="/kb/1437/kubernetes-operator-api-server-proxy">the API server
proxy</a>
in Tailscale Kubernetes operator images with the following tags are affected:</p>
<ul>
<li><code>unstable-v1.53.20</code> or earlier</li>
<li><code>unstable</code> deployed before the tag was updated to 1.53.37, some time
on 2023-11-01.</li>
</ul>
<p>Operator users running in the default operator configuration are
<strong>not</strong> affected, as the API proxy is not enabled by default.</p>
<h5>What is the impact?</h5>
<p>Authenticated tailnet users who have access to the operator'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.</p>
<p>External attackers <strong>cannot</strong> exploit this vulnerability without being
a member of the tailnet.</p>
<h5>What do I need to do?</h5>
<p>Update the Tailscale Kubernetes operator image to version unstable-v1.53.37 or
later.</p>
<p>If you used the official <a href="https://github.com/tailscale/tailscale/blob/main/cmd/k8s-operator/deploy/manifests/operator.yaml">operator manifest
file</a>,
download the new manifest file and run <code>kubectl apply -f manifest.yaml</code>.</p>
<p>If you used the Helm chart, set the
<a href="https://github.com/tailscale/tailscale/blob/ca4c940a4d0ac3274ee91a58e4823afb3c92ae0b/cmd/k8s-operator/deploy/chart/values.yaml#L16"><code>operatorConfig.image.tag</code></a>
to <code>unstable-v1.53.37</code> in the <code>values.yaml</code> file and run <code>helm upgrade <path-to-chart-directory> -n tailscale -f <path-to-values-file></code></p>
<p>If you wrote your own manifest or Helm chart, update the <code>k8s-operator</code> image
tag to <code>unstable-v1.53.37</code> and redeploy it.</p>
-
TS-2023-007
https://tailscale.com/security-bulletins/#ts-2023-007
https://tailscale.com/security-bulletins/#ts-2023-007
Thu, 26 Oct 2023 00:00:00 GMT
<p><strong><em>Description</em></strong>: 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.</p>
<p>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 <a href="https://www.virustotal.com/gui/file/cfbf0c7ef964198e39f9cc97350626673468d311b8626c6b9bef6c95e40e569b">tailscaled.exe 1.46.1 on VirusTotal</a> confirms this.</p>
<h5>What happened?</h5>
<p>Microsoft Defender was flagging Tailscale 1.46.1 as malware. This caused
Defender to quarantine the binaries, meaning they could not run.</p>
<p>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.</p>
<h5>Who is affected?</h5>
<p>People using Defender and Tailscale 1.46.1.</p>
<h5>What is the impact?</h5>
<p>Tailscale will not run on affected machines.</p>
<h5>What do I need to do?</h5>
<p>To resolve this issue on your own tailnet, you can take either or both of 2
approaches:</p>
<ol>
<li>Update to a newer version of Tailscale. Newer versions are not affected by this problem.</li>
<li>Create an exception in Microsoft Defender. Microsoft has published <a href="https://support.microsoft.com/en-us/windows/add-an-exclusion-to-windows-security-811816c0-4dfd-af4a-47e4-c301afe13b26">instructions explaining how to do this</a>.</li>
<li>Update Microsoft Defender.</li>
</ol>
-
TS-2023-006
https://tailscale.com/security-bulletins/#ts-2023-006
https://tailscale.com/security-bulletins/#ts-2023-006
Tue, 22 Aug 2023 00:00:00 GMT
<p><strong><em>Description</em></strong>: 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).</p>
<p>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.</p>
<h5>What happened?</h5>
<p>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 <code>0</code>, 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.</p>
<p>Depending on the router'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.</p>
<p>Any firewall software running on the node would be able to stop unwanted UDP
packets, if configured to do so.</p>
<p>The bug was discovered and fixed on 2023-08-21, and the fix was published in
the 1.48.1 release.</p>
<h5>Who is affected?</h5>
<p>The only known vulnerable routers are those running the <code>miniupnpd</code> 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.</p>
<p>A small percentage of nodes listened on router port <code>0</code> via UPnP before the
mitigation was deployed. All nodes running vulnerable versions now have UPnP
port mapping disabled.</p>
<h5>What is the impact?</h5>
<p>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.</p>
<p>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.</p>
<h5>What do I need to do?</h5>
<p>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.</p>
<p>We do not recommend disabling UPnP or other port-mapping protocols on your
router. These protocols greatly improve connectivity for Tailscale and other
applications.</p>
-
TS-2023-005
https://tailscale.com/security-bulletins/#ts-2023-005
https://tailscale.com/security-bulletins/#ts-2023-005
Fri, 28 Apr 2023 00:00:00 GMT
<p><strong><em>Description</em></strong>: An issue in the Tailscale coordination server in device
reauthentication logic caused previously authenticated and tagged devices to
lose their <a href="/kb/1068/acl-tags/">ACL tags</a> upon reauthentication.</p>
<h5>What happened?</h5>
<p>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.</p>
<p>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.</p>
<h5>Who is affected?</h5>
<p>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 <a href="/kb/1225/fast-user-switching/">fast
user switching</a> to switch between multiple
tailnets.</p>
<p>We have notified affected organizations where we have <a href="/kb/1224/contact-preferences/#setting-the-security-issues-email">security
contacts</a>.</p>
<h5>What is the impact?</h5>
<p>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.</p>
<p>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.</p>
<h5>What do I need to do?</h5>
<p><strong>If you were not contacted by Tailscale, no action is required.</strong> 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.</p>
-
TS-2023-004
https://tailscale.com/security-bulletins/#ts-2023-004
https://tailscale.com/security-bulletins/#ts-2023-004
Tue, 04 Apr 2023 00:00:00 GMT
<p><strong><em>Description</em></strong>: 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.</p>
<h4>What happened?</h4>
<p>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.</p>
<h4>Who is affected?</h4>
<p><strong>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</strong>. Additional tailnets created by GitHub organizations could be verified to definitely not have been renamed in that time period based on organization membership.</p>
<p><strong>No tailnets were definitively found to have been affected</strong>. 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 <a href="/kb/1224/contact-preferences/#setting-the-security-issues-email">security contact</a> for that tailnet if that happens.</p>
<h4>What is the impact?</h4>
<p><strong>A renamed GitHub organization may have had their previous tailnet visible to a newly created GitHub organization with the same name.</strong>
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.</p>
<p>There is no evidence of this vulnerability being purposefully triggered or exploited.</p>
<h4>What do I need to do?</h4>
<p><strong>No action is required</strong>. Tailscale has deployed a fix to the coordination server as of 2023-03-30.</p>
<p>GitHub organizations which were previously renamed and lost access to their tailnet should <a href="/contact/support/">contact support</a>. When renaming a GitHub organization, <a href="/contact/support/?type=sso">contact support</a> to migrate the tailnet to the new GitHub organization.</p>
<h4>Credits</h4>
<p>We would like to thank <a href="https://6f.io/">Thomas Way</a> for reporting this issue.</p>
-
TS-2023-003
https://tailscale.com/security-bulletins/#ts-2023-003
https://tailscale.com/security-bulletins/#ts-2023-003
Wed, 22 Mar 2023 00:00:00 GMT
<p><strong><em>Reference</em></strong>: <a href="https://www.cve.org/CVERecord?id=CVE-2023-28436">CVE-2023-28436</a></p>
<p><strong><em>Severity</em></strong>: Medium</p>
<p><strong><em>CVSS vector string</em></strong>: CVSS:3.0/AV:A/AC:L/PR:H/UI:R/S:C/C:H/I:N/A:N</p>
<p><strong><em>Description</em></strong>: 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.</p>
<p><strong><em>Affected platforms</em></strong>: FreeBSD</p>
<p><strong><em>Patched Tailscale client versions</em></strong>: v1.38.2 or later</p>
<h4>What happened?</h4>
<p>A difference in the behavior of the FreeBSD <code>setgroups</code> 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.</p>
<h4>Who is affected?</h4>
<p>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.</p>
<p>We have notified affected organizations where we have <a href="/kb/1224/contact-preferences/#setting-the-security-issues-email">security contacts</a>.</p>
<h4>What is the impact?</h4>
<p>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:</p>
<ul>
<li>The destination node was a FreeBSD device with Tailscale SSH enabled;</li>
<li>Tailscale SSH access rules permitted access for non-root users; and</li>
<li>A non-interactive SSH session was used.</li>
</ul>
<h4>What do I need to do?</h4>
<p>If you are running Tailscale on FreeBSD, upgrade to v1.38.2 or later to remediate the issue. Admins of a tailnet can view <a href="https://login.tailscale.com/admin/machines?q=version%3A%3C1.38.2+freebsd">FreeBSD nodes with unpatched versions</a> in the admin console.</p>
<p>To update the local ports tree in advance of what's available upstream, you can:</p>
<ol>
<li><code>cd /usr/ports/security/tailscale</code></li>
<li>edit the Makefile to set <code>PORTVERSION</code> to <code>1.38.2</code></li>
<li><code>make makesum</code></li>
<li><code>make install</code></li>
</ol>
<p>Tailscale SSH on other platforms is not affected.</p>
<h4>Credits</h4>
<p>We would like to thank <a href="https://www.linkedin.com/in/rbelgrave/">Ryan Belgrave</a> for reporting this issue.</p>
-
TS-2023-002
https://tailscale.com/security-bulletins/#ts-2023-002
https://tailscale.com/security-bulletins/#ts-2023-002
Tue, 24 Jan 2023 00:00:00 GMT
<p><strong><em>Description</em></strong>: An issue in the Tailscale coordination server allowed nodes with expired node keys to continue communicating with other nodes in a tailnet.</p>
<h4>What happened?</h4>
<p>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.</p>
<h4>Who is affected?</h4>
<p><strong>All tailnets with nodes whose node keys expired prior to 2023-01-12 may have been affected</strong>. Admins of a tailnet can view <a href="https://login.tailscale.com/admin/machines?q=disabled%3Aexpired">nodes with expired node keys</a> in the admin console.</p>
<h4>What is the impact?</h4>
<p>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:</p>
<ul>
<li>The peer node was in the same tailnet as, or shared into a tailnet with the node with the expired node key;</li>
<li>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;</li>
<li>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</li>
<li>Tailscale had not deployed a change to the coordination server since the node key expiry.</li>
</ul>
<h4>What do I need to do?</h4>
<p><strong>No action is required</strong>. Tailscale has deployed a fix to the coordination server as of 2023-01-11.</p>
<p><strong>Upgrade clients to v1.36 or later for an additional mitigation</strong>. 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.</p>
<h4>Credits</h4>
<p>We would like to thank <a href="https://me.ellisd.com">Derek Ellis</a> and <a href="https://www.cranksecurity.com/">Alex Eiser</a> for reporting this issue.</p>
-
TS-2023-001
https://tailscale.com/security-bulletins/#ts-2023-001
https://tailscale.com/security-bulletins/#ts-2023-001
Tue, 17 Jan 2023 00:00:00 GMT
<p><strong><em>Description</em></strong>: 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.</p>
<h4>What happened?</h4>
<p>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.</p>
<p>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.</p>
<p>The bug was introduced on 2022-09-14, reported to us on 2023-01-11, and remediated on 2023-01-12.</p>
<h4>Who is affected?</h4>
<p>All tailnets with nodes are affected.</p>
<h4>What is the impact?</h4>
<p><strong>This vulnerability was not triggered or exploited</strong>. 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.</p>
<p>Admins of a tailnet can review <a href="https://login.tailscale.com/admin/machines?q=shared%3Aout">nodes that are shared out of their tailnet</a> in the admin console. Sharing invites are logged as <a href="/kb/1203/audit-logging/#events-for-shared-nodes">events in configuration audit logs</a>. Admins can also review <a href="https://login.tailscale.com/admin/logs?events=%5B%22INVITECREATENODE_SHARE%22%2C%22INVITEACCEPTNODE_SHARE%22%5D">invites created and accepted in their configuration audit logs</a> in the admin console.</p>
<h4>What do I need to do?</h4>
<p><strong>No action is required</strong>. Tailscale has deployed a fix to the coordination server as of 2023-01-12, and verified that the vulnerability was not exploited.</p>
<h4>Credits</h4>
<p>We would like to thank Benjamin Roberts (<a href="https://github.com/tsujamin">tsujamin</a>) for reporting this issue.</p>
-
TS-2022-004
https://tailscale.com/security-bulletins/#ts-2022-004
https://tailscale.com/security-bulletins/#ts-2022-004
Mon, 21 Nov 2022 00:00:00 GMT
<p><strong><em>Reference</em></strong>: <a href="https://www.cve.org/CVERecord?id=CVE-2022-41924">CVE-2022-41924</a></p>
<p><strong><em>Severity</em></strong>: Critical</p>
<p><strong><em>CVSS vector string</em></strong>: CVSS:3.0/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:L/A:H</p>
<p><strong><em>Description</em></strong>: A vulnerability identified in the Tailscale Windows client allows a malicious website to reconfigure the Tailscale daemon <code>tailscaled</code>, which can then be used to remotely execute code.</p>
<p><strong><em>Affected platforms</em></strong>: Windows</p>
<p><strong><em>Patched Tailscale client versions</em></strong>: v1.32.3 or later, v1.33.257 or later (unstable)</p>
<h4>What happened?</h4>
<p>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.</p>
<h4>Who is affected?</h4>
<p>All Windows clients prior to version v1.32.3 are affected.</p>
<h4>What is the impact?</h4>
<p>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.</p>
<p>Reviewing all logs confirms this vulnerability was not triggered or exploited.</p>
<h4>What do I need to do?</h4>
<p><strong>If you are running Tailscale on Windows, upgrade to v1.32.3 or later to remediate the issue.</strong></p>
<h4>Credits</h4>
<p>We would like to thank <a href="https://github.com/emilytrau">Emily Trau</a> and <a href="https://twitter.com/JJJollyjim">Jamie McClymont (CyberCX)</a> for reporting this issue. Further detail is available in <a href="https://emily.id.au/tailscale">their blog post</a>.</p>
-
TS-2022-005
https://tailscale.com/security-bulletins/#ts-2022-005
https://tailscale.com/security-bulletins/#ts-2022-005
Mon, 21 Nov 2022 00:00:00 GMT
<p><strong><em>Reference</em></strong>: <a href="https://www.cve.org/CVERecord?id=CVE-2022-41925">CVE-2022-41925</a></p>
<p><strong><em>Severity</em></strong>: Low</p>
<p><strong><em>CVSS vector string</em></strong>: CVSS:3.0/AV:A/AC:L/PR:N/UI:R/S:C/C:L/I:N/A:N</p>
<p><strong><em>Description</em></strong>: 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.</p>
<p><strong><em>Affected platforms</em></strong>: All</p>
<p><strong><em>Patched Tailscale client versions</em></strong>: v1.32.3 or later, v1.33.257 or later (unstable)</p>
<h4>What happened?</h4>
<p>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.</p>
<h4>Who is affected?</h4>
<p>All Tailscale clients prior to version v1.32.3 are affected.</p>
<h4>What is the impact?</h4>
<p>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.</p>
<p>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.</p>
<p>There is no evidence of this vulnerability being purposefully triggered or exploited.</p>
<h4>What do I need to do?</h4>
<p><strong>Upgrade to v1.32.3 or later to remediate the issue.</strong></p>
<h4>Credits</h4>
<p>We would like to thank <a href="https://github.com/emilytrau">Emily Trau</a> and <a href="https://twitter.com/JJJollyjim">Jamie McClymont (CyberCX)</a> for reporting this issue. Further detail is available in <a href="https://emily.id.au/tailscale">their blog post</a>.</p>
-
TS-2022-003
https://tailscale.com/security-bulletins/#ts-2022-003
https://tailscale.com/security-bulletins/#ts-2022-003
Tue, 14 Jun 2022 00:00:00 GMT
<p><strong><em>Description</em></strong>: 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 <a href="https://docs.github.com/en/enterprise-cloud@latest/authentication/authenticating-with-saml-single-sign-on/about-authentication-with-saml-single-sign-on">SAML authentication</a> in <a href="https://docs.github.com/en/get-started/onboarding/getting-started-with-github-enterprise-cloud">GitHub Enterprise Cloud</a>, where Tailscale is not an <a href="https://docs.github.com/en/enterprise-cloud@latest/authentication/keeping-your-account-and-data-secure/authorizing-oauth-apps">authorized OAuth app</a> for their organization.</p>
<h4>What happened?</h4>
<p>Tailscale silently ignored a 403 error to the <a href="https://docs.github.com/en/enterprise-cloud@latest/rest/orgs/orgs#list-organizations-for-the-authenticated-user">GitHub API query for organizations for an authenticated user</a> 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.</p>
<p>As a result, a user identity could bypass the organization’s OAuth app access restrictions, and create a tailnet for the GitHub organization.</p>
<h4>Who is affected?</h4>
<p><strong>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</strong>, 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.</p>
<p>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.</p>
<p>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 <code>$your-org</code>, navigate to</p>
<pre><code>https://github.com/organizations/$your-org/settings/oauth_application_policy
</code></pre>
<h4>What is the impact?</h4>
<p><strong>A tailnet may have been created for a GitHub organization without their GitHub organization owner’s approval</strong>. 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.</p>
<h4>What do I need to do?</h4>
<p><strong>If you are affected, you will need to re-authenticate to keep using your tailnet</strong>. 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 <a href="https://docs.github.com/en/organizations/restricting-access-to-your-organizations-data/approving-oauth-apps-for-your-organization">Approving OAuth Apps for your organization</a>.</p>
<p>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.</p>
<h4>Credits</h4>
<p>We would like to thank <a href="https://github.com/acuteaura">Aurelia</a> for reporting the issue. Further detail is available in <a href="https://notes.acuteaura.net/posts/github-enterprise-security/">their blog post</a>.</p>
-
TS-2022-002
https://tailscale.com/security-bulletins/#ts-2022-002
https://tailscale.com/security-bulletins/#ts-2022-002
Wed, 11 May 2022 00:00:00 GMT
<p><strong><em>Description</em></strong>: 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.</p>
<h4>What happened?</h4>
<p>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.</p>
<h4>Who is affected?</h4>
<p><strong>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</strong>. We have notified affected users.</p>
<h4>What is the impact?</h4>
<p><strong>Six connections between devices belonging to different users were made, but no traffic of concern flowed between them</strong>. 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.</p>
<p><strong>Impacted users could see some metadata about other users and devices from their devices’ clients</strong>, including users’ names, devices’ host names, and devices’ Tailscale IP addresses. This information <em>was</em> viewed by at least one user, who reported it to us.</p>
<p><strong>One user, the tailnet Admin, was able to see all users and devices added to the shared gmail.com tailnet</strong>. 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 <em>was</em> viewed by the user, who reported it to us.</p>
<h4>What do I need to do?</h4>
<p><strong>No action is required</strong>. Tailscale has deployed a fix to the coordination server as of 2022-05-11 13:12 PT.</p>
<p>New users registering for a Tailscale account with a gmail.com email address will create a tailnet as normal.</p>
<h4>Credits</h4>
<p>We would like to thank <a href="https://www.linkedin.com/in/davidswafford/">David Swafford</a> and George Constantinides for reporting the issue.</p>
-
TS-2022-001
https://tailscale.com/security-bulletins/#ts-2022-001
https://tailscale.com/security-bulletins/#ts-2022-001
Mon, 07 Feb 2022 00:00:00 GMT
<p><strong><em>Description</em></strong>: 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.</p>
<h4>What happened?</h4>
<p>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.</p>
<h4>Who is affected?</h4>
<p><strong>A total of five devices belonging to four users were affected between 2021-06-15 and 2022-02-04</strong>, when the issue was reported and remediated. We have contacted the two users we were able to identify.</p>
<p><strong>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.</strong> Without being asked to select which GitHub user or organization tailnet to connect to, your device would have connected to a tailnet.</p>
<h4>What is the impact?</h4>
<p><strong>No device connected to another device in the tailnet.</strong> 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.</p>
<p><strong>A device’s existence and some metadata was shared with devices added later in time.</strong> 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.</p>
<p>There is no evidence of this vulnerability being purposefully triggered or exploited.</p>
<h4>Credits</h4>
<p>We would like to thank Marvin Boothby (<a href="https://github.com/boothb">boothb</a>) for reporting the issue.</p>