Luki w AppArmor, które umożliwiają uzyskanie dostępu do roota w systemie

Firma Qualys zidentyfikowała 9 podatności w systemie zarządzania dostępem AppArmor, z których najgroźniejsze pozwalają lokalnemu użytkownikowi bez uprawnień uzyskać prawa root w systemie, wyjść z izolowanych kontenerów i obejść ograniczenia nałożone przez AppArmor. Podatności otrzymały kodową nazwę CrackArmor. Identyfikatory CVE nie zostały jeszcze przydzielone. Udane przykłady eskalacji uprawnień zostały zademonstrowane w Ubuntu 24.04 i Debianie 13.

Problemy występują w module LSM AppArmor od jądra Linux 4.11, wydanego w 2017 roku, i objawiają się w dystrybucjach korzystających z AppArmor, takich jak Ubuntu, Debian, openSUSE oraz SUSE (od openSUSE/SUSE 16 domyślnie używany jest SELinux, ale AppArmor pozostaje jako opcja). Łatki eliminujące podatności zostały przekazane twórcom jądra Linux i w najbliższych dniach będą proponowane użytkownikom w składzie aktualizacji 6.18.18, 6.19.8, 6.12.77, 6.6.130, 6.1.167, 5.15.203 i 5.10.253. Poprawka została również uwzględniona w dzisiejszych aktualizacjach pakietów jądra dla Ubuntu. Równocześnie w Ubuntu wydano aktualizacje pakietów sudo, sudo-ldap oraz util-linux (w składzie znajduje się narzędzie su), w których usunięto niedociągnięcia, które pozwalały na wykorzystanie podatności w AppArmor. W Debianie aktualizacja jest w trakcie przygotowywania.

Problemy są spowodowane istnieniem w AppArmor fundamentalnej podatności klasy „oszukany pełnomocnik” („confused-deputy”), która pozwala użytkownikom bez uprawnień ładować, zastępować i usuwać dowolne profile AppArmor. Ta podatność może być bezpośrednio wykorzystana do wyłączenia ochrony programów i usług przed lokalnymi i zdalnymi atakami (poprzez zapis do pseudoplików /sys/kernel/security/apparmor/.load, .replace i .remove, na przykład, w celu zdjęcia ograniczeń w cupsd i rsyslogd), wywołania odmowy usługi (poprzez zastosowanie restrykcyjnych profili) oraz obejścia ograniczeń przestrzeni nazw (poprzez załadowanie nowego profilu AppArmor „userns”, na przykład, dla /usr/bin/time, co umożliwia tworzenie nieograniczonych przestrzeni nazw użytkowników).

Możliwość zmiany profili AppArmor pozwala również na uzyskanie uprawnień root poprzez powiązanie z priviligowanymi narzędziami, takimi jak su i sudo, nowych profili, które blokują dostęp do niektórych wywołań systemowych. W szczególności prawa root można zdobyć poprzez zablokowanie operacji setuid (CAP_SETUID) dla narzędzia sudo w połączeniu z manipulacją zmienną środowiskową MAIL_CONFIG, aby zmienić katalog z ustawieniami dla poczty. serwera Postfix.

Istota metody polega na tym, że w przypadku wystąpienia problemów narzędzie sudo wysyła do administratora e-mail, uruchamiając /usr/sbin/sendmail. Zablokowawszy zrzut uprawnień, można osiągnąć uruchomienie tego procesu z prawami root, a ustawiając przed uruchomieniem sudo zmienną środowiskową MAIL_CONFIG, można przekazać narzędziu sendmail inne ustawienia, w tym zdefiniować własny handler postdrop, uruchamiany przy wysyłaniu wiadomości. $ 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 Hasło: $ env -i MAIL_CONFIG=/tmp/postfix /usr/bin/sudo whatever sudo: PERM_SUDOERS: setresuid(-1, 1, -1): Operacja niedozwolona sudo: nie można otworzyć /etc/sudoers: Operacja niedozwolona sudo: setresuid() [0, 0, 0] -> [1001, -1, -1]: Operacja niedozwolona sudo: błąd inicjalizacji wtyczki audytującej sudoers_audit $ cat /tmp/postfix/pwned uid=0(root) gid=1001(jane) grupy=1001(jane),100(users)

Inne metody uzyskiwania uprawnień to wzmianki o podatnościach w kodzie AppArmor, działającym na poziomie jądra Linux. Pokazano, jak uzyskać uprawnienia root wykorzystując podatności spowodowane podwójnym wykonaniem funkcji free() oraz odwołaniem do już zwolnionego obszaru pamięci (use-after-free) w kodzie ładowania i zmiany profili AppArmor. Na przykład, AppArmor przechowuje profil w strukturze aa_loaddata, pamięć dla której jest alokowana w slab-cache kmalloc-192, przy czym z powodu stanu wyścigu nie jest wykluczone odwołanie do pamięci zajmowanej przez tę strukturę po jej zwolnieniu. Problem ten można wykorzystać do uzyskania kontroli nad zwolnioną pamięcią i ponownego przydzielania zwolnionej strony pamięci, aby zmapować zawartość pliku /etc/passwd i nadpisać linię z hasłem root.

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster