Vulnerabilidade en cgroups v1 que permite escapar dun contedor illado

Reveláronse detalles dunha vulnerabilidade (CVE-2022-0492) na implementación do mecanismo de limitación de recursos cgroups v1 no núcleo de Linux, que se pode usar para escapar de contedores illados. O problema está presente desde o núcleo de Linux 2.6.24 e solucionouse nas versións do núcleo 5.16.12, 5.15.26, 5.10.97, 5.4.177, 4.19.229, 4.14.266 e 4.9.301. Podes seguir as publicacións de actualizacións de paquetes en distribucións nestas páxinas: Debian, SUSE, Ubuntu, RHEL, Fedora, Gentoo, Arch Linux.

A vulnerabilidade débese a un erro lóxico no manejador de ficheiros release_agent que non realiza as comprobacións adecuadas cando se executa o manexador con privilexios completos. O ficheiro release_agent utilízase para definir o programa que executará o núcleo cando finaliza un proceso nun cgroup. Este programa execútase como root e con todas as "capacidades" no espazo de nomes root. Supoñíase que só o administrador tiña acceso á configuración release_agent, pero en realidade as comprobacións limitáronse a conceder acceso ao usuario root, o que non excluía que a configuración fose modificada desde o contenedor ou por parte dun usuario root sen dereitos de administrador (CAP_SYS_ADMIN ).

Anteriormente, tal característica non se percibía como unha vulnerabilidade, pero a situación cambiou coa aparición dos espazos de nomes de usuario (espazos de nomes de usuario), que permiten crear usuarios root separados en contedores que non se solapan co usuario root do ambiente principal. En consecuencia, para un ataque, abonda con conectar o seu controlador release_agent nun contedor que teña o seu propio usuario root nun espazo de ID de usuario separado, que, despois de completar o proceso, executarase con privilexios completos do ambiente principal.

De forma predeterminada, cgroupfs está montado nun contedor en modo de só lectura, pero non hai ningún problema para volver montar este pseudofs en modo de escritura se tes dereitos CAP_SYS_ADMIN ou creando un contenedor aniñado cun espazo de nomes de usuario separado mediante a chamada do sistema unshare, na que Os dereitos CAP_SYS_ADMIN están dispoñibles para o contedor creado.

Vulnerabilidade en cgroups v1 que permite escapar dun contedor illado

O ataque pódese levar a cabo se ten privilexios de root nun contedor illado ou cando se executa un contedor sen a marca no_new_privs, que prohibe obter privilexios adicionais. O sistema debe ter habilitado o soporte para espazos de nomes de usuario (activado por defecto en Ubuntu e Fedora, pero non activado en Debian e RHEL) e ter acceso ao cgroup v1 raíz (por exemplo, Docker executa contedores no cgroup RDMA raíz). O ataque tamén é posible se tes privilexios CAP_SYS_ADMIN, en cuxo caso non se precisa compatibilidade con espazos de nomes de usuario e acceso á xerarquía raíz cgroup v1.

Ademais de escapar dun contedor illado, a vulnerabilidade tamén permite procesos iniciados por un usuario root sen "capacidades" ou calquera usuario con dereitos CAP_DAC_OVERRIDE (o ataque require o acceso ao ficheiro /sys/fs/cgroup/*/release_agent, que é propiedade de root) para acceder a todas as "capacidades" sistémicas.

Nótase que a vulnerabilidade non se pode explotar cando se usan os mecanismos de protección Seccomp, AppArmor ou SELinux para o illamento adicional dos contedores, xa que Seccomp bloquea o acceso á chamada do sistema unshare() e AppArmor e SELinux non permiten montar cgroupfs en modo de escritura.

Fonte: opennet.ru

Engadir un comentario