Kompania Qualys otkrila je 9 ranjivosti u sistemu obaveznog upravljanja pristupom AppArmor, od kojih najopasnije omogućavaju lokalnim nepovlašćenim korisnicima da dobiju root prava u sistemu, izađu iz izolovanih kontejnera i zaobiđu ograničenja postavljena putem AppArmor-a. Ranjivosti su dobile kodno ime CrackArmor. CVE identifikatori još nisu dodeljeni. Uspešni primeri povlačenja privilegija demonstrirani su na Ubuntu 24.04 i Debian 13.
Problemi postoje u LSM modu AppArmor od verzije Linux kernela 4.11, objavljenog 2017. godine, i manifestuju se u distribucijama koje koriste AppArmor, poput Ubuntu-a, Debiana, openSUSE i SUSE (od openSUSE/SUSE 16, SELinux je podrazumevano aktiviran, ali je AppArmor ostavljen kao opcija). Patchevi za otklanjanje ranjivosti su dostavljeni programerima Linux kernela i u narednim danima će biti dostupni korisnicima u okviru ažuriranja 6.18.18, 6.19.8, 6.12.77, 6.6.130, 6.1.167, 5.15.203 i 5.10.253. Ispravka je takođe uključena u današnja ažuriranja paketa sa kernela za Ubuntu. Pored toga, u Ubuntu-u su objavljena ažuriranja paketa sudo, sudo-ldap i util-linux (koji uključuje utilitu su), u kojima su ispravljene greške koje su omogućavale eksploataciju ranjivosti u AppArmor-u. Ažuriranje za Debian je u procesu pripreme.
Problemi su uzrokovani postojanjem fundamentalne ranjivosti klase 'obmanuti posrednik' ('confused-deputy') u AppArmor-u, koja omogućava nepovlašćenim korisnicima da učitavaju, menjaju i brišu proizvoljne profile AppArmor-a. Ova ranjivost se direktno može iskoristiti za onemogućavanje zaštite programa i servisa od lokalnih i udaljenih napada (kroz zapisivanje pseudo-fajlova /sys/kernel/security/apparmor/.load, .replace i .remove, na primer, za uklanjanje ograničenja u cupsd i rsyslogd), izazivanje uskraćivanja usluge (kroz primenu zabranjenih profila) i zaobilaženje ograničenja prostora imena (kroz učitavanje novog AppArmor profila 'userns', na primer, za /usr/bin/time, koji omogućava kreiranje neograničenih user namespace).
Možnost zamenjave profilov AppArmor prav tako omogoča pridobitev pravic root prek vezave novih profilov na privilegirane ukaze, kot sta su in sudo, ki blokirajo dostop do nekaterih sistemskih klicev. Zlasti je mogoče pridobiti pravice root z blokiranjem operacije setuid (CAP_SETUID) za ukaz sudo v kombinaciji z manipulacijo okoljske spremenljivke MAIL_CONFIG za spremembo imenika s nastavitvami za elektronsko pošto. strežnika Postfix.
Bistvo metode je, da ob težavah ukaz sudo pošlje sporočilo administratorju, tako da zažene /usr/sbin/sendmail. Z blokado ponovnega dodeljevanja privilegijev lahko dosežemo zagon tega procesa s pravicami root, medtem ko lahko pred zagonoma sudo nastavimo okoljsko spremenljivko MAIL_CONFIG, s katero prenesemo druge nastavitve, vključno z našim obdelovalnikom postdrop, ki se zažene ob pošiljanju elektronske pošte. $ 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 Geslo: $ env -i MAIL_CONFIG=/tmp/postfix /usr/bin/sudo whatever sudo: PERM_SUDOERS: setresuid(-1, 1, -1): Operacija ni dovoljena sudo: ni mogoče odpreti /etc/sudoers: Operacija ni dovoljena sudo: setresuid() [0, 0, 0] -> [1001, -1, -1]: Operacija ni dovoljena sudo: napaka pri inicializaciji vtičnika za revizijo sudoers_audit $ cat /tmp/postfix/pwned uid=0(root) gid=1001(jane) groups=1001(jane),100(users)
Med drugimi načini za povišanje privilegijev se omenjajo ranljivosti v kodi AppArmor, ki deluje na nivoju jedra Linuxa. Pokaže, kako pridobiti pravice root z uporabo ranljivosti, ki jo povzroča dvojno izvajanje funkcije free() in dostop do že osvobojenega dela pomnilnika (use-after-free) v kodi nalaganja in zamenjave profilov AppArmor. Na primer, AppArmor shrani profil v strukturo aa_loaddata, za katero se pomnilnik dodeli v slab-cache kmalloc-192, pri tem pa zaradi stanja dirke ni mogoče izključiti dostopa do pomnilnika, ki ga je zasedala ta struktura, po njeni osvoboditvi. To težavo lahko izkoristimo za prevzem nad osvobojenim pomnilnikom in ponovno dodelitev osvobojene strani pomnilnika za mapiranje vsebine datoteke /etc/passwd ter prepisovanje vrstice s geslom root.
Izvor: opennet.ru
