Podatność w Glibc ld.so, która umożliwia uzyskanie praw root w systemie

Firma Qualys zidentyfikowała groźną lukę (CVE-2023-4911) w loaderze ld.so, dostarczanym w ramach biblioteki systemowej C Glibc (GNU libc). Luka umożliwia lokalnemu użytkownikowi podniesienie swoich uprawnień w systemie poprzez określenie specjalnie sformatowanych danych w zmiennej środowiskowej GLIBC_TUNABLES przed uruchomieniem pliku wykonywalnego z flagą suid root, na przykład, /usr/bin/su.

Możliwość skutecznego wykorzystania luki została zademonstrowana w Fedora 37 i 38, Ubuntu 22.04 i 23.04, Debian 12 i 13. Zakłada się, że luka ta występuje także w innych dystrybucjach korzystających z Glibc. Dystrybucje oparte na bibliotece systemowej Musl, takie jak Alpine Linux, nie są narażone na ten problem. Luka została usunięta w łatce, która została dodana 2 października. Można śledzić wydanie aktualizacji pakietów w dystrybucjach na stronach Debian, Ubuntu, RHEL, SUSE/openSUSE, Fedora, Arch, Gentoo, ALT Linux.

Luka została spowodowana zmianą wprowadzoną w kwietniu 2021 roku, która weszła w skład wydania glibc 2.34. Z powodu błędu w kodzie analizy ciągu, określonego w zmiennej środowiskowej GLIBC_TUNABLES, niepoprawna kombinacja parametrów w tej zmiennej prowadzi do zapisu rozparsowanej wartości poza przydzielonym buforem. Problem ujawnia się, gdy zamiast standardowych sekwencji „name=val”, parametry są określone w formie z podwójnym przypisaniem „name=name=val”. W takim przypadku przypisanie jest przetwarzane dwukrotnie, najpierw jako „name=name=val”, a potem jako „name=val”. W wyniku podobnego podwójnego przetwarzania powstaje wynik „name=name=val:name=val”, którego rozmiar przekracza rozmiar bufora tunestr.

Badacze opracowali stabilnie działający exploit, który umożliwia uzyskanie praw root w praktycznie każdej aplikacji z flagą suid root. Wyjątkiem są narzędzia sudo (zmieniające wartość ELF RUNPATH), narzędzia chage i passwd w Fedory (chronione osobnymi regułami SELinux) oraz narzędzie snap-confine w Ubuntu (chronione osobnymi regułami AppArmor). Proponowana metoda eksploatacji nie działa również w RHEL 8 i RHEL 9, mimo że te wersje mają podatność (do ataku potrzebne jest stworzenie innego exploit-u). Kod exploitu zostanie opublikowany później, po powszechnym usunięciu podatności. Aby sprawdzić podatność swojego systemu na tę lukę, można użyć poniższej komendy, która w przypadku problemu zakończy się błędem: env -i «GLIBC_TUNABLES=glibc.malloc.mxfast=glibc.malloc.mxfast=A» «Z=`printf ‘192x’ 1`» /usr/bin/su —help

Osobno zaznaczone zostało usunięcie w Glibc jeszcze dwóch luk:

  • CVE-2023-4806 — dostęp do już zwolnionego obszaru pamięci (use-after-free) w funkcji getaddrinfo(), manifestujący się, gdy wtyczka NSS realizuje tylko wywołania call-back „_gethostbyname2_r” i „_getcanonname_r”, ale nie obsługuje wywołania „_gethostbyname3_r”. Aby wykorzystać tę lukę, serwer DNS musi zwrócić dużą liczbę adresów IPv6 i IPv4 dla żądanego hosta, co prowadzi do awarii procesu, który wywołał funkcję getaddrinfo dla rodziny AF_INET6 przy ustawionych flagach AI_CANONNAME, AI_ALL i AI_V4MAPPED.
  • CVE-2023-5156 — wyciek zawartości pamięci przy wywołaniu funkcji getaddrinfo dla rodziny adresów AF_INET6 z ustawionymi flagami AI_CANONNAME, AI_ALL i AI_V4MAPPED.

Źródło: opennet.ru

Kup niezawodny hosting stron z ochroną DDoS, serwery VPS VDS 🔥 Kup niezawodny hosting stron z ochroną DDoS, serwery VPS VDS - ProHoster