Krytyczna luka bezpieczeństwa w kernelu Linux, dotyczy wszystkich wersji od roku 2001
Krytyczna luka bezpieczeństwa w kernelu Linux dotyczy wszystkich wersji 2.4 i 2.6, które ukazały się od 2001 roku we wszystkich architekturach – ostrzegają specjaliści od zabezpieczeń Tavis Ormandy i Julien Tiennes z Google’a. Luka pozwala użytkownikom z ograniczonymi prawami uzyskać w systemie uprawnienia administratora.
Problem
Przyczyną problemu jest możliwość wystąpienia błędu dereferencji pustego wskaźnika powiązana z inicjalizacją gniazd dla rzadko używanych protokołów.
W normalnych warunkach struktura wskaźnika definiuje, jakie operacje, np. accept()
czy bind()
, są obsługiwane przez gniazdo. Ale jeśli funkcja systemowa accept()
nie jest dla danego protokołu zaimplementowana, to powinna wskazywać na zdefiniowane wcześniej pseudoprocedury, takie jak sock_no_accept()
. Wygląda jednak na to, że tak się nie dzieje we wszystkich podprogramach obsługi protokołów. Niektóre wskaźniki pozostają w nich niezainicjowane, co w powiązaniu z funkcją sock_sendpage()
może być wykorzystywane do wykonywania kodu na prawach roota. Usterka dotyczy m.in. podprogramów obsługi protokołów PF_BLUETOOTH
, PF_IUCV
, PF_INET6
(z IPPROTO_SCTP
), PF_PPPOX
i PF_ISDN
.
Ormandy i Tiennes uważają, że problem ten dotyczy Linuksa w wersjach 2.4 i 2.6 od maja 2001 roku, a więc od 2.4.4 aż po 2.4.37.4 włącznie oraz 2.6.0 aż po 2.6.30.4. Programiści kernela zamiast naprawić wszystkie protokoły niezaimplementowane w pełni, po prostu przemapowali sock_sendpage
na funkcję kernel_sendpage
, która odpowiada również za to, że wskaźnik nie jest prawidłowo inicjowany.
Jak wykazał krótki test redakcji heise Security na w pełni załatanym systemie Ubuntu 8.10, nowy exploit umożliwia dostęp do systemu na prawach administratora.
Rozwiązanie
Korekta tego błędu na razie wpłynęła jedynie do repozytorium systemu kontroli wersji kernela.
Wkrótce można się spodziewać nowej, oficjalnej wersji jądra, ponieważ dla tej luki jest już dostępny exploit (wunderbar_emporiump
). Autorem kodu jest ponownie Brad Spengler, który już w połowie lipca opublikował rozszerzający uprawnienia exploit dla kernela Linux.
Obejście
Według Ormandy i Tiennesa exploit nie funkcjonuje jednak w najnowszych kernelach z obsługą mmap_min_addr
, jeśli tam za pośrednictwem interfejsu sysctl (np. korzystając z wczytywanego przy starcie systemu pliku /etc/sysctl.conf
) jako wartość klucza vm.mmap_min_addr
zdefiniowana została liczba większa niż zero.
Źródło: heise-online.pl