La empresa Qualys ha identificado 9 vulnerabilidades en el sistema de gestión de acceso mandatorio AppArmor, siendo las más peligrosas aquellas que permiten a un usuario no privilegiado obtener derechos de root en el sistema, salir de los contenedores aislados y eludir las restricciones impuestas a través de AppArmor. Las vulnerabilidades han recibido el nombre en código CrackArmor. Los identificadores CVE aún no han sido asignados. Se han demostrado ejemplos exitosos de elevación de privilegios en Ubuntu 24.04 y Debian 13.
Los problemas están presentes en el módulo LSM de AppArmor desde el núcleo de Linux 4.11, lanzado en 2017, y se manifiestan en distribuciones que utilizan AppArmor, como Ubuntu, Debian, openSUSE y SUSE (a partir de openSUSE/SUSE 16, SELinux está habilitado por defecto, pero AppArmor se mantiene como opción). Los parches que solucionan las vulnerabilidades han sido enviados a los desarrolladores del núcleo de Linux y se ofrecerán a los usuarios en los próximos días dentro de las actualizaciones 6.18.18, 6.19.8, 6.12.77, 6.6.130, 6.1.167, 5.15.203 y 5.10.253. La corrección también está incluida en las actualizaciones de paquetes del núcleo de hoy para Ubuntu. A su vez, se han lanzado actualizaciones de paquetes de sudo, sudo-ldap y util-linux (que incluye la utilidad su) en Ubuntu, donde se han corregido fallos que permitían explotar la vulnerabilidad en AppArmor. En Debian, la actualización está en preparación.
Los problemas son causados por la existencia en AppArmor de una vulnerabilidad fundamental de clase 'agente confundido' ('confused-deputy'), que permite a los usuarios no privilegiados cargar, reemplazar y eliminar perfiles arbitrarios de AppArmor. Esta vulnerabilidad se puede utilizar directamente para deshabilitar la protección de programas y servicios frente a ataques locales y remotos (a través de la escritura de archivos pseudo en /sys/kernel/security/apparmor/.load, .replace y .remove, por ejemplo, para eliminar restricciones en cupsd y rsyslogd), provocar una denegación de servicio (al aplicar perfiles prohibidos) y eludir las restricciones de los espacios de nombres (mediante la carga de un nuevo perfil de AppArmor 'userns', por ejemplo, para /usr/bin/time, que permite crear espacios de nombres de usuario ilimitados).
La capacidad de reemplazar los perfiles de AppArmor también permite obtener privilegios de root a través de la vinculación a utilidades privilegiadas, como su y sudo, de nuevos perfiles que bloquean el acceso a ciertas llamadas al sistema. En particular, se pueden obtener derechos de root bloqueando la operación setuid (CAP_SETUID) para la utilidad sudo en combinación con la manipulación de la variable de entorno MAIL_CONFIG para cambiar el directorio de configuración para el correo. servidores Postfix.
La esencia del método es que cuando surgen problemas, la utilidad sudo envía un correo al administrador, ejecutando /usr/sbin/sendmail. Al bloquear el restablecimiento de privilegios, se puede hacer que este proceso se ejecute con derechos de root, y al establecer la variable de entorno MAIL_CONFIG antes de ejecutar sudo, se pueden pasar otros ajustes a la utilidad sendmail, incluidos el manejo personalizado de postdrop que se ejecuta al enviar correo. $ mkdir /tmp/postfix $ cat > /tmp/postfix/main.cf < /tmp/postfix/postdrop <> /tmp/postfix/pwned EOF $ chmod -R 0755 /tmp/postfix $ apparmor_parser -K -o sudo.pf < /sys/kernel/security/apparmor/.replace Contraseña: $ env -i MAIL_CONFIG=/tmp/postfix /usr/bin/sudo whatever sudo: PERM_SUDOERS: setresuid(-1, 1, -1): Operación no permitida sudo: unable to open /etc/sudoers: Operación no permitida sudo: setresuid() [0, 0, 0] -> [1001, -1, -1]: Operación no permitida sudo: error initializing audit plugin sudoers_audit $ cat /tmp/postfix/pwned uid=0(root) gid=1001(jane) grupos=1001(jane),100(usuarios)
Como otros métodos para elevar privilegios, se mencionan vulnerabilidades en el código de AppArmor que opera a nivel del núcleo de Linux. Se muestra cómo obtener derechos de root a través de vulnerabilidades causadas por la doble ejecución de la función free() y el acceso a áreas de memoria ya liberadas (use-after-free) en el código de carga y reemplazo de perfiles de AppArmor. Por ejemplo, AppArmor guarda el perfil en la estructura aa_loaddata, cuya memoria se asigna en el caché de slab kmalloc-192, y debido a un estado de carrera, es posible acceder a la memoria que ocupaba la estructura después de su liberación. Este problema se puede utilizar para obtener control sobre la memoria liberada y volver a asignar la página de memoria liberada para mapear el contenido del archivo /etc/passwd y sobrescribir la línea con la contraseña de root.
Fuente: opennet.ru
