近日,容器安全圈被一枚编号为 CVE-2026-17106 的高危漏洞搅动了神经。这个被安全研究者冠以 CopyEscape 别名的缺陷,藏身于我们日常频繁调用的 docker cp 命令之中。看似 innocuous 的文件复制操作,竟能成为恶意容器突破隔离边界、直取宿主机控制权的跳板。Imperva 红队在今年四月初次向 Docker 官方报告这一问题后,经过数轮修复与回归测试,相关补丁终于在八月中旬陆续推送。然而,漏洞的潜在影响面之广、利用链之精巧,足以让每一位依赖容器化部署的开发者与运维人员重新审视手边的安全基线。
从日常命令到致命缺口:CopyEscape 的庐山真面目
docker cp 大概是 Docker 用户最熟悉的指令之一。拷贝日志、提取构建产物、转移配置文件——这些操作在 CI/CD 流水线与本地开发环境里日复一日地上演。很少有人会意识到,这条命令背后其实藏着一条复杂的归档管道:Docker 守护进程先遍历容器内的实时文件系统,把目标路径打包成 tar 归档流,再交由本地运行的 Docker CLI 负责解压。整个流程建立在两个隐含假设之上——守护进程产出的归档结构是可信且一致的,而 CLI 端也会老老实实把文件写入用户指定的目的地。
Imperva 的研究人员偏偏找到了同时打破这两条假设的方法。

问题的核心在于文件系统竞争条件与符号链接校验的脱节。Docker 在遍历容器文件树时,只锁定了自身的内部状态,却并未阻止容器内进程对文件进行篡改。攻击者只需在守护进程扫描的间隙,通过精准计时的目录交换把戏,就能让 walker 记录下一个普通目录的元数据,随后神不知鬼不觉地将其替换为指向宿主机敏感路径的符号链接——比如 /usr/bin。更棘手的是,Docker 提取代码中的验证逻辑存在路径错位:它检查的是一条构造好的路径,实际创建符号链接时却使用了归档中另一条未经校验的路径。这种"说一套做一套"的错位,直接让攻击者的文件落到了符号链接所指向的任意位置,沙箱隔离形同虚设。
macOS 与 Linux 的双面威胁:开发者与 root 无一幸免
CopyEscape 的破坏力并非停留在理论层面。Imperva 团队已经在 Docker Engine 29.6.1(Linux)与 Docker Desktop 4.81.0(macOS)上完成了完整的漏洞验证,相关 PoC 代码也已公开。
在 macOS 环境下,Docker Desktop 的守护进程虽然跑在虚拟机内部,但文件提取动作最终由宿主机的 CLI 进程执行。这意味着恶意容器无需直接突破 VM 边界,就能诱导本地进程在 macOS 文件系统中写入 payload。Shell 启动脚本、SSH 配置、~/Library/LaunchAgents 下的持久化机制——这些高价值目标都可能被覆盖。下次用户打开终端时,攻击代码便悄然执行,开发者账户的沦陷往往就在一瞬间。

Linux 场景则更加凶险。由于守护进程与 CLI 通常运行在同一台宿主机上,如果自动化脚本或运维人员习惯性使用 sudo docker cp,那么文件写入操作就具备了 root 级别的权限。Imperva 的 PoC 演示了替换 /usr/bin/runc 的完整过程:攻击者通过 CopyEscape 覆盖容器运行时二进制文件,随后当 Docker 再次执行容器生命周期操作时,被篡改的 runc 便以 root 身份运行攻击者植入的代码。文件覆盖与代码执行之间的界限,在这里被彻底抹平。

颇具讽刺意味的是,安全分析师从受感染容器中取证提取证据的行为,反而可能成为触发漏洞的导火索。 Incident response 工作流一旦涉及 docker cp,便暴露在 CopyEscape 的射程之内。
AI 编码代理的隐形雷区:sbx cp 同样中招
容器逃逸的风险并未止步于传统 Docker 环境。随着 AI 代理工作流的普及,Docker Sandboxes 提供的 sbx cp 命令被广泛用于在沙箱与主机之间搬运代码与数据。研究人员确认,CopyEscape 的同一套缺陷同样影响着 sbx cp。当 AI 编码助手从不受信任的沙箱中检索文件时,目的地逃逸的威胁便悄然潜伏。对于正在集成 AI 代理能力的企业而言,这无异于在自动化管道中埋下一颗定时炸弹——你以为是安全的代码搬运,实则可能是权限接管的起点。
补丁已至:升级是当务之急
Docker 官方对此次漏洞的响应经历了多次延期,原因不难理解:早期修复方案在加固归档提取逻辑时引入了显著的功能回归,迫使开发团队反复打磨补丁。最终,安全更新随以下版本一并发布:
-
Docker Engine 与 CLI 29.7.2 及更高版本
-
Docker Desktop 4.86.0 及更高版本
-
Docker Sandboxes 0.38.0 及更高版本
对于能够立即升级的组织,遵循"补丁优先"原则是最稳妥的出路。版本迭代不仅封堵了符号链接竞争条件的利用窗口,也对归档管道的校验机制进行了深度加固。
无法立即升级时的临时防线
现实世界里,生产环境的升级从来不是一蹴而就。在补丁全面落地之前,有几条权宜之计可以显著降低暴露面:
避免对正在运行或来源不明的容器执行 docker cp。容器内的进程是发动竞争条件攻击的必要条件,停止容器后再复制文件,能从根本上切断利用链。同时,彻底清理自动化脚本中的 sudo docker cp 用法——root 权限下的文件覆盖与开发者账户级别的覆盖,后果天壤之别。如果确实需要从可疑环境中提取数据,务必通过一次性隔离环境完成操作,复制结束后立即销毁该环境,不留后患。
归档提取本身就是安全边界:一个被忽视的真理
CopyEscape 留给行业的深层启示,或许比漏洞本身更值得咀嚼。长期以来,路径字符串检查被当作归档提取的安全护栏,开发者习惯性地认为"只要校验了目标路径,文件就不会乱跑"。然而一旦符号链接与并发文件变更同时登场,静态的路径检查便显得捉襟见肘。归档提取不是单纯的 IO 操作,它本身就是一道安全边界。这道边界的可靠性,取决于对动态文件系统状态的实时感知与严格约束,而非事后的一句路径正则。
容器技术让应用部署变得轻盈,但轻盈绝不等于轻率。CVE-2026-17106 再一次证明,最不起眼的日常命令往往藏着最致命的攻击面。从开发工作站到 CI/CD 节点,从传统容器到 AI 沙箱,CopyEscape 的警示是普适的:在容器安全这条路上,从来就没有"只是复制个文件而已"这种小事。




