Co się stało?
Badacz bezpieczeństwa działający pod pseudonimem _SiCK opublikował na Githubie kilka exploitów typu proof-of-concept, które wykorzystują podatność w zarządzaniu pamięcią i procesami jądra Linuksa. Luka pozwala lokalnym użytkownikom bez specjalnych uprawnień na odczytanie, w określonych warunkach, plików dostępnych normalnie wyłącznie dla użytkownika root. To już czwarta w ciągu kilku dni luka bezpieczeństwa umożliwiająca użytkownikom Linuksa eskalację uprawnień.
Przykład PoC o najpoważniejszych skutkach nosi nazwę ssh-keysign-pwn. Odczytuje on prywatny klucz SSH maszyny – plik, który w normalnych warunkach dostępny jest wyłącznie dla użytkownika root. Inny przykład wykorzystuje program „chage” do odczytania podczas jego działania pliku haseł /etc/shadow.
Szczegóły
Przyczyna podatności tkwi głęboko w jądrze: funkcja ptrace_may_access() zawodzi w sposób zbyt otwarty (tzw. „fail open”) w przypadku procesów będących w trakcie zamykania. Jeśli atakującemu uda się wygrać race condition, czyli wyścig pomiędzy kilkoma jednocześnie działającymi procesami, może on – mimo braku uprawnień – uzyskać dostęp do plików, które wcześniej otworzył kończący się proces. Potencjalnie dotyczy to wszystkich plików otwieranych przez programy z uprawnieniami roota (setuid root), na przykład /etc/shadow czy /etc/ssh/ssh_host_key.
Błąd wykryła firma bezpieczeństwa Qualys. Zarządca jądra Linux, Linus Torvalds, naprawił go w czwartek późnym popołudniem. Wkrótce potem założyciel grsecurity, Brad Spengler, zwrócił uwagę na ten błąd w krótkiej analizie opublikowanej w sieci społecznościowej X, co z kolei zmotywowało _SiCK do stworzenia własnych exploitów. Oficjalny identyfikator CVE dla tej luki jak dotąd nie został przyznany.
Warto zauważyć, że błąd ten zauważył już kilka lat temu ekspert ds. bezpieczeństwa Google, Jann Horn. Zaproponował wówczas rozwiązanie problemu – nie zostało ono jednak wdrożone. Jądro Linux 7.0.8 zawiera obecnie wyłącznie poprawkę luki wykorzystywanej przez ssh-keysign-pwn. Zarządca jądra Greg Kroah-Hartman skomentował sytuację w Fediverse z autoironicznym żartem na temat „dużego przycisku” na swoim biurku służącego do wydawania nowych wersji jądra.
Ocena
Dla branży techniki bezpieczeństwa luka ta jest istotna z kilku powodów. Systemy kontroli dostępu, dozoru wizyjnego i zarządzania systemami alarmowymi często działają na serwerach opartych na Linuksie lub urządzeniach wbudowanych. Jeśli lokalni użytkownicy – na przykład poprzez przejęte konta usługowe lub niedostatecznie zabezpieczone dostępy – mogą odczytać chronione plikami roota dane, takie jak klucze SSH czy pliki haseł, otwiera to drzwi do dalszych ataków na całą infrastrukturę.
Szczególnie krytyczny jest fakt, że podatność ta nie jest nowa: była znana już lata temu, jednak nie została naprawiona. To pokazuje przykładowo, jak ważne pozostaje ciągłe zarządzanie poprawkami nawet w przypadku pozornie stabilnych i dojrzałych systemów. Ponieważ luka może w zasadzie dotyczyć każdego pliku wykonywalnego z uprawnieniami roota (setuid root), powierzchnia ataku jest potencjalnie bardzo szeroka i nie ogranicza się do opublikowanych dotychczas przykładów PoC.
Wskazówki praktyczne
- Administratorzy systemów mogą tymczasowo zaradzić wszystkim dotychczas znanym przypadkom tej luki za pomocą polecenia „echo 3 > /proc/sys/kernel/yama/ptrace_scope”.
- Oficjalna poprawka jest już zawarta w jądrze Linux 7.0.8 – dotknięte systemy powinny zostać jak najszybciej zaktualizowane, gdy tylko dana dystrybucja udostępni odpowiedni pakiet jądra.
- Do czasu udostępnienia poprawionych pakietów dystrybucyjnych wspomniane obejście powinno zostać priorytetowo wdrożone szczególnie na serwerach z wrażliwymi danymi dostępowymi (klucze SSH, pliki haseł) oraz na systemach krytycznych dla bezpieczeństwa, takich jak serwery kontroli dostępu czy dozoru wizyjnego.
- Zasadniczo zaleca się sprawdzenie, które lokalne konta użytkowników w ogóle mają dostęp do systemów dotkniętych podatnością, aby ogólnie zmniejszyć powierzchnię ataku dla exploitów typu race condition.
Perspektywy
Ponieważ duże i mniejsze dystrybucje Linuksa muszą teraz wprowadzić i udostępnić tę poprawkę w nowych pakietach jądra, doświadczenie wskazuje, że należy liczyć się z pewnym opóźnieniem, zanim wszystkie systemy produkcyjne zostaną zabezpieczone. W tym okresie przejściowym opisane obejście za pomocą ustawienia Yama ptrace pozostaje najważniejszym natychmiastowym środkiem dla administratorów.
Biorąc pod uwagę, że jest to już czwarta porównywalna luka bezpieczeństwa w ciągu kilku dni, można założyć, że badacze bezpieczeństwa i deweloperzy jądra będą nadal intensywnie zajmować się zarządzaniem pamięcią i procesami jądra Linuksa. Dla operatorów infrastruktury krytycznej dla bezpieczeństwa – od systemów alarmowych, przez systemy dozoru wizyjnego, po rozwiązania kontroli dostępu – incydent ten podkreśla konieczność ścisłego harmonogramowania procesów zarządzania poprawkami oraz szybkiego wdrażania nawet pozornie drobnych aktualizacji jądra.