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 przygotowali stabilnie działający exploit, który pozwala uzyskać prawa root przy użyciu 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 Fedora (chronione oddzielnymi zasadami SELinux) oraz narzędzie snap-confine w Ubuntu (chronione oddzielnymi zasadami AppArmor). Proponowana metoda eksploatacji nie działa również w RHEL 8 i RHEL 9, choć te wersje są podatne na lukę (do ataku wymagane jest stworzenie innego exploitu). Kod exploitu zostanie opublikowany później po powszechnym usunięciu luki. Aby sprawdzić podatność swojego systemu na lukę, można użyć poniższej komendy, która w przypadku problemu zakończy się niepowodzeniem: 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
