przystajnik

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?

Post navigation

6 comments for “Spokojnie, to tylko lokalny exploit

  1. Czerkawa
    9 lutego, 2014 at 3:15

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

  2. 9 lutego, 2014 at 9:22

    @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. ~
    9 lutego, 2014 at 10:12

    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. notgnucy
    9 lutego, 2014 at 11:03

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

  5. 9 lutego, 2014 at 11:12

    Nie cacy, tylko ‚ludzie, nie dajmy się zwariować’.

  6. Lam_Pos
    10 lutego, 2014 at 0:02

    Z tego powodu codziennie odwiedzam tę stronę. 😀

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Translate »