Niebezpieczne exploity na jądro Linuxa

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ść.

Realizacja: SIPLEX Studio