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

Bookmark and Share

piątek, Sierpień 14th, 2009 at 16:34
Brak komentarzy.

Zostaw komentarz