runc容器逃逸漏洞分析:procfs写入导致的安全突破

本文详细分析了三个runc容器逃逸漏洞(CVE-2025-31133、CVE-2025-52565和CVE-2025-52881),攻击者可通过procfs写入绕过容器限制实现完整逃逸,影响所有runc版本,建议立即更新到修复版本。

runc容器逃逸漏洞:通过procfs写入实现安全突破

漏洞概述

本文披露了三个高危runc容器逃逸漏洞(CVE-2025-31133、CVE-2025-52565和CVE-2025-52881),攻击者可通过不同的方法绕过runc对/proc文件写入的限制,实现完整的容器逃逸。

受影响版本

  • CVE-2025-31133: 影响所有已知runc版本
  • CVE-2025-52565: 影响runc >= 1.0.0-rc3的所有版本
  • CVE-2025-52881: 影响所有已知runc版本

已发布修复版本

  • runc v1.4.0-rc.3
  • runc v1.3.3
  • runc v1.2.8

强烈建议用户尽快更新到上述版本。

漏洞详细分析

CVE-2025-31133:通过"masked path"滥用实现容器逃逸

CVSS评分: 7.3

该漏洞利用runc中masked paths实现的缺陷。当屏蔽文件时,runc会将容器的/dev/null inode绑定挂载到文件顶部。但如果攻击者将/dev/null替换为指向其他procfs文件的符号链接,runc将改为以读写方式绑定挂载符号链接目标。

攻击方式:

  • 攻击1:通过/proc/sys/kernel/core_pattern实现容器逃逸
  • 攻击2:通过删除/dev/null使maskedPath操作失效

缓解措施:

  • 使用用户命名空间
  • 不在容器内以root用户运行
  • 使用AppArmor阻止对maskedPaths的意外写入

CVE-2025-52565:恶意配置导致的容器逃逸

CVSS评分: 7.3

该漏洞利用/dev/console绑定挂载中的缺陷。当创建/dev/console绑定挂载时,如果攻击者将/dev/pts/$n替换为符号链接,runc将绑定挂载符号链接目标到/dev/console。

缓解措施:

  • 使用用户命名空间
  • 不在容器内以root用户运行
  • SELinux默认策略可缓解此问题

CVE-2025-52881:任意写入gadgets和procfs写入重定向

CVSS评分: 7.3

这是CVE-2019-16884的更复杂变体,允许攻击者绕过LSM标签。攻击者可通过各种方法使/proc/self/attr/

缓解措施:

  • 使用无根容器
  • AppArmor和SELinux无法完全防护重定向写入攻击

其他容器运行时的影响

youki和crun存在类似漏洞,正在协调发布补丁。LXC也存在类似bug,但其安全策略认为非用户命名空间容器本质上不安全。

额外补丁说明

发布版本包含两个额外补丁,解决在预发布版本中发现的回归问题:

  1. openat2 EAGAIN重试失败:提高在繁忙系统上的恢复能力
  2. 悬挂符号链接挂载目标:重新允许挂载目标中存在悬挂符号链接

致谢

感谢以下研究人员发现和报告这些漏洞:

  • Lei Wang (@ssst0n3 from Huawei)
  • Li Fubang (@lifubang from acmcoder.com, CIIC)
  • Tõnis Tiigi (@tonistiigi from Docker)
  • Aleksa Sarai (@cyphar from SUSE)
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计