Poważna usterka bezpieczeństwa w kernelu Linux
Serwis SecurityFocus poinformował, że Duane Griffin usunął z kodu kernela Linux lukę umożliwiającą lokalnemu użytkownikowi rozszerzanie swoich uprawnień do poziomu superużytkownika.
27.01.2009 16:33
Problem
Przyczyną problemu jest możliwość wystąpienia błędu warunku granicznego w kodzie odpowiedzialnym za obsługę podsystemu eCryptfs (fs/ecryptfs/inode.c). Wywoływana jest tam odpowiedzialna za odczytanie wartości dowiązania symbolicznego funkcja systemowa readlink(). W przypadku błędu zwraca ona jako wynik wartość -1. jednak z powodu programistycznego niedopatrzenia rezultat nie jest sprawdzany pod tym kątem. Z powodu braku instrukcji warunkowej testującej wystąpienie tego granicznego warunku w dalszej części podprogramu ujemna wartość może zostać użyta jako indeks tablicy. W zależności od rodzaju danych znajdujących się pod mylnie wskazanym miejscem może dojść do awaryjnego zawieszenia pracy jądra lub wykonania umiejętnie wprowadzonego kodu.
Podatne na atak wydania to wszystkie z linii 2.6. których numer wersji jest mniejszy niż 2.6.28.1. Systemy niekorzystające z mechanizmu eCryptfs nie są zagrożone.
Rozwiązanie
Problem został rozwiązany w wydaniu 2.6.28.1. w zatwierdzonej zmianie o znaczniku systemu kontroli wersji abf366bf652683be33a356640b53ef04b807442f. W serwisie kernel.org pojawiły się również patche, które można zaaplikować na źródła różnych wydań kerneli z rodziny 2.6.
wydanie internetowe www.heise-online.pl