Hacker News 中文摘要

RSS订阅

TS-2026-009:Tailscale SSH中不安全的参数处理导致允许root访问 -- TS-2026-009: Insecure argument handling in Tailscale SSH permitted root access

文章摘要

Tailscale Serve和Funnel存在一个漏洞,当收到格式错误的HTTP请求时,会导致CPU核心被无限占用,造成拒绝服务。该问题已在1.98.9版本中修复。

文章总结

好的,这是对Tailscale安全公告主要内容的中文重述,已保留关键细节并删减了与主题无关的内容。

Tailscale 安全公告摘要

以下是对近期Tailscale安全公告的总结,涵盖了多个已修复的安全漏洞。这些漏洞主要影响Tailscale Serve、Funnel、SSH、Services等功能,以及部分平台和配置。建议所有用户升级到最新版本(通常为1.98.9或更高版本)以确保安全。


1. 拒绝服务攻击 (TS-2026-008)

  • 问题: 向运行Tailscale Serve或Funnel的节点发送一个格式错误的HTTP请求,会导致CPU核心被无限期占用,造成拒绝服务。
  • 影响: 攻击者可通过发送特制请求,永久消耗目标节点的一个CPU核心。对于Serve,请求可来自tailnet内任何有权限的节点;对于Funnel,请求可来自互联网上任何未认证的主机。
  • 修复: Tailscale 1.98.9及更高版本。

2. SSH权限提升 (TS-2026-009)

  • 问题: Tailscale SSH在处理用户名时,未拒绝以-字符开头的用户名。在Linux平台上,这类用户名会被作为参数传递给getent命令,从而被解释为命令选项,导致攻击者可以获取root权限。
  • 影响: 拥有SSH访问权限的用户,可以通过使用用户名-i连接,绕过ACL策略,获得root会话。
  • 修复: Tailscale 1.98.9及更高版本。

3. 服务端口过滤不足 (TS-2026-007)

  • 问题: 在1.98.9之前的版本中,广告了服务的节点可能会接受发往其未广告端口的流量,并将这些数据包转发到主机回环接口上监听相同端口的进程,从而允许远程访问。
  • 影响: 拥有Tailscale Service ACL权限的用户,可以通过访问未广告的端口,连接到托管该服务的节点上的回环监听进程。
  • 修复: Tailscale 1.98.9及更高版本。

4. SSH UID绕过 (TS-2026-006)

  • 问题: Tailscale SSH允许用户通过数字UID进行连接,但ACL中的root用户限制只检查用户名。因此,用户可以通过0@host的方式绕过限制,以root身份访问。
  • 影响: 拥有SSH访问权限的用户,可以使用用户名0root身份进行SSH连接,违反了ACL策略。
  • 修复: Tailscale 1.98.9及更高版本。

5. Unix Socket代理权限提升 (TS-2026-005)

  • 问题: Tailscale Serve的Unix socket代理目标未限制为root用户。非root的Tailscale操作员可以通过LocalAPI配置Serve,让以root身份运行的tailscaled进程代理到其本无权访问的特权Unix socket。
  • 影响: 非root的Tailscale操作员可以导致tailscaled进程连接到其本无法访问的特权Unix socket。
  • 修复: Tailscale 1.98.9及更高版本。

6. SSH Unix Socket转发符号链接绕过 (TS-2026-004)

  • 问题: Tailscale SSH的Unix socket转发在检查文件系统权限时,仅进行路径的文本匹配。攻击者可以创建一个指向受保护资源(如/var/run/docker.sock)的符号链接,从而在SSH连接中访问该资源。
  • 影响: 非特权用户可以通过符号链接,访问远程主机上的特权Unix socket。
  • 修复: Tailscale 1.98.9及更高版本。

7. OAuth令牌泄露 (TS-2026-003)

  • 问题: Tailscale协调服务器的一个bug导致在审计日志中记录了完整的OAuth客户端访问令牌。
  • 影响: 拥有审计日志访问权限的tailnet管理员可以从日志中检索到OAuth访问令牌,并在其有效期内(1小时)使用它们向Tailscale API发起授权请求。
  • 修复: 服务器端已修复。新创建的令牌在审计日志中会被脱敏处理。所有历史令牌已过期,用户无需操作。

8. Web界面ACL绕过 (TS-2026-002)

  • 问题: Tailscale客户端的本地Web界面中,/api/routes端点存在一个bug。即使调用者没有相应的授权,如果请求体为空,该端点也会将退出节点和子网路由设置重置为空状态。
  • 影响: 恶意的tailnet节点可以禁用其他运行Web界面的节点的退出节点,并清除其广告的子网路由。
  • 修复: Tailscale 1.98.0及更高版本。

9. tssentineld命令注入 (TS-2026-001)

  • 问题: macOS上的tssentineld服务在通过/bin/sh -c sudo -u [username]命令重启Tailscale时,使用了简单的字符串模板替换用户名。攻击者可以通过修改用户名或操纵tssentineld的内存来注入恶意命令。
  • 影响: 恶意本地用户可以以root权限执行任意命令。
  • 修复: Tailscale 1.94.0及更高版本。

10. Tailnet Lock签名检查失效 (TS-2025-008)

  • 问题: 在启用了Tailnet Lock的tailnet中,未指定--statedir--statetailscaled节点无法存储受信任的签名节点列表,从而跳过了对节点签名的检查。
  • 影响: 两个或多个未签名且未设置状态目录的节点之间可以相互通信,绕过了Tailnet Lock的安全策略。
  • 修复: Tailscale 1.90.8及更高版本。建议为所有节点设置状态目录。

11. 一次性认证密钥重用 (TS-2025-007)

  • 问题: 由于检查时间和使用时间(TOCTOU)问题,多个节点可以在几乎同一时间使用同一个一次性认证密钥进行注册。
  • 影响: 一次性认证密钥可以被多次使用来注册多个节点。
  • 修复: 服务器端已修复,用户无需操作。

12. 共享子网路由器协议过滤失效 (TS-2025-006)

  • 问题: 作为子网路由器并与其他tailnet共享的节点,其ACL中的协议过滤器(如udp:1234)失效,会允许所有协议(TCP、UDP等)的连接。
  • 影响: 本地和外部tailnet成员可以超出其授权范围,使用任意协议与这些节点建立连接。
  • 修复: 服务器端已修复,用户无需操作。

13. MDM认证密钥日志泄露 (TS-2025-005)

  • 问题: Tailscale 1.84.0版本的一个改动导致macOS和iOS设备上所有MDM提供的配置值(包括认证密钥)被记录并上传到日志服务器。
  • 影响: MDM分发的认证密钥被上传到Tailscale日志服务器。虽然只有Tailscale员工可以访问,但存在泄露风险。
  • 修复: Tailscale 1.86.4及更高版本。建议升级并轮换可重用或预签名的认证密钥。

14. 共享域名Tailnet问题 (TS-2025-004)

  • 问题: 使用共享公共邮箱域名(如gmail.com)的用户可能会意外加入同一个tailnet,导致节点暴露给其他不相关的用户。
  • 影响: 恶意用户可能加入他人的tailnet并访问其节点上的开放端口。恶意管理员可能创建tailnet并诱骗用户加入,从而访问其节点。
  • 修复: 新创建的tailnet默认启用用户审批。建议共享域名tailnet的用户联系支持分解tailnet,或启用用户/设备审批。

15. DERP服务器网格认证时序攻击 (TS-2025-003)

  • 问题: DERP服务器在验证网格认证密钥时使用了不安全的非恒定时间比较,攻击者可以通过侧信道时序攻击发现密钥。
  • 影响: 攻击者可以枚举连接到DERP服务器的所有对等节点信息,或通过ClosePeer API发起拒绝服务攻击。
  • 修复: 所有Tailscale管理的DERP服务器已更新并轮换了密钥。自建DERP服务器的用户需更新并轮换密钥。

16. Grafana代理权限提升 (TS-2025-002)

  • 问题: Tailscale Grafana代理未剥离来自客户端的X-Webauth-*头,允许恶意tailnet节点伪造这些头,从而冒充其他用户。
  • 影响: 受Grafana代理保护的Grafana实例可能遭受来自tailnet成员的权限提升攻击。
  • 修复: 更新Grafana代理到最新版本。

17. 管理控制台会话超时绕过 (TS-2025-001)

  • 问题: 管理控制台的会话超时功能在处理用户切换多个tailnet时存在bug,可能导致用户在超时后仍能继续访问。
  • 影响: 拥有严格超时配置的tailnet用户,可以通过在管理控制台中切换到其他超时限制较宽松的tailnet来延长自己的访问时间。
  • 修复: 服务器端已修复,用户无需操作。

18. SSH会话记录失败 (TS-2024-013)

  • 问题: 强制使用SSH会话记录的部署中,当tsrecorder无法写入存储后端或会话建立后tsrecorder不可达时,SSH会话可能无法被记录。
  • 影响: 用户可以在记录失败的情况下短暂执行命令。
  • 修复: Tailscale 1.78.0及更高版本。

19. Funnel被用于钓鱼 (TS-2024-012)

  • 问题: 恶意用户滥用Tailscale Funnel托管钓鱼页面。
  • 影响: 部分Facebook用户可能因此泄露了凭证。
  • 修复: 已关闭相关页面并添加了检测机制。

20. SCIM组名泄露 (TS-2024-011)

  • 问题: ACL编辑器未检查SCIM组名是否属于当前tailnet,允许用户在其他tailnet的ACL规则中使用这些组名,从而探测有效的SCIM组名。
  • 影响: 恶意用户可能了解到其他tailnet中使用的SCIM组名。
  • 修复: 服务器端已修复,用户无需操作。

21. 浏览器缓存导致ACL误编辑 (TS-2024-010)

  • 问题: 在管理控制台中切换tailnet时,浏览器缓存的未保存ACL更改可能被错误地应用到另一个tailnet上。
  • 影响: 管理员可能用一个tailnet的ACL覆盖另一个tailnet的ACL。
  • 修复: 服务器端已修复。建议多tailnet的管理员检查ACL的正确性。

22. API凭证通过明文HTTP泄露 (TS-2024-009)

  • 问题: Tailscale API的明文HTTP处理器会为包含凭证的请求返回302重定向,导致凭证在重定向过程中被暴露。
  • 影响: 通过明文HTTP连接的API客户端可能将凭证暴露给网络中介。
  • 修复: 服务器端已修复,现在会拒绝包含凭证的明文HTTP请求并自动吊销相关API密钥。

23. 审计和网络流日志部分丢失 (TS-2024-008)

  • 问题: 日志处理服务中的一个整数溢出导致约14%的客户日志被非确定性丢弃。
  • 影响: 部分审计日志和网络流日志条目可能丢失。
  • 修复: 服务器端已修复,用户无需操作。

24. macOS/iOS DNS解析错误 (TS-2024-007)

  • 问题: 在macOS和iOS客户端上,使用分割DNS配置时,对裸tailnet节点名的DNS查询可能偶尔返回错误结果。
  • 影响: 攻击者可能利用此漏洞冒充节点上的非TLS服务。
  • 修复: Tailscale 1.68.0及更高版本。

25. SSO提供商迁移影响受邀用户 (TS-2024-006)

  • 问题: 内部工具在迁移tailnet的SSO提供商时,错误地迁移了所有成员(包括受邀的外部用户)的SSO提供商。
  • 影响: 部分受邀用户因SSO提供商被错误更改而无法登录。
  • 修复: 服务器端已修复,用户无需操作。

26. 子网路由器和退出节点入站包过滤不足 (TS-2024-005)

  • 问题: 在1.66.0之前的版本中,Linux上的退出节点、子网路由器和应用连接器可能允许来自其局域网(LAN)的入站连接。
  • 影响: 与这些节点在同一LAN上的设备可以连接到tailnet节点上被ACL允许的端口。
  • 修复: Tailscale 1.66.0及更高版本。同时,服务器端重新定义了ACL中"src": "*"的含义以缓解此问题。

27. 网络流日志状态显示不清 (TS-2024-004)

  • 问题: 网络流日志功能从内测转为公测时,管理控制台的设置未能正确连接内测状态,导致部分内测用户无法看到日志仍在收集。
  • 影响: 受影响tailnet的管理员可能未意识到网络流日志仍在收集。
  • 修复: 服务器端已修复,用户无需操作。

28. SSH检查模式checkPeriod解析错误 (TS-2024-003)

  • 问题: ACL解析中的一个bug将"checkPeriod": "0s"解释为未设置,从而使用了默认的12小时周期。
  • 影响: 设置了"checkPeriod": "0s"的tailnet,其SSH客户端每12小时才需要重新认证,而非每次连接。
  • 修复: 服务器端已修复,用户无需操作。

29. hello.ts.net信息泄露 (TS-2024-002)

  • 问题: 由于IP分配方式的改变,hello.ts.net服务可能随机显示另一个Tailscale用户的身份信息。
  • 影响: 少数用户的名字、邮箱和主机名可能被泄露给其他用户。
  • 修复: 服务已修复并恢复上线。

30. Serve/Funnel本地文件读取权限提升 (TS-2024-001)

  • 问题: 在Windows和Linux上,用户可以通过tailscale serve命令,让tailscaled进程代理其本无权访问的目录内容。
  • 影响: 本地用户可以通过此漏洞提升文件读取权限,甚至获取系统控制权。
  • 修复: Windows升级到1.52,Linux升级到1.54。

31. Google Workspace OAuth漏洞 (TS-2023-009)

  • 问题: Google Workspace的OAuth实现允许创建与Workspace域关联但不受其控制的Google账户,这些账户可能在被删除后仍能访问Tailscale。
  • 影响: 使用Google Workspace登录的tailnet中可能存在无法被Workspace管理员删除的Tailscale用户。
  • 修复: 服务器端已修复,阻止个人Google账户登录与Workspace关联的tailnet。建议管理员审计用户列表并启用用户审批。

32. Kubernetes Operator API代理权限提升 (TS-2023-008)

  • 问题: Tailscale Kubernetes Operator的API代理存在两个bug,允许经过认证的tailnet客户端以Operator的服务账户身份发送Kubernetes API请求。
  • 影响: 拥有API代理访问权限的用户可以获取Operator的权限,并可能进一步提权。
  • 修复: 更新Operator镜像到unstable-v1.53.37或更高版本。

33. Microsoft Defender误报 (TS-2023-007)

  • 问题: Microsoft Defender将Tailscale 1.46.1误报为恶意软件。
  • 影响: Tailscale无法在受影响机器上运行。
  • 修复: Microsoft已更新Defender,解决了误报问题。用户也可升级到新版本或创建Defender例外。

34. UPnP导致UDP端口暴露 (TS-2023-006)

  • 问题: Tailscale客户端通过UPnP请求端口映射时,某些路由器会将请求端口0解释为监听所有外部端口,导致节点所有UDP端口暴露。
  • 影响: 节点上的UDP服务可能收到来自外部网络的流量,存在被攻击风险。
  • 修复: 协调服务器已禁用UPnP端口映射。升级到1.48.1可恢复。

35. 设备重新认证后ACL标签丢失 (TS-2023-005)

  • 问题: 协调服务器在处理设备重新认证时存在bug,导致已认证并打标签的设备在重新认证后丢失其ACL标签。
  • 影响: 设备标签被移除,其身份和网络权限可能发生改变。
  • 修复: 服务器端已修复。受影响用户需重新应用标签。

36. GitHub组织重命名导致tailnet关联错误 (TS-2023-004)

  • 问题: Tailscale将GitHub组织创建的tailnet映射到组织名称而非ID。如果组织被重命名,新组织可能获得原组织的tailnet访问权。
  • 影响: 重命名的GitHub组织可能将其tailnet暴露给同名的后续组织。
  • 修复: 服务器端已修复,用户无需操作。

37. FreeBSD SSH组ID权限提升 (TS-2023-003)

  • 问题: FreeBSD上setgroups系统调用的行为差异导致Tailscale SSH未正确限制用户组,使用了tailscaled进程的egid。
  • 影响: SSH命令可能以比ACL规则指定的更高权限的组ID运行。
  • 修复: Tailscale 1.38.2及更高版本。

38. 节点密钥过期后连接未中断 (TS-2023-002)

  • 问题: 协调服务器的一个bug导致在netmap没有变化时,过期的节点密钥不会立即从netmap中移除。
  • 影响: 节点间的连接在密钥过期后仍可持续一段时间。
  • 修复: 服务器端已修复,用户无需操作。

39. 节点共享邀请被未授权创建 (TS-2023-001)

  • 问题: 节点共享逻辑中的一个bug允许知道目标节点数据库ID的恶意用户为自己创建并接受共享邀请。
  • 影响: 理论上,攻击者可以未经授权地共享其他tailnet的节点给自己。
  • 修复: 服务器端已修复,用户无需操作。

40. Windows客户端DNS重绑定 (TS-2022-004)

  • 问题: Windows客户端的本地API绑定到本地TCP socket,且通信未加密,允许恶意网站通过DNS重绑定劫持API请求。
  • 影响: 攻击者可以远程执行代码。
  • 修复: Tailscale 1.32.3及更高版本。

41. 对等API DNS重绑定 (TS-2022-005)

  • 问题: 对等API易受DNS重绑定攻击,允许恶意网站访问环境变量。
  • 影响: 攻击者可以读取环境变量中的凭证,或通过Taildrop发送恶意文件。
  • 修复: Tailscale 1.32.3及更高版本。

42. GitHub OAuth认证绕过 (TS-2022-003)

  • 问题: Tailscale在GitHub OAuth流程中静默忽略了403错误,允许用户为未授权Tailscale的GitHub组织创建tailnet。
  • 影响: 可能为GitHub组织创建了未经其所有者批准的tailnet。
  • 修复: 服务器端已修复。受影响用户需重新认证。

43. Gmail共享tailnet意外创建 (TS-2022-002)

  • 问题: 协调服务器的一个bug导致意外创建了一个共享的gmail.com tailnet,新注册的gmail用户都加入了该共享tailnet。
  • 影响: 44名用户的59台设备被加入共享tailnet,部分用户之间发生了连接,并可能看到其他用户和设备的元数据。
  • 修复: 服务器端已修复,用户无需操作。

44. GitHub空用户名tailnet (TS-2022-001)

  • 问题: 当GitHub返回500错误时,Tailscale可能将其解释为授权给一个空的GitHub用户名,并将设备连接到与该空用户名关联的tailnet。
  • 影响: 5台设备被连接到错误的tailnet,但未与其他设备建立连接。
  • 修复: 服务器端已修复。

评论总结

根据评论内容,总结如下:

主要观点与论据:

  1. 漏洞历史与严重性:评论1指出该漏洞属于古老且经典的bug类型,可追溯至AIX 3时代,通过SSH访问时以-i用户名登录可获取root权限。

    • 关键引用:"This is such a venerable and ancient class of bugs... you could log in as -i and get a root login."
  2. 修复方式争议:评论4批评Tailscale仅拒绝以破折号开头的用户名,认为正确修复应使用--分隔参数。

    • 关键引用:"Really? That's the fix? A proper fix is to use '--' to separate arguments."
  3. 对Tailscale SSH的信任度:评论5、6、8、11表达不信任,认为OpenSSH安全性更可靠,或指出Tailscale SSH曾导致其他问题(如占用端口22),且多次出现root提权漏洞。

    • 关键引用:"I feel like OpenSSH's security record is pretty unbeatable... not sure why I'd swap over"(评论5);"Tailscale SSH has caused me other problems... it takes over port 22"(评论6);"replacing a 25-year-old battle-tested codebase with a startup's Go rewrite"(评论8)。
  4. 替代方案偏好:评论2、7倾向于使用OpenSSH或自建Wireguard,而非Tailscale SSH。

    • 关键引用:"giving access via tailscale but using OpenSSH is safe, right?"(评论2);"I'll stick to my 100% self-hosted Wireguard setup"(评论7)。
  5. 其他讨论:评论3质疑为何Tailscale使用自有编号而非CVE;评论9猜测Anthropic是否使用Tailscale;评论10指出纯逻辑错误无法通过Rust重写解决。

    • 关键引用:"Why own numbering instead of CVE?"(评论3);"pure logic error, the undergoing tailscale rust rewrite can't help this too"(评论10)。

平衡性总结
- 多数评论对Tailscale SSH的安全性持批评或谨慎态度,强调OpenSSH的成熟性。
- 少数评论(如评论1)仅指出漏洞的古老性,未否定Tailscale整体。
- 修复方式争议(评论4)与替代方案偏好(评论2、7)反映了用户对安全实践的不同理解。