http://blog.champtar.fr/runc-symlink-CVE-2021-30465/
总结
本文详细描述了一个针对容器运行时 runc
的漏洞(CVE-2021-30465),该漏洞利用符号链接交换(symlink-exchange)攻击方法,允许攻击者通过竞态条件(TOCTOU)在 Kubernetes 环境中绕过安全检查并访问主机文件系统。文章介绍了漏洞的发现过程、概念验证(POC)、技术细节以及修复建议。
关键点
- 漏洞背景:作者在调试 Kubernetes 容器时发现
/var/run
被挂载到 /run
,进而研究了 containerd
和 runc
如何确保挂载点在容器根文件系统内的机制。
- 漏洞机制:
runc
使用 securejoin.SecureJoinVFS()
来验证挂载目标是否在容器根目录内,但该函数无法防止符号链接被替换,从而引发竞态条件。
- POC 描述:通过创建一个共享卷的攻击性 Pod,利用多个容器启动时的时间差和符号链接交换实现对主机文件系统的访问。
- 技术细节:详细说明了 Kubernetes 和
runc
的挂载流程,包括如何利用符号链接和绑定挂载(bind mount)实现攻击。
- 漏洞影响:成功利用该漏洞后,攻击者可以访问整个主机文件系统,包括
/dev
、/proc
等敏感目录。
- 修复建议:建议升级相关组件,并避免在卷中挂载其他卷。
- 漏洞成因:该漏洞源于 Docker/runc 初期的威胁模型未考虑不受信任的容器定义,Kubernetes 的多租户模型也假设团队是可信的。
- 时间线:详细记录了漏洞的发现、报告、修复和公开过程,包括 Google GKE Autopilot 的安全测试和奖励。
https://www.kingkk.com/2021/06/runc容器逃逸漏洞分析(CVE-2021-30465)/