Obejście polecenia sudoedit w sudo

nfsec.pl 1 rok temu

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, iż 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) dzięki 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żeli 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 , Sudoedit can edit arbitrary files

Idź do oryginalnego materiału