Linux内核的 cgroups 曝出新漏洞,可逃逸容器执行任意命令

Linux内核的 cgroups 曝出新漏洞,可逃逸容器执行任意命令
最新回答
梦有一把锁

2024-01-12 20:51:40

Linux内核cgroups v1的release_agent功能存在高危漏洞(CVE-2022-0492),攻击者可利用该漏洞实现容器逃逸并在宿主机上执行任意命令。以下是关于该漏洞的详细分析:

漏洞背景与影响
  • 漏洞位置:Linux内核的control groups(cgroups)v1版本中的release_agent功能。
  • 漏洞编号:CVE-2022-0492,CVSS评分为7.0(高危)。
  • 影响范围

    主要影响基于cgroups v1的容器技术(如Docker、Kubernetes等云原生架构)。

    漏洞利用需满足特定条件:容器内进程以root权限运行,且宿主机未启用安全加固机制(如AppArmor、SELinux)。

漏洞原理
  • release_agent机制

    cgroups允许通过notify_on_release文件(位于cgroup目录下)配置是否在cgroup变空时调用release_agent脚本。

    若notify_on_release值为1,内核会在cgroup内最后一个进程终止时执行release_agent指定的程序。

  • 漏洞成因

    内核未验证设置release_agent文件的进程是否具有管理权限(如CAP_SYS_ADMIN能力)。

    攻击者可通过覆盖release_agent文件,强制内核调用任意高权限二进制文件,从而实现提权。

攻击场景
  1. 容器内提权

    若容器以root权限运行,攻击者可直接修改release_agent文件,指向宿主机上的恶意程序(如/bin/sh)。

    当容器内进程终止时,内核会以最高权限执行该程序,导致容器逃逸。

  2. 宿主机接管

    恶意程序可在宿主机上执行任意命令,完全控制主机环境。

限制条件与风险
  • 需root权限

    漏洞利用需容器内进程具备root权限,但实际生产环境中大量容器以root运行,风险极高。

  • 安全机制绕过

    运行AppArmor或SELinux的容器可阻止此类攻击,但未启用的环境仍易受攻击。

  • 历史类似漏洞

    2017年谷歌研究员曾利用release_agent突破特权容器,此次漏洞再次证明该功能的危险性。

修复与防护建议
  • 升级内核补丁

    用户应尽快升级至修复该漏洞的Linux内核版本(具体版本需参考官方安全公告)。

  • 限制容器权限

    避免以root权限运行容器,使用非特权用户(如--user参数)。

    启用--cap-drop=ALL减少容器能力,仅保留必要权限。

  • 启用安全模块

    启用AppArmor或SELinux,限制容器对宿主机的访问。

  • 监控与审计

    监控release_agent文件的修改行为,审计异常进程活动。

最佳实践
  • 遵循最小权限原则

    容器应仅拥有完成任务所需的最小权限,避免默认root运行。

  • 使用cgroups v2

    cgroups v2改进了权限管理,默认禁用release_agent功能,建议迁移至v2版本。

  • 定期更新与漏洞扫描

    定期更新系统补丁,使用工具(如CVE-2022-0492专项扫描)检测潜在风险。

总结:CVE-2022-0492漏洞暴露了cgroups v1在权限验证上的缺陷,攻击者可利用此漏洞实现容器逃逸。尽管利用条件需root权限,但实际环境中大量容器以高权限运行,风险不容忽视。建议用户通过升级内核、限制容器权限、启用安全模块等措施综合防护。