Spokojnie, to tylko lokalny exploit

Co jakiś czas światem linuksowym trzęsą w posadach doniesienia o kernelowym błędzie, umożliwiającym nabycie przez atakującego praw roota. To doskonała pożywka dla wszelkiej maści kasandrystów, głoszących komunał ‘a nie mówiłem, że ten Linux jest dziurawy”. Rzeczywistość jest jednak o wiele bardziej skomplikowana, bo pomimo wielu wysiłków, do tej pory nie udało się mi zatrząść w posadach użytkowanym kernelem – w większości przypadków takim zwykłym, prosto z repozytoriów. Podobnie jest i z najnowszym doniesieniem o exploicie umożliwiającym przejęcie praw roota poprzez umiejętne wykorzystanie niedopatrzenia w jednej z funkcji kernela. Błąd dotyka kerneli od 3.4 wzwyż i pozostałych, do których został zaimplementowany wadliwy kod. I wszystko wygląda poważnie i niebezpiecznie, poza szczegółem, że u mnie exploit nie zadziałał na kernelu 3.12.8.

Autor rzeczonego exploita, upublicznionego na Githubie, fachowo opisuje działanie swojego dzieła:

The X86_X32 recvmmsg syscall does not properly sanitize the timeout pointer
passed from userspace.

Jak zwał, tak zwał, ale i tak liczy się efekt końcowy, czyli uzyskanie praw roota. Ponieważ cała sprawa dotyczy kerneli z włączoną opcją CONFIG_X86_X32, musimy się upewnić, że serce naszego systemu jest podatne na opisaną metodę:

grep CONFIG_X86_X32 /boot/config-$(uname -r)
zgrep CONFIG_X86_X32 /proc/config.gz
zcat /proc/config.gz |grep CONFIG_X86_X32

Jeżeli na którekolwiek z powyższych otrzymaliśmy odpowiedź:

CONFIG_X86_X32=y

… to potencjalnie nasz kernel może ulec urokowi exploita.

Aby to przetestować, należy pobrać plik timeoutpwn.c, skompilować sobie, uruchomić i oczekiwać efektów. Niestety, u mnie efekt był mizerny:

$ ./timeout
preparing payload buffer…
changing kernel pointer to point into controlled buffer…
clearing byte at 0xffffffff81fb312d
clearing byte at 0xffffffff81fb312e
clearing byte at 0xffffffff81fb312f
waiting for timeouts…
0s/255s
10s/255s
(…)
240s/255s
250s/255s
releasing file descriptor to call manipulated pointer in kernel mode…
failed to get root 🙁

Sprawa podobnież dotyczyła kernela Ubuntu 13.10 i Canonical już błąd poprawiło. Jednak kernele w openSUSE, jak i w Manjaro również posiadają w swoim zestawie CONFIG_X86_X32, lecz tutaj exploit nie zadziałał. Spisek?

6 komentarzy

  1. Typowy tekst fanboya linuksowego, czyli u mnie nie działa exploit więc linux jest cacy.

  2. @Czerkawa:
    1. Napisał, że nie działa na 3 testowanych dystrybucjach
    2. Napisał, że pozytywnie działało podobno na jednej, ale już naprawili.
    3. Pewnie w ciągu 3-4 dni wszystkie dystrybucje mające włączone X32 (skąd inąd po co?) będą miały zainstalowaną łatkę.

  3. Poza należy pobrać plik timeoutpwn.c, skompilować sobie, uruchomić i oczekiwać efektów trzeba jeszcze przeczytać instrukcję obsługi, ten kod i zauważyć, że w środku jest kilka hardkodowanych adresów, które trzeba ustawić na pasujące do danego kernela…
    Takie “testowanie” exploita bez przeczytania nawet instrukcji obsługi jest niewiele warte.

  4. Czyli jak własnoręcznie kompilowałem kernel, to exploid nie zadziała, bo adresy mogą być inne.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Post comment

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.