返回 文章 学习 CMS 文章

Vercel Sandbox 百万美元黑客挑战:发现 Linux 内核零日漏洞与跨租户数据泄露

Vercel 公开挑战安全研究人员,以 24.2 万美元赏金换来了一个 Linux 内核零日漏洞和多个信任边界缺陷的发现。

Vercel Sandbox安全漏洞Linux 内核零日漏洞
成长分 / 100 72 综合收获、行动、留存与影响

Vercel Sandbox 百万美元黑客挑战:发现 Linux 内核零日漏洞与跨租户数据泄露
为什么值得读了解真实世界中云沙箱安全挑战的运作方式和结果。

认识 Linux 内核零日漏洞对共享基础设施的潜在影响。

关键洞察
  1. 挑战收到 1285 份报告,其中 57 份有效,包括 1 个严重、5 个高危、9 个中危、42 个低危发现。
  2. 最严重的发现是 Linux 内核网络栈零日漏洞,可导致主机内存泄露、主机崩溃和主机代码执行。
  3. Vercel 实习生发现跨租户数据泄露漏洞,允许沙箱读取已删除沙箱的磁盘块。
转成行动

深入阅读

正文与原文对照

原文保真覆盖:全文原文字符:9838

8 月,我们推出了面向 Vercel Sandbox 的 100 万美元黑客挑战,邀请安全研究人员尝试逃逸 Vercel Sandbox。我们还与网络安全专家 Trail of Bits 协调,审查了源代码和安全架构。

以下是本次挑战的总结:

两周内收到 1,285 份报告

共支付 242,000 美元赏金

发现一个 Linux 内核零日漏洞

没有任何报告显示有人访问了 Vercel Sandbox 中的客户数据。最严重的发现是上游 Linux 内核中的缺陷。

复制标题链接内核零日漏洞

该项目最重要的报告在第三天到达。

Paulos Yibelo(pwn.ai),一名 HackerOne 研究人员,在没有任何特殊权限的标准沙箱中工作,发现了 Linux 内核网络栈中的一个缺陷。Paulos 发现,从 microVM 内部发送特制数据包可实现三种不同的攻击:

通过网络泄露主机内存

使主机崩溃

在主机上执行代码

复制标题链接泄露主机内存

在第一种攻击中,来自主机的内存——即你的沙箱与其他租户共享的机器——会出现在客户机通过互联网发送的数据包中。只要客户机持续发送,这种情况就可以持续发生。

该攻击已针对 Vercel 生产沙箱进行了演示。

复制标题链接使主机崩溃并在主机上执行代码

该研究人员还发现,通过发送特定数据包,他们可以攻陷主机。

首先,通过发送两个数据包,研究人员使主机崩溃,关闭了其上运行的所有沙箱。其次,利用同一缺陷,他们能够在主机上以完全管理员权限运行命令,突破沙箱的隔离边界。

与数据包相关的崩溃和代码执行攻击已在研究人员自己的、与 Vercel Sandbox 配置匹配的 KVM 和 Firecracker 机器上进行了演示。

复制标题链接负责任地披露内核漏洞

几乎所有主要云提供商都在 Linux 内核的同一层上隔离客户工作负载,因此任何缺陷都是共享基础设施风险。

在收到通知后,我们立即与该研究人员合作,以了解和缓解该漏洞,并与 AWS 及其他行业合作伙伴合作,优先推动修复,确保 Vercel 客户和其他使用该内核的开发者安全。

该研究人员还联系了内核维护者,并与他们合作创建候选补丁。修复正在进行私下审查,CVE 尚待发布,因此在补丁公开之前,我们不会发布更多细节。我们披露该漏洞的存在,是因为它已被单独公开披露。

复制标题链接我们对 Vercel Sandbox 进行压力测试的方法

HackerOne 挑战向任何研究人员开放赏金,但我们也将项目扩展到包括内部评估和独立调查。

在启动公开赏金计划之前,我们在内部进行了实时安全评估,拥有完整的源代码访问权限,并得到了创建和维护 Vercel Sandbox 的工程师的支持。我们还聘请了 Trail of Bits,引入两名工程师来评估我们的安全架构。

并非所有发现都来自外部。Marcos Hernanz,一位 Vercel 实习生,在 Linux 设备映射器存储层中发现了一个跨租户数据泄露漏洞。该漏洞允许任何沙箱读取先前已删除沙箱的回收磁盘块。

复制标题链接白盒深度剖析

Trail of Bits 花费了四个工程师周的时间深入我们的源代码,拥有对代码仓库的完全访问权限以及两个企业测试团队。他们提交了 20 项发现,每一项都经过了测试、确认,并引用了确切的代码。

他们还进行了架构审查,并得出结论:我们的虚拟化边界是健全的。每个沙箱都在自己的 Firecracker 微虚拟机上运行,拥有专用的客户机内核,且设备模型被刻意设计得非常小。没有客户机与宿主机或其他租户共享运行中的内核。

在此基础上,他们给了我们三项结构性建议,我们已实施:

发现并消除对客户机的所有信任。我们的控制平面接受了微虚拟机内运行的软件返回的值,而每一个这样的值都是租户输入。任何跨越边界的内容都应在服务器端派生,或使用客户机无法访问的密钥进行签名。一个策略,一个决策者。出口执行分散在多个子系统中,每个子系统独立解析相同的网络策略,且它们并不总是一致。我们现在对每种数据类型使用一个规范化例程,每个决策使用一个组件,并在策略变更时重新验证连接。假设下一个零日漏洞。我们加强了每个沙箱周围的保护,以限制攻击者利用虚拟化软件时造成的损害。我们保持宿主机内核更新,禁用了嵌套虚拟化,并使用 Firecracker 的 jailer 以受限权限运行每个微虚拟机进程,并将其与宿主机的其余部分隔离。

复制标题链接Vercel Sandbox 发现

我们在两周内收到了 1,285 份报告。这样的数量之所以可能,是因为研究人员现在以 AI 速度进行狩猎。

以下是按类别划分的报告明细:

877 份重复

319 份不适用

57 份有效

32 份信息性

在我们的报告分类中,我们已验证:

1 个严重发现

5 个高危发现

9 个中危发现

42 个低危发现

32 个信息性发现

我们已支付了 242,000 美元的漏洞赏金。

中危、低危和信息性发现是小的策略边界缺口,例如防火墙规则的行为与文档描述不同,以及某个字段对客户机的信任超出了应有程度。

最严重的发现是 Linux 内核零日缺陷,且没有报告显示任何人读取了客户的文件、机密或应用程序数据。

最让我们印象深刻的是报告的异质性。很明显,研究人员使用了不同的设置,并有着不同的关注点。有些人显然了解 Linux 命名空间,并直接将他们的代理引向内核边界。其他人则针对网络策略,还有许多人针对我们未曾想到要列入范围的领域。

这种多样性正是你通过公开挑战所资助的。以下是它产生的一个更有趣的发现。

复制标题链接跨租户磁盘快照恢复(有限制)

这份报告在挑战的第一天就提交了,它是我们最喜欢的例子,说明了为什么即使经过内部评估和白盒测试,我们仍然要运行公开的漏洞赏金计划。

当你对沙箱进行快照时,控制平面必须记录快照数据的落点:{storage_url, size, checksum}

。研究人员发现的缺陷很微妙:这个答案来自客户机内部运行的软件,而主机上运行的服务却信任它。这是信任边界违规。客户机是我们的客户(以及黑客)运行不受信任代码的地方,因此主机绝不能将其说法视为权威。

研究人员将一个已知的、有文档记录的容器逃逸原语与这个信任缺陷结合起来。他们在自己的沙箱内拦截了快照响应并重写了它,交换了两个属于他们拥有的两个独立账户的快照的存储对象。这意味着恢复“你的”快照会具体化另一个账户的整个文件系统。

研究人员演示了每个账户可以读取和修改另一个账户的文件,使用哈希验证了结果,并保留了测试资源,以便我们能够独立复现这些发现。

这次攻击的局限性很重要。将交换目标对准特定受害者需要知道该受害者的内部快照存储键,这是一个平台为每个快照生成的随机 96 位标识符,从不通过 API 暴露。该键唯一出现的地方是在受害者自己的沙箱内。研究人员拥有两个账户,这才使得证明成为可能;没有演示出陌生人可以针对另一个租户的路径。我们仍然将其视为优先修复项,因为依赖于秘密保持秘密的边界不是边界。

Trail of Bits 在他们的评估中独立标记了相同的根本原因,这告诉我们这个发现是真实的、重要的,并且可以从两个完全不同的角度发现。

修复在一周内发布,控制平面现在将每个快照对象绑定到创建它的项目,并拒绝其他任何东西。快照创建从客户机可访问的环境移到了主机端服务,存储路径按项目范围划分,并严格验证 URL。

复制标题链接感谢研究社区

我们要感谢每一位提交报告的研究人员,无论他们的发现是零日漏洞还是重复报告。挑战中发现的每一项技术都为我们如何保护在 Vercel Sandbox 上运行的工作负载提供了信息。

还要感谢 Trail of Bits 的全面内部调查和指导。

阅读原始挑战公告,并在文档中了解更多关于 Vercel Sandbox 的信息。