W sieci pojawił się exploit, który w trywialny sposób pozwala na podniesienie uprawnień użytkownika do praw roota. Jest bardzo niebezpieczny nie tylko dlatego, że nie jest kłopotliwy w użyciu ale również dlatego, że za jego pomocą można zaatakować wiele wersji kernela: począwszy od 2.6.17 a na 2.6.24.1 kończąc.
Podatność tkwi w funkcji systemowej vmsplice(), która przesyła dane bezpośrednio z przestrzeni użytkownika do deskryptora.
Dane są przesyłane bezpośrednio w jądrze, bez bufora w przestrzeni użytkownika i bez przełączania do trybu użytkownika.
Błąd polega na niesprawdzaniu wskaźnika przyjmowanego przez funkcję vmsplice_to_user() i tym samym staje się możliwy dostęp do pewnych obszarów w pamięci.
Przetestowałem exploit w kilku środowiskach i zaobserwowałem, że:
– podatne są głównie jądra dystrybucyjne
– jądra z odpowiednio skonfigurowanym grsecurity (m.in. włączony PAX) nie są podatne
Na maszynach gdzie udostępniany jest shell zaleca się, przekompilowanie kernela i wyłączenie funkcji vmsplice() lub podniesienie wersji jądra do 2.6.24.2 oczywiście również rozwiązuje problem.
Znalazłem także nieoficjalną poprawkę, jednak nie testowałem jej na serwerach produkcyjnych. Na domowym Debianie Etch z kernelem 2.6.20.20 patch wyeliminował podatność.