Brudny potok – CVE-2022-0847
Napisał: Patryk Krawaczyński
08/03/2022 w Bezpieczeństwo Brak komentarzy. (artykuł nr 811, ilość słów: 623)
P
odatność o nazwie Dirty Pipe została znaleziona w jądrze Linuksa od wersji 5.8, a dokładniej od commit’u f6dd975583bd ("pipe: merge anon_pipe_buf*_ops"
). W funkcjach copy_page_to_iter_page
i push_pipe
element "flags"
nowej struktury bufora potoku nie był odpowiednio inicjalizowany, przez co mógł zawierać nieaktualne wartości. Luka ta umożliwia nieuprzywilejowanemu użytkownikowi na zapis stron w pamięci podręcznej, a tym samym dowolnych danych do dowolnych plików, nawet jeśli są one w trybie O_RDONLY – tylko do odczytu, immutable (chattr +i) – posiadają atrybut, niepozwalający nawet administratorowi ich modyfikować lub są zamontowane na systemie plików do tylko do odczytu – MS_RDONLY. Dotyczy to także procesów SUID, które są uruchamiane z prawami administratora. Max Kellermann, który jest autorem luki wspomina, że jest ona podobna do CVE-2016-5195 “Dirty Cow“, ale łatwiej ją wykorzystać. Ze względu na odpowiedzialne ujawnienie podatności została ona załatana już w wersjach jądra: 5.16.11, 5.15.25 oraz 5.10.102.
Może wydawać się śmieszne, ale badacz odkrył lukę po wyśledzeniu błędu, który uszkadzał logi serwera WWW jednego z klientów:
Wszystko zaczęło się rok temu od zgłoszenia z pomocy technicznej dotyczącej uszkodzonych plików. Klient skarżył się, że pobranych logów nie można zdekompresować. I rzeczywiście, na jednym z serwerów znajdował się uszkodzony plik logów; mógł być zdekompresowany, ale gzip zgłaszał błąd CRC. Nie mogłem wyjaśnić, dlaczego był uszkodzony, ale założyłem, że nocny proces podziału logów uległ awarii i pozostawił uszkodzony plik. Naprawiłem ręcznie CRC pliku, zamknąłem zgłoszenie i wkrótce zapomniałem o problemie.
Miesiące później powtórzyło się to ponownie. Za każdym razem zawartość pliku wyglądała na poprawną, tylko suma CRC na końcu pliku była błędna. Teraz, z kilkoma uszkodzonymi plikami, mogłem sięgnąć głębiej i znalazłem zaskakujący rodzaj uszkodzenia. Pojawił się pewien wzór.
W ramach ujawnienia Dirty Pipe Kellerman udostępnił exploit, który dowodzi koncepcji (PoC). Exploit sprawia, że jądro łączy wpis strony w pamięci podręcznej należący do pliku tylko do odczytu z innym wpisem należącym do potoku, a zatem możliwym do zapisu przez zwykłego użytkownika. Zasadniczo umożliwia to nadpisanie zawartości w pamięci pliku tylko do odczytu, czyli umożliwia on lokalnym użytkownikom wstrzykiwanie danych do wrażliwych plików, usuwając ograniczenia lub modyfikując konfigurację w celu rozszerzenia dostępu do systemu. Pomysł podchwycił Phith0n (twórca vulhub) demonstrując, jak na przykład można usunąć flagę “x” za użytkownikiem “root” w pliku /etc/passwd, powodując że będzie on miał puste hasło. W ten sposób możemy wykonać polecenie: su root
– w celu eskalacji uprawnień bez podawania hasła:
agresor@darkstar:~$ cat /etc/passwd root:x:0:0:root:/root:/bin/bash agresor@darkstar:~$ ./exploit /etc/passwd 5 ":0:0:rootx" agresor@darkstar:~$ cat /etc/passwd root::0:0:rootx:/root:/bin/bash agresor@darkstar:~$ su root root@darkstar:~# id uid=0(root) gid=0(root) groups=0(root)
Z kolei BLASTY przeprowadził hacking wersji PoC i stworzył swoją, która uruchamia powłokę poprzez przejęcie (i przywrócenie) zawartości binarki setuid:
agresor@darkstar:~$ ./dirtypipez /usr/bin/su [+] hijacking suid binary.. [+] dropping suid shell.. [+] restoring suid binary.. [+] popping root shell.. (dont forget to clean up /tmp/sh ;)) # id uid=0(root) gid=0(root) groups=0(root)
Luka została zgłoszona opiekunom systemu Linux 20 lutego 2022 roku, w tym zespołowi ds. bezpieczeństwa jądra systemu Linux oraz systemu Android, który również jest podatny. Ze względu na łatwość uzyskania uprawnień administratora za pomocą tych eksploitów, jest tylko kwestią czasu zanim luka ta będzie wykorzystywana “w terenie” przez cyberprzestępców do przeprowadzania ataków na podatnych systemach. Podobny proceder miał miejsce w przypadku błędu Dirty COW wykorzystywanego wcześniej przez złośliwe oprogramowanie. Na błąd ten będą szczególnie narażeni dostawcy usług hostingowych oraz usług umożliwiających dostęp do powłoki systemu Linux.
Więcej informacji: The Dirty Pipe Vulnerability, CVE-2022-0847 PoC, RedHat CVE-2022-0847, Debian CVE-2022-22942, Ubuntu CVE-2022-0847, New Linux bug gives root on all major distros, exploit released