建立容器节点运行时基线
从 runC 容器逃逸漏洞 CVE-2025-52881 分析:如何防御绕过 LSM 的高危攻击
容器节点的运行时基线,不应只记录 Kubernetes 版本或业务镜像信息。真正决定容器隔离边界的,是节点实际调用的底层运行时,尤其是 runC 的版本、上层运行时来源、挂载策略、权限配置以及 LSM 状态。以 CVE-2025-52881 为例,攻击者可能利用竞态条件和共享挂载,干扰 runC 对 /proc/self/attr/ 的写入,使原本用于设置安全标签的操作被重定向到其他 procfs 接口。节点基线如果缺少这些信息,漏洞影响就难以准确判断。
基线应记录什么
版本基线必须以“节点实际执行的版本”为准,而不是软件仓库中的可用版本,也不能只查看客户端或业务容器镜像。应逐节点确认 runC 的版本及其安装来源,并关联 containerd、CRI-O 或 Docker 等上层运行时。对于该漏洞,需重点识别 runC 1.2.7、1.3.2 和 1.4.0-rc.2;对应修复版本分别为 1.2.8、1.3.3 和 1.4.0-rc.3。
配置基线则应覆盖影响边界的关键项:是否存在特权容器,是否授予过多 linux capabilities,是否共享宿主机目录、进程命名空间或可变挂载结构,以及是否允许不可信用户提交自定义构建任务。共享挂载并不只是一个普通的存储配置,它可能改变路径解析条件,应记录其来源、读写属性、生命周期和使用者范围。
把基线变成持续核验
节点还应记录 LSM 的预期状态,并确认容器进程能够获得正确的安全标签。/proc/sysrq-trigger 和 core_pattern 等敏感 procfs 接口应纳入保护清单,既要检查是否存在直接写入路径,也要关注通过挂载和运行时操作形成的间接影响。对无法确认实际 runC 版本的节点,应按未修复处理,直到完成节点级验证。
基线的价值不在于生成一份静态清单,而在于支持变更后的判断。节点升级、运行时替换、构建任务调整或共享挂载变化后,应重新核对版本、权限、挂载和 LSM 状态。发现标签设置失败、敏感配置异常变化、运行时错误或节点无明显原因重启时,应先隔离节点并保存运行时、内核和审计信息,而不是只删除相关 Pod。

参与讨论
只看镜像版本确实不够
节点级核验这点很关键
实际执行版本和仓库版本可能不一样
共享挂载的风险常被低估
特权容器还是要重点排查
想了解有没有现成的核验脚本
升级运行时后确实需要重新确认
LSM标签异常时先隔离节点比较稳妥
构建任务权限也该纳入基线
只看仓库版本容易误判,节点实测才算数
@ 银烟斗 没错,仓库版本只能作线索,最终还是要以节点实际执行的 runC 版本和安装来源为准。
这类基线最好接入持续监控
共享挂载这个点容易被忽略
runC版本这块真得逐节点确认,仓库里的根本不准
@ 跋涉者 太真实了,仓库版本和节点实际跑的经常对不上,不逐个查真会漏。你们是靠脚本批量拉还是手动确认的?
LSM状态和procfs接口的保护确实容易漏掉