• Welcome to the world's largest Chinese hacker forum

    Welcome to the world's largest Chinese hacker forum, our forum registration is open! You can now register for technical communication with us, this is a free and open to the world of the BBS, we founded the purpose for the study of network security, please don't release business of black/grey, or on the BBS posts, to seek help hacker if violations, we will permanently frozen your IP and account, thank you for your cooperation. Hacker attack and defense cracking or network Security

    business please click here: Creation Security  From CNHACKTEAM

Linux Cgroups漏洞可以实现容器转义


Recommended Posts

研究人员在Linux内核中发现了一个权限提升漏洞——CVE-2022-0492。此漏洞存在于Linux内核功能控制组(cgroups)中,CVSS分值为7.0。攻击者可以利用此漏洞逃离容器,并在容器主机上执行任意命令。

Cgroups是Linux的一个特性,它允许对进程进行分层分组,以限制和监控CPU、内存、硬盘I/O和网络等资源的使用。Linux支持两种cgroup架构,v1和v2。CVE-2022-0492漏洞影响cgroup v1,这是使用最广泛的漏洞。

CVE-2022-0492漏洞根源分析

CGroupV1具有——release_agent文件的特性,它允许管理员通过将目标发布代理路径写入release_agent文件来配置发布代理程序,如下所示:

$ echo/bin/my-release-agent/sys/fs/cgroup/memory/release _ agent

release_agent文件只能在根cgroup目录中可见。通过编写notify_on_release文件,可以将每个子组重新配置为触发或不触发发布代理。

$ echo 1/sys/fs/cgroup/memory/a _ child _ cgroup/notify _ on _ release

在进程终止后,内核将检查它的cgroups是否启用了notify_on_release,如果是,它将派生出已配置的release_agent二进制文件。发布代理将以最高权限运行。配置release agent被认为是一项特权操作,允许它决定哪个二进制文件可以使用完全根特权运行。

CVE-2022-0492漏洞的根源在于它没有得到验证。Linux不检查设置release_agent文件的进程是否具有管理权限。

image.png

漏洞利用

因为Linux将release_agent文件的所有者设置为root,所以只有root可以写入它。因此,此漏洞只允许根进程提升其权限。

并不是每个容器都可以利用CVE-2022-0492漏洞进行逃逸,只有拥有特定权限的人才能执行。Cgroup mounts装载在容器中并且是只读的,因此无法写入release_agent文件。想要利用此漏洞的恶意容器必须安装到另一个可写的cgroupfs中。

Cgroupfs  mounts  inside  containers  are  read-only  (

图Cgroupfs安装在容器中,并且是只读的(ro)

AppArmor和SELinux都可以防止挂载,也就是说运行的容器受到了保护。容器挂载cgroupfs有两种方式:滥用用户命名空间或者CAP_SYS_ADMIN能力。

默认情况下,容器没有cap _ sys _ adminm功能,也不能在初始用户名称空间中挂载cgroupfs。但是,通过unshare()系统调用,容器可以创建一个具有CAP_SYS_ADMIN功能的新用户和cgroup名称空间,并可以挂载cgroupfs。

A  container  creating  a  new  user  namespace  where  it'll  have  the  CAP_SYS_ADMIN  capability.

图容器创建了一个具有CAP_SYS_ADMIN功能的新用户名称空间。

不是每个容器都可以创建新的用户名称空间,并且其背后的主机必须启用非特权用户名称空间。比如默认启用最新的Ubuntu版本。因为Seccomp拦截了unshare()系统调用,所以只有没有运行Seccomp的容器才能创建新的用户名称空间。下图中的容器没有运行Seccomp、AppArmor或SELinux:

word-image-4.png

图容器将内存cgroup挂载到新的用户和cgroup名称空间

如上图所示,容器被成功挂载到memory cgroup,但是release_agent文件没有包含在挂载的目录中。

release_agent文件仅对根cgroup可见。要使release_agent文件对cgroup mount可见,容器必须在子系统的根cgroup下运行。

要利用此漏洞,需要将恶意的release agent写入release_agent文件。

A  root  container  setting  the  release  agent.

图设置脱模剂的根容器

Non-root  container  cannot  set  the  release  agent.

图非根容器不能设置释放代理。

escape的最后一步是调用配置好的release_agent,不需要任何权限。

Exploiting  CVE-2022-0492 for  container  escape, via  user  namespaces.

图使用CVE-2022-0492通过用户命名空间实现容器转义

完整的技术细节见:https://unit42.paloaltonetworks.com/cve-2022-0492-cgroups/。

Link to comment
Share on other sites