Vulnerabilidade no subsistema do núcleo de Linux Netfilter

Identificouse unha vulnerabilidade (CVE-2021-22555) en Netfilter, un subsistema do núcleo de Linux que se usa para filtrar e modificar paquetes de rede, que permite a un usuario local obter privilexios de root no sistema, incluso mentres está nun contedor illado. Preparouse para probar un prototipo funcional dun exploit que evita os mecanismos de protección KASLR, SMAP e SMEP. O investigador que descubriu a vulnerabilidade recibiu unha recompensa de 20 dólares de Google por identificar un método para evitar o illamento dos contedores de Kubernetes nun clúster kCTF.

O problema existe desde o kernel 2.6.19, lanzado hai 15 anos, e é causado por un erro nos controladores IPT_SO_SET_REPLACE e IP6T_SO_SET_REPLACE que provoca un desbordamento do búfer ao enviar parámetros con formato especial mediante unha chamada setsockopt en modo compat. En circunstancias normais, só o usuario root pode facer unha chamada a compat_setsockopt(), pero os privilexios necesarios para realizar o ataque tamén os pode obter un usuario sen privilexios en sistemas con soporte para espazos de nomes de usuario activado.

Un usuario pode crear un contedor cun usuario root separado e explotar a vulnerabilidade desde alí. Por exemplo, os "espazos de nomes de usuario" están activados por defecto en Ubuntu e Fedora, pero non en Debian e RHEL. O parche que corrixe a vulnerabilidade foi adoptado no núcleo de Linux o 13 de abril. As actualizacións de paquetes xa foron xeradas polos proxectos Debian, Arch Linux e Fedora. En Ubuntu, RHEL e SUSE, as actualizacións están en preparación.

O problema prodúcese na función xt_compat_target_from_user() debido a un cálculo incorrecto do tamaño da memoria ao gardar estruturas do núcleo despois da conversión da representación de 32 bits a 64 bits. O erro permite que se escriban catro bytes nulos en calquera posición máis aló do búfer asignado limitado polo desplazamento 0x4C. Esta característica resultou ser suficiente para crear un exploit que permitiu obter dereitos de root: ao limpar o punteiro m_list->next na estrutura msg_msg, creáronse as condicións para acceder aos datos despois de liberar memoria (use-after-free), que entón utilizouse para obter información sobre enderezos e cambios noutras estruturas mediante a manipulación da chamada ao sistema msgsnd().

Fonte: opennet.ru

Engadir un comentario