NFsec Logo

CVE-2023-4911 – Looney Tunables

12/10/2023 w Bezpieczeństwo Możliwość komentowania CVE-2023-4911 – Looney Tunables została wyłączona

N

iedawno firma Qualys odkryła i zgłosiła krytyczny błąd w popularnym ekosystemie bibliotek GLIBC, który jest domyślnie instalowany w większości systemów operacyjnych opartych na Linuksie. Wspomniany błąd polega na przepełnieniu bufora w kodzie odpowiedzialnym za obsługę specjalnych zmiennych środowiskowych podczas uruchamiania procesu, co może skutkować lokalną eskalacją uprawnień. Luce przypisano CVE-2023-4911 z oceną 7,8 co daje jej wysoki poziom podatności (w przypadku wykorzystania atakujący może uzyskać uprawnienia administratora w systemie). Opublikowano już kilka wersji testowych eksploitów dla tego błędu – PoC1, PoC2, PoC3, PoC4. Przykłady te pokazują, że sama eksploatacja jest dość prosta i nawet przy zastosowaniu siłowego zgadywania adresu pamięci (ze względu na ASLR) eskalacja może nastąpić w czasie krótszym niż 5 minut.

GLIBC jest domyślnie instalowany w wielu popularnych dystrybucjach Linuksa: Ubuntu, Debian, Fedora, RedHat. Zawiera dynamiczny linker ładujący (ld.so), czyli fragment oprogramowania odpowiedzialny za ładowanie wszystkich obiektów współdzielonych potrzebnych do uruchomienia programu. Jego zadania można opisać w kilku punktach: uruchamianie pliku binarnego; ładowanie bibliotek współdzielonych; obsługa zmiennych LD_PRELOAD i LD_LIBRARY_PATH; zarządzanie pamięcią i mapowanie pliku binarnego w pamięci. Luka znaleziona przez badaczy z Qualys ma miejsce podczas inicjalizacji dynamicznego linkera, a konkretnie podczas obsługi zmiennej środowiskowej GLIBC_TUNABLES. Zmienna ta pozwala na dostosowanie zachowania GLIBC podczas kolejnych zdarzeń. Listę dostępnych opcji dostrajania można uzyskać, uruchamiając następujące polecenie:

/lib64/ld-linux-x86-64.so.2 --list-tunables

Opcje dostrajające muszą zostać dostarczone do docelowego pliku binarnego jako lista oddzielonych od siebie dwukropkami par wartość=klucz ( “tunable1=aaa:tunable2=bbb”). Wspomniany linker jest odpowiedzialny za analizowanie i ostateczne usuwanie wrażliwych na bezpieczeństwo opcji dostrajania ze zmiennych środowiskowych. Co dokładnie się dzieje podczas tego procesu? Otóż funkcja __tunables_init (w której prowadzono błąd) przegląda zmienne środowiskowe i wyszukuje tej o nazwie: GLIBC_TUNABLES. Po jej znalezieniu wywołuje inną funkcję o nazwie tunables_strdup w celu utworzenia kopii zmiennej i rozpoczęcia jej przetwarzania. Ze względu na fakt, że GLIBC nie jest jeszcze zainicjowany ostatnia funkcja używa pod maską __minimal_malloc, która wywołuje mmap w celu zażądania pamięci od jądra systemu. Powoduje to alokację pamięci z pamięci wirtualnej zamiast ze sterty.

Możliwość przepełnienie bufora w tym procesie jest możliwa ze względu na sposób analizowania argumentów. Jeśli opcja dostrajająca będzie miała format: “tunable1=tunable2=bbb” zostanie ona potraktowana na początku jako: tunable1=”tunable2=bbb”, a później jako: “tunable2=bbb”. Spowoduje to skopiowanie większej ilości danych do przydzielonego bufora, niż jest to dozwolone. Chociaż luka ta została wykryta podczas przeglądu kodu źródłowego, badacze z Qualys poddali również testowanie tej logiki za pomocą fuzzingu i z pomocą programu AFL++ oraz libFuzzer powtórzyli ten błąd w mniej niż sekundę (przekazali tylko do programów listę opcji dostrajających z powyższego polecenia). PoC testujący podatność:

agresor@darkstar:~$ env -i "GLIBC_TUNABLES=glibc.malloc.mxfast=glibc.malloc.mxfast=A" \
"Z=`printf '%08192x' 1`" /usr/bin/su --help
Segmentation fault (core dumped)

Wykorzystanie luki polega na utworzeniu ładunku (ang. payload) modyfikującego wskaźnik l_info[DT_RPATH] (ścieżka wyszukiwania bibliotek), co może zmusić ld.so do załadowania obiektów współdzielonych z niezaufanych katalogów i wykonania dowolnego kodu (jako root, jeśli uruchomimy program z bitem SUID). Błąd udało wykorzystać się w domyślnych instalacjach Fedory 37 i 38, Ubuntu 22.04 i 23.04, Debianie 12 i 13; inne dystrybucje prawdopodobnie też są podatne na ataki (jedynym godnym uwagi wyjątkiem jest Alpine Linux, który używa musl libc, a nie glibc).

Więcej informacji: CVE-2023-4911, Detecting and mitigating CVE-2023-4911, Exploiting the Looney Tunables vulnerability on HTB, Looney Tunables – Local Privilege Escalation in the glibc’s ld.so

Polecenie strings i niezaufane pliki binarne

05/10/2023 w Bezpieczeństwo Możliwość komentowania Polecenie strings i niezaufane pliki binarne została wyłączona

P

olecenie ldd nie jest jedynym programem, który miał problemy z bezpieczeństwem jeśli chodzi walidację danych podczas analizy różnych programów. W 2014 roku Michał Zalewski ostrzegał, że wielu użytkowników zajmujących się informatyką śledczą lub innymi dziedzinami bezpieczeństwa informacji ma zwyczaj uruchamiania programu /usr/bin/strings na plikach binarnych pochodzących z internetu. Skoro narzędzie to po prostu skanuje zawartość pliku w poszukiwaniu ciągów znaków, które można wyświetlić na standardowym wyjściu (stdout) to nie powinno narazić użytkownika na jakiekolwiek ryzyko. Otóż program strings jest integralną częścią GNU binutils – zestawu narzędzi specjalizujących się w manipulowaniu formatami plików wykonywalnych przy użyciu biblioteki o nazwie libbfd (Binary File Descriptor Library).

Jak udowodnił lcamtuf funkcja setup_group w źródłowym pliku bfd/elf.c biblioteki libbfd wchodzącej w skład binutils w wersji 2.24 i wcześniejszych posiadała podatność bezpieczeństwa. Jeśli użytkownik zostałby nakłoniony do analizy programem strings specjalnie spreparowanego pliku, mogłoby to spowodować krach tego narzędzia lub potencjalne wykonanie dowolnego kodu z uprawnieniami użytkownika uruchamiającego proces analizy. Dlatego od wersji 2.26 wydanej 26 stycznia 2014 roku domyślnym wywołaniem strings jest parametr -a, który powoduje skanowanie całego pliku z pominięciem używania biblioteki BFD:

commit 7fac9594c41ab180979bdf5927ff7f7e1d13a9e9
Author: Nick Clifton 
Date:   2014-10-31 10:10:37 +0000

    In response to a public outcry the strings program now 
    defaults to using the --all option which displays text
    from anywhere in the input file(s).  The default used 
    to be --data, which only displays text from loadable
    data sections, but this requires the use of the BFD
    library.  Since the BFD library almost certainly still
    contains buffer overrun and/or memory corruption bugs,
    and since the strings program is often used to examine
    malicious code, it was decided that the --data option
    option represents a possible security risk.

W celu użycia ponownie biblioteki BPD musimy użyć parametru -d (--data), aby wyświetlić ciągi znaków tylko z zainicjalizowanych i załadowanych sekcji danych w pliku. Może to zmniejszyć ilość śmieciowych danych na wyjściu, ale należy pamiętać, że naraża to także program na wszelkie luki w bezpieczeństwie, które mogą być jeszcze obecne w bibliotece BFD używanej do skanowania i ładowania takich sekcji.

Więcej informacji: PSA: don’t run ‘strings’ on untrusted files (CVE-2014-8485), CVE-2014-8485, Scan the whole file commit

DNSpooq

30/01/2021 w Ataki Internetowe Możliwość komentowania DNSpooq została wyłączona

E

cha odkrycia ataku Kaminsky’ego z 2008 roku wciąż odbijają się po internecie. Badacze z JSOF odkryli 7 luk znalezionych w powszechnie używanym oprogramowaniu (około 40 producentów urządzeń sieciowych, jak również w głównych dystrybucjach Linuksa) do przekazywania zapytań DNS i przechowywaniu w pamięci podręcznej ich odpowiedzi – Dnsmasq. Od prawie dekady bardzo duża część internetu nadal polega na DNS jako źródle integralności dlatego ataki na tą usługę zagrażają dużym segmentom sieci. Luki w DNSpooq obejmują podatności związane z zatruwaniem pamięci podręcznej DNS, a także potencjalnej możliwości wykonania kodu. Lista urządzeń korzystających z Dnsmasq jest długa i zróżnicowana. Zgodnie z przeprowadzonymi badaniami użytkownikami tego rozwiązania są takie firmy jak: Cisco, Android, Aruba, Technicolor, Siemens, Ubiquiti, Comcast i inne. W zależności od tego jak używają Dnsmasq urządzenia te mogą być bardziej lub mniej dotknięte odkrytymi podatnościami.
[ czytaj całość… ]

systemd umożliwia na zdalne przejęcie maszyny przez DNS

30/06/2017 w Bezpieczeństwo Możliwość komentowania systemd umożliwia na zdalne przejęcie maszyny przez DNS została wyłączona

K

rytyczna podatność została odkryta w ulubionym monolicie inita świata linuksowego – systemd. Pozwala ona na potencjalne wywołanie przepełnienia bufora oraz uruchomienie szkodliwego kodu na atakowanej maszynie, a to wszystko za pomocą odpowiedzi DNS. CVE-2017-9445 aktualnie rezyduje w funkcji dns_packet_new komponentu systemd-resolved służącego do obsługi odpowiedzi DNS, który zapewnia rozwiązywanie nazw DNS dla innych daemonów i aplikacji sieciowych. Według oficjalnego ostrzeżenia opublikowanego we wtorek specjalnie spreparowana odpowiedź od wrogiego serwera DNS może spowodować awarię programu ‘systemd-resolved’. Wysłanie bardzo dużej odpowiedzi DNS może doprowadzić do przepełnienia buforu umożliwiając atakującemu nadpisanie pamięci prowadząc do zdalnego wykonania kodu. Oznacza to, że napastnicy mogą zdalnie uruchomić złośliwe oprogramowanie na docelowym serwerze za pośrednictwem wrogiej usługi DNS. Luka ta występuje od wersji 223, która pojawiła się w czerwcu 2015 roku i jest obecna we wszystkich wersjach do 233 wydanej w marcu tego roku. Oczywiście systemd-resolve musi być uruchomiony w systemie, aby stanowił dla niego zagrożenie. Błąd dotyka takie dystrybucje jak: Ubuntu 16.10 oraz 17.04; Debian Stretch (9), Buster (10) i Sid (wersja niestabilna) oraz inne używające systemd.

Zobacz również: systemd v228, screen root exploit i globalne problemy z setuid

Glibc Stack-based Buffer Overflow (CVE-2015-7547 i CVE-2015-5229)

21/02/2016 w Bezpieczeństwo Możliwość komentowania Glibc Stack-based Buffer Overflow (CVE-2015-7547 i CVE-2015-5229) została wyłączona

K

rytyczny błąd przepełnienia bufora na stosie został odkryty w sposobie w jaki biblioteka libresolv (glibc) przeprowadza podwójne zapytania DNS typu A/AAAA. Osoba atakująca może potencjalnie doprowadzić do zdalnego wykonania kodu (z uprawnieniami użytkownika uruchomiającymi bibliotekę) lub zawieszenia systemu poprzez specjalnie spreparowany ruch sieciowy w odpowiedzi DNS (PoC). Problem ten występuje tylko wtedy, gdy libresolv jest wywołana z modułu nss_dns usługi NSS (CVE-2015-7547).
[ czytaj całość… ]

OpenSSH: błędy klienta CVE-2016-0777 oraz CVE-2016-0778

15/01/2016 w Ataki Internetowe, Bezpieczeństwo Możliwość komentowania OpenSSH: błędy klienta CVE-2016-0777 oraz CVE-2016-0778 została wyłączona

O

d wersji 5.4 (wypuszczonej w marcu 2010 roku), klient OpenSSH obsługuje nieudokumentowaną funkcjonalność o nazwie “roaming“: jeśli połączenie do serwera SSH zostanie nieoczekiwanie przerwane i jeśli serwer wspiera tą funkcjonalność – klient jest w stanie odnowić połączenie i odzyskać zawieszoną sesję SSH. Chociaż roaming nie jest jeszcze wspierany po stronie serwera OpenSSH jest standardowo włączony w kliencie i posiada dwie podatności, które mogą zostać wykorzystane przez szkodliwy (lub zaufany ale skompromitowany) serwer SSH: wyciek informacji (poprzez ujawnienie danych z pamięci) oraz przepełnienie bufora (z wykorzystaniem stosu).
[ czytaj całość… ]

Intel Memory Protection Extensions w 3.19

22/11/2015 w Bezpieczeństwo Możliwość komentowania Intel Memory Protection Extensions w 3.19 została wyłączona

I

ntel w nowej mikroarchitekturze Skylake, która w sierpniu 2015 zastąpiła mikroarchitekturę Broadwell wprowadził rozszerzenie MPX – Memory Protection Extensions. MPX to rozszerzenie sprzętowe mające zapobiegać atakom przepełnienia bufora.
[ czytaj całość… ]

Podstawy bezpieczeństwa PHP – Suhosin

30/12/2011 w Bezpieczeństwo Możliwość komentowania Podstawy bezpieczeństwa PHP – Suhosin została wyłączona

S

uhosin jest zaawansowanym systemem bezpieczeństwa dla języka PHP. Został on zaprojektowany tak, aby chronić serwery przed już znanymi, jak i dopiero nowymi lukami w aplikacjach oraz samym rdzeniu PHP. Składa się z dwóch niezależnych części: łaty nakładanej na sam interpreter jak i rozszerzenia, które można dołączyć do już skompilowanej instalacji. Mogą zostać one wykorzystane oddzielnie lub równocześnie. Pierwsza z nich implementuje kilka niskopoziomowych mechanizmów ochrony przed przepełnieniem buforów (ang. buffer overflows), czy nadużyciami z wykorzystaniem ciągów formatujących (ang. format string vulnerabilities). Druga część jest potężnym rozszerzeniem, które pozwala na implementację reszty ochrony.
[ czytaj całość… ]

Przepełnienie bufora

02/10/2009 w Magazyny Możliwość komentowania Przepełnienie bufora została wyłączona

C

zęsto tworząc oprogramowanie zastanawiamy się nad jego bezpieczeństwem, ale czy zawsze? Szczególnie wrażliwy na bezpieczeństwo jest sam kod naszej aplikacji, dlatego warto zwrócić uwagę na jedno z największych zagrożeń, jakie czyha na programistę – przepełnienie bufora.
[ czytaj całość… ]

Odkrywanie przepełnień bufora

08/12/2005 w Bezpieczeństwo Możliwość komentowania Odkrywanie przepełnień bufora została wyłączona

(root@osiris ~)# uname -srmp
Linux 2.4.26 i586 Pentium_MMX
(root@osiris ~)# gcc --version
2.95.4

[ czytaj całość… ]