Tailscale SSH漏洞致root权限可被绕过
速览
Tailscale SSH组件中存在不安全的参数处理漏洞(编号TS-2026-009),攻击者可能利用该漏洞获取root权限。该漏洞影响使用Tailscale SSH的用户,建议及时更新修复。
AI 深度解读
背景
Tailscale 是一款基于 WireGuard 的零信任网络解决方案,广泛用于构建安全的私有网络(tailnet)。其提供的 Tailscale Serve 和 Tailscale Funnel 功能允许用户将本地服务暴露给 tailnet 内部或整个互联网,而 Tailscale SSH 则提供了基于 ACL 的 SSH 访问控制。这些功能的核心安全性对于防止未授权访问和拒绝服务至关重要。近日,Tailscale 发布了安全公告 TS-2026-008 和 TS-2026-009,披露了两个高危漏洞,均已在 v1.98.9 版本中修复。
核心内容
漏洞 TS-2026-008:Tailscale Serve/Funnel 拒绝服务(DoS)
问题描述:向运行 Tailscale Serve 或 Tailscale Funnel 的节点发送一个畸形的 HTTP 请求,可导致该节点的 CPU 核心永久满载,造成拒绝服务。
成因:Tailscale Serve 和 Tailscale Funnel 通过将请求路径与配置的挂载点匹配,将传入的 HTTP 请求代理到本地后端。在解析请求的处理程序时,Tailscale 会逐级向上遍历请求路径中的目录,期望最终到达根路径 /。然而,对于路径不以 / 开头的请求(例如,缺少前导斜杠的路径),遍历过程永远无法到达 /,也永远无法匹配到挂载点,导致遍历循环无限进行。由于服务器没有设置请求超时,该循环无法被中断,对应的 goroutine 会持续占用一个 CPU 核心 100% 的负载,直至进程终止。
修复:Tailscale 现在对于非绝对路径会提前终止路径遍历,不返回处理程序并关闭请求。该漏洞在 Tailscale 1.98.9 及更新版本中已修复。
影响:攻击者可以发送精心构造的 HTTP 请求,永久消耗目标节点的一个 CPU 核心。对于 Tailscale Serve,请求可以来自 tailnet 内任何有权限访问该节点的对等端;对于 Tailscale Funnel,请求可以来自互联网上的任何未认证主机。
受影响范围:运行 Tailscale Serve 或 Tailscale Funnel 且版本低于 1.98.9 的节点。
致谢:该问题由 Anthropic 和 Ada Logics 报告。
漏洞 TS-2026-009:Tailscale SSH 不安全的参数处理允许绕过 ACL 获取 root 访问
问题描述:Tailscale SSH 在处理用户名时存在命令行参数注入漏洞,允许用户在违反 ACL 策略的情况下获得 root 会话。
成因:Tailscale SSH 此前接受以短横线 - 开头的用户名。在 Linux 平台上,这些用户名被作为参数传递给 getent(1) 命令,用于获取对应的 passwd 条目。由于 getent 会将以 - 开头的字符串解释为命令行选项(flags),攻击者可以控制其行为。具体来说,如果用户使用用户名 -i 连接,这会被解释为 getent 的 --no-idn 选项(通常用于禁用 IDN 支持),导致 getent 输出整个 passwd 文件的内容,且输出以 root 用户开始。Tailscale 据此认为 root 用户存在并打开了一个交互式 root 会话。
修复:Tailscale SSH 现在拒绝包含前导短横线的用户名。该漏洞在 Tailscale 1.98.9 及更新版本中已修复。
影响:对 Linux 节点拥有 SSH 访问权限的用户,可以通过使用用户名 -i 连接来获得 root 会话,从而违反 ACL 策略(例如 autogroup:nonroot 用户限制)。
受影响范围:在 Linux 主机上使用 Tailscale SSH 并依赖 ACL 中 autogroup:nonroot 用户限制的用户。
致谢:该问题同样由 Anthropic 和 Ada Logics 报告。
关键要点
- 两个漏洞均已在 Tailscale v1.98.9 中修复,建议所有用户立即升级到该版本或更新版本。
- TS-2026-008(DoS 漏洞):攻击者无需认证即可对启用 Funnel 的节点发动拒绝服务攻击(对 Serve 节点需要 tailnet 内访问),仅需一个畸形 HTTP 请求即可耗尽一个 CPU 核心。
- TS-2026-009(SSH 提权漏洞):允许拥有 SSH 访问权限的用户通过注入
-i用户名获得 root shell,完全绕过 ACL 对用户的限制(如autogroup:nonroot)。 - 漏洞根因:008 是路径处理逻辑缺陷(未处理非绝对路径);009 是输入验证缺失(未过滤以短横线开头的用户名),导致参数注入到系统命令
getent。 - 影响面:008 影响所有使用 Serve/Funnel 的节点,尤其是暴露到互联网的 Funnel 节点风险最高;009 影响所有在 Linux 上使用 Tailscale SSH 且依赖基于 ACL 的用户限制的环境。
- 致谢:两个漏洞均由 Anthropic 和 Ada Logics 发现并报告,反映出第三方安全审计的价值。
意义与影响
这两个漏洞的披露凸显了零信任网络组件在输入验证和异常路径处理方面的安全挑战。Tailscale 作为广泛使用的企业级远程访问工具,其安全性直接影响着大量组织的网络边界防御。
- 对 Tailscale 用户:漏洞 008 提醒运行 Tailscale Serve/Funnel 的节点可能面临资源耗尽攻击,且由于 Funnel 暴露到公网,攻击面更大。漏洞 009 则直接威胁到 SSH ACL 的根基——原本被限制为非 root 的用户可以通过简单的用户名注入获得完全控制权,这是 ACL 策略的严重绕过。用户应尽快升级,并考虑在升级前限制对外暴露的 Funnel 服务,同时审查 SSH ACL 配置。
- 对网络安全社区:漏洞 009 是一个典型的 "argument injection" 模式,类似于经典的
getent调用安全缺陷。它表明即使使用了成熟的身份验证框架(如 SSH),底层命令调用中的输入清洗仍然容易被忽视,尤其是在处理用户提供的字符串时。其他基于类似机制(如将用户名传递给系统命令)的软件应从中吸取教训。 - 对 Tailscale 开发团队:这两个漏洞的发现和响应(Anthropic 和 Ada Logics 的报告)体现了负责任的漏洞披露流程。Tailscale 在短时间内修复并发布公告,值得肯定。但同时也提醒开发团队需要加强对路径遍历逻辑和命令行参数传递的安全审计,尤其是涉及用户可控输入时。
- 长期建议:企业用户应建立对基础设施组件(如 Tailscale)的主动升级策略,并监控安全公告。对于依赖于 ACL 的 SSH 访问,建议启用额外的身份验证层(如证书或多因素认证),以降低单一漏洞带来的影响。
