DockerMac沙箱逃逸漏洞详解

admin 2026-09-24 06:20:18 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文详解DockerMachypervisor沙箱逃逸漏洞CVE-2026-77179,攻击者可通过virtio-fs路径解析缺陷,利用符号链接替换实现容器到宿主机逃逸,获取文件系统读写权限。影响DockerDesktop与DockerSandboxes,已在DockerDesktop4.88.0及Sandboxes0.42.0中修复。建议用户检查版本并及时升级。 综合评分: 88 文章分类: 漏洞分析,云安全,应用安全


Docker Mac沙箱逃逸漏洞详解

Dubito Dubito

云原生安全指北

2026年9月20日 14:33 江苏

在小说阅读器读本章

去阅读

在公众号小说中沉浸阅读

注:本文翻译自 Accomplish 的文章《Guest to host: escaping Docker’s hypervisor》,可点击文末“阅读原文”按钮查看英文原文。

一、引言

Docker 已修复我们报告的 Mac hypervisor 中的沙箱逃逸漏洞:容器运行三行 bash 即可获得对宿主机文件系统的完整读写权限。

Docker Desktop 和 Docker Sandboxes 均受影响。仅当在设置中开启 Docker VMM 时,Docker Desktop 才会受影响。幸好我们现在发现了它,因为 Docker VMM 计划于 2026 年 10 月底成为 Docker Desktop 的默认选项。

该漏洞已被分配为 CVE-2026-77179,并已在 Docker Sandboxes 0.42.0 和 Docker Desktop 4.88.0 中修复。

二、漏洞

当你将文件夹挂载到容器中时,Docker 的 VMM 会使用 virtio-fs,而提供该文件服务的文件服务器运行在宿主机上。客户机第一次访问某个路径时,会发送一次 lookup,服务端则返回一个 nodeid:这是服务端为自身记录而选定的编号。此后,客户机都通过 nodeid 发起请求,不再发送路径,因此服务端必须在每次请求时重新找到该文件。

它有两种方式找到该文件。首先通过 macOS volfs,按 inode 查找。如果失败,则回退到首次查找该文件时保存的路径字符串。

删除文件会移除 volfs 路径。保持文件打开状态,nodeid 会被保留。两者结合,服务端就只剩下那个文件路径字符串。然后客户机将父文件夹替换为符号链接。服务端读取该文件路径字符串,看到的是位于挂载文件夹内的路径,于是放行;但随后内核读取同一字符串,跟随符号链接,打开了宿主机上挂载文件夹之外的文件。

三、漏洞利用

客户机选择宿主机上想要读取或覆盖的文件。比如 /Users/you/.zshenv。

  1. 1. 创建文件夹 pv,并在其中创建一个与目标同名的文件 pv/.zshenv。
  2. 2. 打开 pv/.zshenv 并保持打开。这次 lookup 让服务端获得了一个 nodeid,而打开的 handle 会阻止服务端将其丢弃。
  3. 3. 删除该文件,然后删除该文件夹。volfs 路径也随之消失,因此服务端只剩下文件路径字符串。
  4. 4. 创建一个名为 pv 的符号链接,指向 /Users/you。
  5. 5. 通过第 2 步的 handle 进行读取或写入。

服务端会再次解析该字符串。现在 pv 是符号链接,且它不是路径中的最后一段,因此内核会跟随它。请求最终落到 /Users/you/.zshenv。

服务端在 lookup 时保存的字符串是 /Users/you/proj/pv/.zshenv。第一次请求时 pv 是文件夹,路径仍位于沙箱内。之后的请求中,pv 是指向 /Users/you 的符号链接,因此同一字符串会解析为 /Users/you/.zshenv,即宿主机上的任意位置。

在 bash 中也是如此:

mkdir&nbsp;pv && : > pv/.canary &&&nbsp;exec&nbsp;9< pv/.canary
rm&nbsp;pv/.canary;&nbsp;rmdir&nbsp;pv;&nbsp;ln&nbsp;-s /Users/Shared pv
echo&nbsp;CONFIRMED > /proc/self/fd/9

| 时间 | 事项 | | — | — | | 2026-08-12 14:46 UTC | 我们向 [email protected] 报告。 | | 2026-08-12 21:54 UTC | 他们回复并确认收到,距报告约七小时。 | | 2026-08-13 22:16 UTC | Sailor 提交 9f348c0。即修复方案。距报告约 31 小时。 | | 2026-08-14 14:36 UTC | Docker 确认该漏洞,表示修复正在进行,并计划发布 CVE。 | | 2026-08-24 | Docker Desktop 4.88.0 发布 sailor 0.118.0。 | | 2026-09-07 | Docker Sandboxes 0.42.0 发布 CVE-2026-77179 的修复。 |

Sailor 是 Docker hypervisor 的内部名称。

Docker 安全团队反应迅速且专业。他们约七小时内回复,并在两天内确认漏洞。Docker Desktop 修复于 8 月 24 日发布,Docker Sandboxes 修复于 9 月 7 日在 0.42.0 中发布。

四、检查你是否受影响

如果你使用 Docker Sandboxes,运行 sbx --version。确保运行的是 0.42.0 或更高版本。

如果你使用 Docker Desktop,需要 4.88.0 或更高版本。打开 Settings、General、Virtual Machine Manager。任何更早版本且选择了 Docker VMM 的都会受影响。

交流群

知识库


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。

本文转载自:云原生安全指北 Dubito Dubito《Docker Mac沙箱逃逸漏洞详解》

评论:0   参与:  0