文章摘要
文章分析了CVE-2026-31431漏洞,该漏洞影响无根容器(rootless containers)环境。作者详细介绍了漏洞原理、shellcode分析,并演示了在Podman无根容器中设置实验环境、运行漏洞利用程序的过程,最后追踪了漏洞利用机制。
文章总结
CVE-2026-31431漏洞分析:Copy Fail漏洞与无根容器的对抗
漏洞概述
CVE-2026-31431(代号"Copy Fail")是一个Linux内核漏洞,允许攻击者通过特定加密套接字操作直接修改页面缓存中的文件内容,从而绕过文件权限检查。该漏洞影响6.19.12之前的内核版本。
漏洞利用机制
- 漏洞触发:利用Linux内核的
authencesn(hmac(sha256),cbc(aes))加密算法实现中的缺陷 攻击流程:
- 创建AF_ALG加密套接字
- 通过sendmsg发送恶意数据
- 使用splice将目标文件页面缓存转移到加密套接字缓冲区
- 利用算法缺陷将恶意数据写入页面缓存
典型攻击目标:修改/usr/bin/su等setuid二进制文件
漏洞利用分析
攻击者提供的shellcode是一个经过精简的ELF文件,主要功能包括: - 调用setuid(0)获取root权限 - 执行/bin/sh启动shell - 包含错误处理机制调用exit(0)
无根容器防御效果验证
通过搭建Fedora 43测试环境,使用rootless Podman运行漏洞利用程序,发现:
容器内表现:
- 成功修改页面缓存中的/usr/bin/su文件
- setuid(0)调用返回成功
- 获得容器内root权限
主机层面防护:
- 由于用户命名空间隔离,容器内root映射为主机普通用户(UID 1000)
- 攻击无法突破容器边界影响主机系统
- /proc/self/uid_map验证了UID映射关系
防御建议
- 对于OpenShift用户:启用用户命名空间支持(4.20版本后GA)
- 考虑使用临时微VM替代容器方案
- 实施类似CargoWall的网络访问控制机制
局限性说明
虽然无根容器能有效防御主机权限提升,但仍存在容器间通过共享页面缓存相互影响的风险,特别是使用相同基础镜像的容器之间。
注:本文基于Andrea Veri的博客内容编辑整理,保留了技术细节但简化了实验过程描述。
评论总结
以下是评论内容的总结:
关于漏洞影响的讨论
- 有评论认为漏洞仅在容器内提升权限,不影响宿主机(评论3:"within the container, the exploit works... does not flow up to the host")
- 反驳观点指出写保护绕过原语仍可能威胁跨容器隔离(评论4:"If you think you are safe, you're probably wrong... corrupt each other")
容器安全机制的质疑
- 默认seccomp策略可能未有效拦截AF_ALG(评论4:"I bet it doesn't. Oh well")
- 能力边界集(CapabilityBoundingSet)可限制root权限但无法防御CA证书篡改等攻击(评论7:"can modify the /etc/ssl/certs to prepare for MitM attacks")
技术细节争议
- 对漏洞是否可用于宿主机提权存在疑问(评论5:"Couldn't you re-run the exploit... gain root on the host?")
- 有用户质疑文章真实性(评论6:"This feels LLM generated... false premise")
实用建议
- 呼吁技术文章提供摘要(评论1:"Please post a tl;dr at the top")
- 讨论ELF二进制精简的术语(评论2:"Running sstrip... called ELF 'golfing'?")
关键引用保留:
- 容器隔离性:"you have elevated to root within the container... end result is the same?"(评论3)
- 跨容器风险:"Oops, they can modify the image layers... cross-tenant isolation"(评论4)
- 防御措施:"a CapabilityBoundingSet... will do"(评论7)