Tvrtka Qualys otkrila je 9 ranjivosti u sustavu obaveznog upravljanja pristupom AppArmor, od kojih najopasnije omogućuju lokalnom nepovlaštenom korisniku da dobije root prava u sustavu, izađe iz izoliranih kontejnera i zaobidje ograničenja postavljena putem AppArmor-a. Ranjivosti su dobile kodno ime CrackArmor. CVE identifikatori još nisu dodijeljeni. Uspješni primjeri povećanja privilegija demonstrirani su u Ubuntu 24.04 i Debian 13.
Problemi su prisutni u LSM modulu AppArmor od jezgre Linux 4.11, objavljene 2017. godine, i javljaju se u distribucijama koje koriste AppArmor, kao što su Ubuntu, Debian, openSUSE i SUSE (od openSUSE/SUSE 16, SELinux je prema zadanim postavkama aktiviran, ali je AppArmor ostavljen kao opcija). Zakrpe za uklanjanje ranjivosti dostavljene su programerima jezgre Linux, a korisnicima će ubrzo biti ponuđene kao dio 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đer uključena u današnja ažuriranja paketa s jezgrom za Ubuntu. Uz to, u Ubuntu su objavljena ažuriranja paketa sudo, sudo-ldap i util-linux (u kojem je uključena alatka su), u kojima su ispravljeni nedostaci koji su omogućili korištenje ranjivosti u AppArmor-u. U Debianu je ažuriranje u pripremi.
Problemi su uzrokovani prisustvom u AppArmor-u temeljne ranjivosti klase „zbunjeni posrednik“ („confused-deputy“), koja omogućuje nepovlaštenim korisnicima da učitavaju, zamjenjuju i brišu proizvoljne profile AppArmor. Ova ranjivost se može izravno iskoristiti za onemogućavanje zaštite programa i servisa od lokalnih i daljinskih napada (putem zapisivanja pseudo-datoteka /sys/kernel/security/apparmor/.load, .replace i .remove, na primjer, za uklanjanje ograničenja u cupsd i rsyslogd), izazivanje uskraćivanja usluge (putem primjene zabranjenih profila) i zaobilaženje ograničenja prostora imena (putem učitavanja novog AppArmor profila „userns“, na primjer, za /usr/bin/time, što omogućuje kreiranje neograničenih user namespace).
Mogućnost zamjene profila AppArmor također omogućuje stjecanje root privilegija vezivanjem novih profila, koji blokiraju pristup određenim sistemskim pozivima, na privilegirane alate kao što su su i sudo. Konkretno, prava root mogu se steći blokiranjem operacije setuid (CAP_SETUID) za alat sudo u kombinaciji s manipulacijom varijablom okruženja MAIL_CONFIG za promjenu direktorija s postavkama za e-poštu. poslužitelja Postfix.
Bit metode je u tome što, u slučaju problema, alat sudo šalje e-poštu administratoru pokrećući /usr/sbin/sendmail. Blokiranjem povratka privilegija može se postići pokretanje ovog procesa s root pravima, a postavljanjem varijable okruženja MAIL_CONFIG prije pokretanja sudo mogu se proslijediti drugi postavci alatu sendmail, uključujući određivanje vlastitog obradnika postdrop koji se pokreće prilikom slanja e-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 Password: $ env -i MAIL_CONFIG=/tmp/postfix /usr/bin/sudo whatever sudo: PERM_SUDOERS: setresuid(-1, 1, -1): Operacija nije dopuštena sudo: nemoguće otvoriti /etc/sudoers: Operacija nije dopuštena sudo: setresuid() [0, 0, 0] -> [1001, -1, -1]: Operacija nije dopuštena sudo: pogreška prilikom inicijalizacije audit dodatka sudoers_audit $ cat /tmp/postfix/pwned uid=0(root) gid=1001(jane) grupe=1001(jane),100(users)
Drugi načini za povećanje privilegija uključuju ranjivosti u AppArmor kodu koji radi na razini Linux jezgre. Pokazuje se kako dobiti root prava koristeći ranjivosti uzrokovane dvostrukim izvršavanjem funkcije free() i pristupanjem već oslobođenoj memorijskoj oblasti (use-after-free) u kodu učitavanja i zamjene profila AppArmor. Na primjer, AppArmor čuva profil u strukturi aa_loaddata, a memorija za koju se dodjeljuje u slab keš kmalloc-192, pri čemu nije isključeno pristupanje memoriji koju je zauzimala struktura nakon njezinog oslobađanja zbog stanja utrke. Ovaj problem može se iskoristiti za preuzimanje kontrole nad oslobođenom memorijom i ponovnu dodjelu oslobođene stranice memorije za mapiranje sadržaja datoteke /etc/passwd i prepisivanje linije s root lozinkom.
Izvor: opennet.ru
