L'azienda Qualys ha identificato 9 vulnerabilità nel sistema di gestione degli accessi obbligatoria AppArmor, le più pericolose delle quali consentono a un utente locale non privilegiato di ottenere diritti di root nel sistema, uscire da container isolati e bypassare le restrizioni imposte tramite AppArmor. Le vulnerabilità hanno ricevuto il nome in codice CrackArmor. Gli identificatori CVE non sono ancora stati assegnati. Esempi riusciti di incremento dei privilegi sono stati dimostrati in Ubuntu 24.04 e Debian 13.
I problemi sono presenti nel modulo LSM AppArmor a partire dal kernel Linux 4.11, rilasciato nel 2017, e si manifestano nelle distribuzioni che utilizzano AppArmor, come Ubuntu, Debian, openSUSE e SUSE (a partire da openSUSE/SUSE 16, SELinux è attivato per default, ma AppArmor è mantenuto come opzione). Le patch che risolvono le vulnerabilità sono state inviate agli sviluppatori del kernel Linux e saranno proposte agli utenti nei prossimi giorni come parte degli aggiornamenti 6.18.18, 6.19.8, 6.12.77, 6.6.130, 6.1.167, 5.15.203 e 5.10.253. La correzione è stata inclusa anche negli aggiornamenti odierni dei pacchetti con il kernel per Ubuntu. Contestualmente, in Ubuntu sono stati rilasciati aggiornamenti per i pacchetti sudo, sudo-ldap e util-linux (che include l'utilità su), in cui sono state risolte le vulnerabilità che consentivano di sfruttare la vulnerabilità in AppArmor. In Debian l'aggiornamento è in fase di preparazione.
I problemi sono causati dalla presenza in AppArmor di una vulnerabilità fondamentale di tipo “deputato confuso” (“confused-deputy”), che consente agli utenti non privilegiati di caricare, sostituire e rimuovere profili AppArmor arbitrari. Questa vulnerabilità può essere utilizzata direttamente per disattivare la protezione di programmi e servizi da attacchi locali e remoti (scrivendo in pseudo-file /sys/kernel/security/apparmor/.load, .replace e .remove, per esempio, per rimuovere restrizioni in cupsd e rsyslogd), provocare denial of service (tramite l'applicazione di profili di divieto) e aggirare le restrizioni degli spazi dei nomi (attraverso il caricamento di un nuovo profilo AppArmor “userns”, per esempio, per /usr/bin/time, che consente la creazione di user namespace illimitati).
La possibilità di sostituire i profili AppArmor consente anche di ottenere privilegi di root tramite l'associazione di nuovi profili a utilità privilegiate come su e sudo, bloccando l'accesso a determinate chiamate di sistema. In particolare, è possibile ottenere diritti root bloccando l'operazione setuid (CAP_SETUID) per l'utilità sudo combinata con la manipolazione della variabile di ambiente MAIL_CONFIG per cambiare la directory delle impostazioni per la posta. server Postfix.
Il metodo consiste nel fatto che, in caso di problemi, l'utilità sudo invia un'email all'amministratore avviando /usr/sbin/sendmail. Bloccando il ripristino dei privilegi è possibile far partire questo processo con diritti di root e, impostando la variabile di ambiente MAIL_CONFIG prima dell'esecuzione di sudo, è possibile passare all'utilità sendmail altre impostazioni, incluso specificare il proprio gestore postdrop, attivato durante l'invio della mail. $ 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 Password: $ env -i MAIL_CONFIG=/tmp/postfix /usr/bin/sudo whatever sudo: PERM_SUDOERS: setresuid(-1, 1, -1): Operazione non consentita sudo: impossibile aprire /etc/sudoers: Operazione non consentita sudo: setresuid() [0, 0, 0] -> [1001, -1, -1]: Operazione non consentita sudo: errore nell'inizializzazione del plugin di audit sudoers_audit $ cat /tmp/postfix/pwned uid=0(root) gid=1001(jane) groups=1001(jane),100(users)
Altri modi per ottenere privilegi elevati includono le vulnerabilità nel codice di AppArmor, che opera a livello del kernel Linux. È stato dimostrato come ottenere diritti di root sfruttando vulnerabilità dovute all'esecuzione doppia della funzione free() e all'accesso ad aree di memoria già liberate (use-after-free) nel codice di caricamento e sostituzione dei profili AppArmor. Ad esempio, AppArmor memorizza il profilo nella struttura aa_loaddata, la cui memoria è allocata nel cache slab kmalloc-192, e a causa di condizioni di corsa non è escluso l'accesso alla memoria occupata dalla struttura, dopo la sua liberazione. Questo problema può essere utilizzato per ottenere il controllo sulla memoria liberata e per riallocare la pagina di memoria liberata per mappare il contenuto del file /etc/passwd e sovrascrivere la stringa con la password di root.
Fonte: opennet.ru
