CVE-2024-25621containerd是一个开源容器运行时,在0.1.0至1.7.28版本、2.0.0-beta.0至2.0.6版本、2.1.0-beta.0至2.1.4版本以及2.2.0-beta.0至2.2.0-rc.1版本中存在默认权限配置过宽的安全漏洞。漏洞源于containerd在创建关键目录时设置了不正确的文件权限,导致本地低权限用户能够访问和修改containerd运行时的核心数据目录。具体受影响的目录包括/var/lib/containerd、/run/containerd/io.containerd.grpc.v1.cri和/run/containerd/io.containerd.sandbox.controller.v1.shim。这些目录可能被配置为允许组或其他用户具有读、写或执行权限,使得攻击者能够绕过容器隔离限制,访问宿主机文件系统或修改容器配置。成功利用此漏洞可导致机密性、完整性和可用性均受到高影响,攻击者可从容器内提升权限至宿主机root级别,或窃取敏感数据如密钥、证书和其他容器的配置信息。
该漏洞的根本原因在于containerd在初始化时创建的目录权限设置过于宽松。在Linux系统中,文件权限由三位八进制数表示,分别控制所有者、所属组和其他用户的读、写、执行权限。containerd的某些版本在创建/var/lib/containerd、/run/containerd/io.containerd.grpc.v1.cri和/run/containerd/io.containerd.sandbox.controller.v1.shim目录时,使用了如777或类似允许组和其他用户访问的权限模式,而非遵循最小权限原则设置为700或750。攻击者作为本地低权限用户,只需具备用户交互(如运行恶意脚本或访问特定路径),即可利用过宽的目录权限访问containerd的socket文件、配置文件和容器状态数据。通过修改这些文件或利用containerd API,攻击者能够实现容器逃逸或权限提升至root级别。攻击者还可利用对run目录的访问权限与containerd的shim进程进行交互,进而执行任意代码。