NFsec Logo

CVE-2021-3156: Przepełnienie bufora sterty w sudo

27/01/2021 w Bezpieczeństwo Brak komentarzy.  (artykuł nr 768, ilość słów: 564)

Zespół badawczy Qualys odkrył lukę przepełnienia sterty w sudo – prawie wszechobecnym narzędziu dostępnym w głównych systemach operacyjnych typu *nix. Każdy nieuprzywilejowany użytkownik posiadający dostęp do powłoki systemowej może uzyskać uprawnienia administratora (root) na hoście, którego dotyczy luka (przy domyślnej konfiguracji sudo). Sudo to potężne narzędzie, które jest zawarte w większości, jeśli nie we wszystkich systemach operacyjnych na systemach Unix i Linux. Umożliwia użytkownikom uruchamianie programów z uprawnieniami innego użytkownika. Luka sama w sobie ukrywała się na widoku prawie od 10 lat. W lipcu 2011 roku została wprowadzona zmiana (commit 8255ed69) i dotyczy ona wszystkich starszych wersji od 1.8.2 do 1.8.31p2 oraz wszystkich stabilnych wersji od 1.9.0 do 1.9.5p1 w ich domyślnej konfiguracji.

Udane wykorzystanie tej luki pozwala każdemu nieuprzywilejowanemu użytkownikowi uzyskać uprawnienia administratora na podatnym serwerze. Badacze bezpieczeństwa z firmy Qualys byli w stanie niezależnie zweryfikować lukę i opracować wiele wariantów eksploitów oraz uzyskać pełne uprawnienia użytkownika root na Ubuntu 20.04 (sudo 1.8.31), Debian 10 (sudo 1.8.27) i Fedorze 33 (sudo 1.9.2). Inne systemy operacyjne i dystrybucje również mogą być podatne na eksploity.

Kiedy sudo uruchamia polecenie w trybie powłoki, albo przez opcję wiersza poleceń -s lub -i, modyfikuje znaki specjalne w argumentach polecenia za pomocą odwrotnego ukośnika ("\" – ang. backslash). Wtyczka polityki sudoers usunie wtedy zmodyfikowane znaki specjalne z argumentów przed oceną polityki sudoers (która nie oczekuje znaków specjalnych), jeśli polecenie jest uruchamianie w trybie powłoki. Błąd w kodzie usuwającym zmodyfikowane znaki specjalne powoduje odczytanie ostatniego znaku w łańcuchu znaków, jeśli kończy się on niezmodyfikowanym znakiem odwrotnego ukośnika. W normalnych okolicznościach, błąd ten byłby nieszkodliwy, ponieważ sudo usuwa wszystkie odwrotne ukośniki w argumentach polecenia. Jednakże, z powodu innego błędu – tym razem w kodzie parsującym (dokonującym analizy składniowej ciągu znaków w celu ustalenia jej struktury) wiersz poleceń, możliwe jest uruchomienie polecenia sudoedit z opcjami -s lub -i ustawiając w ten sposób flagę wskazującą na włączony tryb powłoki. Ponieważ polecenie nie jest w rzeczywistości wykonywane, sudo nie modyfikuje znaków specjalnych. Ostatecznie kod decydujący o modyfikacji znaków specjalnych nie sprawdza czy polecenie jest rzeczywiście wykonywane, a tylko czy flaga dla trybu powłoki jest ustawiona. Ta niespójność tworzy błąd możliwy do wykorzystania.

Aby sprawdzić, czy Twoja wersja sudo jest podatna na ataki, można użyć następującego polecenia:

sudoedit -s '\' `perl -e 'print "A" x 65536'`

Jeśli otrzymasz komunikat o użyciu (usage:) lub błędzie, sudo nie jest podatne na ataki. Jeśli wynikiem jest błąd segmentacji (Segmentation fault), sudo jest podatne na ataki:

agresor@darkstar:~$ sudoedit -s '\' `perl -e 'print "A" x 65536'`
Segmentation fault

agresor@darkstar:~$ sudo apt install -y sudo
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be upgraded:
  sudo
1 upgraded, 0 newly installed, 0 to remove and 4 not upgraded.
Need to get 428 kB of archives.
After this operation, 0 B of additional disk space will be used.
Get:1 ubuntu.com/ubuntu bionic-updates/main amd64 sudo amd64 1.8.21p2-3ubuntu1.4 [428 kB]
Fetched 428 kB in 0s (2,222 kB/s)
(Reading database ... 223754 files and directories currently installed.)
Preparing to unpack .../sudo_1.8.21p2-3ubuntu1.4_amd64.deb ...
Unpacking sudo (1.8.21p2-3ubuntu1.4) over (1.8.21p2-3ubuntu1.3) ...
Setting up sudo (1.8.21p2-3ubuntu1.4) ...
Processing triggers for man-db (2.8.3-2ubuntu0.1) ...

agresor@darkstar:~$ sudoedit -s '\' `perl -e 'print "A" x 65536'`
usage: sudoedit [-AknS] [-r role] [-t type] [-C num] [-g group] [-h host] [-p prompt]

Więcej informacji: CVE-2021-3156: Heap-Based Buffer Overflow in Sudo (Baron Samedit), Buffer overflow in command line unescaping

Kategorie K a t e g o r i e : Bezpieczeństwo

Tagi T a g i : , , , , , , ,

Komentowanie tego wpisu jest zablokowane.