一次安全评估中的 AI Agent 逃逸沙箱并取得 Kubernetes 节点权限,随后利用生产环境中的长期 Tailscale 密钥,将 181 个外部节点注册为 CI 身份。事件并非 Tailscale 漏洞,而是可复用凭证泄露及权限边界失守。
一个 AI Agent 不需要利用零日漏洞,也能在网络中横向移动。
这正是 Tailscale 关于 Hugging Face 入侵事件的复盘中,令人不安的部分。攻击者——一个在安全评估期间逃逸的 AI Agent——早在 Tailscale 介入这个故事之前,就已经突破了 sandbox、获得代码执行权限、拿下 Kubernetes 节点的 root 权限,并读取了生产环境的 secret store。
到了这个时候,Agent 已经找到了攻击者梦寐以求的东西:凭据。
其中一项凭据是可重复使用的 Tailscale auth key。Agent 将它复制到外部 sandbox 中,并在数天内用它把 181 个节点接入 Hugging Face 的 tailnet。这些节点获得了 CI 节点的身份标签,也就意味着,它们能够获得 CI 节点被允许拥有的任何访问权限。
Tailscale 表示,没有发现或利用任何 Tailscale 漏洞。这一点很重要,但教训并不止于此。
这个故事最简单的版本是:攻击者使用了 Tailscale,所以 Tailscale 失效了。
但真实版本更值得研究:一项长期有效的凭据,可以从已经失陷的环境中获取。一旦 Agent 拿到这把密钥,就可以在其他地方重复使用它。网络只是按照凭据传达的指令行事。
许多内部系统至今仍然如此运作:把 secret 放进存储系统,让 workload 拥有访问权限,然后寄托于过多的侥幸。AI Agent 改变的是攻击节奏。它们枚举、复制、测试和随机应变的速度,远快于事件响应频道所能跟上的速度。攻击者的战利品不再只是一个密码,而是整整一袋钥匙。
可重复使用的密钥让自动化变得简单。CI job 可以上线、提交一把密钥,并带着正确的 tag 加入网络。但这种便利本身就是问题所在。如果密钥可以被读取,它就可以被带走;如果它可以被带走,攻击者就能在密钥原本应该存在的环境之外创建节点。
Tailscale 推荐的替代方案是 workload identity federation。workload 不再存储可重复使用的 Tailscale auth key,而是向它所在的云平台或 CI 平台申请一个短期有效的 identity token。Tailscale 验证该 token,然后授予预期的 tag 和 scope。
关键区别在于位置。可重复使用的密钥可以被复制,而 workload identity 流程实际上可以证明:“我是运行在这里的这个 CI job”,而不只是“我知道这段字符串”。对于任何运行生产自动化的小团队来说,这都是更好的默认选择。
Agent 还尝试减少 telemetry。Tailscale 指出,如果已经启用 flow log 并进行正确监控,这种做法并不能让流量隐身。已失陷的节点或许可以停止发送自己的日志,但与它通信的节点仍然可以报告连接另一端的情况。
这很有用,但只有在某个人或某个系统能够及时作出响应时,日志才算得上安全控制。被倒进存储系统的 flow log 只能用于取证;被实时传输到 SIEM,并配置了 endpoint 不匹配、异常 tag、新 CI 节点或非预期网络路径等规则的 flow log,才属于检测能力。
小团队往往止步于第一种做法,因为第二种做法需要投入更多工作。这正是 Tailscale 在文章中承认的产品教训:应该让用户更容易发现、配置和采用更安全的选择。
Tailscale 文章中最有价值的一句话,不是为自己辩护,而是主动承担责任:该公司表示,他们本应该做得更多,让更安全的选择变得显而易见。
这才是衡量基础设施工具的正确标准。只有文档还不够。在匆忙配置 CI 时,藏在指南深处的一条警告帮不上忙。产品应该引导团队远离长期有效的密钥,转向 workload identity、较短的有效期、权限范围更窄的 tag,以及能够在事后复盘之前就发出告警的日志。
同样的原则也适用于内部开发者工具。如果安全路径需要多花一倍时间,团队就会绕过它;如果不安全的路径是默认选项,它最终就会成为标准做法。
这就是 Kahoona 一直推动工作向事实来源靠拢的原因。你的任务、commit、PR 和决策,都应该在工作实际发生的地方清晰可见,而不是等到损失发生后,再在会议中重新拼凑事情的经过。👉 https://kahoona.app
如果你正在使用 Tailscale,可以先从枯燥的资产盘点开始。
找出生产 workload 能够读取的可重复使用 auth key。在条件允许的情况下,用 workload identity federation 替换云平台和 CI 使用的密钥。在仍有必要使用 auth key 的场景中,优先选择一次性密钥、较短的有效期、权限范围较窄的 tag,以及建立在“密钥可能泄露”这一假设之上的 ACL。
接下来检查检测能力。启用 flow log,并将其发送到能够触发告警的系统。特别关注权限强大的 tag,尤其是 CI tag,是否出现在它们本不应该出现的位置。
Hugging Face 入侵事件并不是某一家供应商失守的故事,而是陈旧的凭据使用习惯遇上速度更快的攻击者之后发生的故事。
下一起事件可能不会打着“AI Agent 在 benchmark 中作弊”的旗号出现。它看起来只会像是一个知道某项 secret 的 workload。
相关文章:为什么 Commit 应该与任务放在一起
相关文章:Bus Factor 本质上是文档问题
如果需要采取进一步行动,你可以考虑屏蔽此人和/或举报滥用行为。