Linux jest uważany za najbezpieczniejszy system na świecie. Tak przynajmniej głosi internet. Osobiście zawsze się z tym zgadzałem, chociaż zdawałem sobie zawsze sprawę, że błędy zdarzają się każdym. Kiedy patrzę na czerwone kwadraciki w moim Nagiosie, to wiem, że były jakieś błędy, ale update to załatają. Ten błąd w systemie Linux jednak nawet mnie zadziwił.

Od czasu, kiedy w sieci pojawił się kernel 3.8 (dla niewtajemniczonych był to rok 2012) w mechanizmie keyring w Linuxie znajduje się błąd. Smutna prawda jest taka, że pozwala on na eskalację uprawnień i to do poziomu roota. Brzmi nie fajnie, a powiedziałbym nawet, że dość drastycznie. Oczywiście, jak to bywa w Linuxie — błąd został wykryty i exploit pojawi się już w tym tygodniu. Linux jest wbrew pozorom bardzo popularnym systemem. Większość serwerów, systemów wbudowanych, ale i smartfonów z Androidem jest narażonych. Nie dotyczy to, tylko komputerów osobistych. Także Internet of Things może zostać zaatakowany. To, że niebawem pojawi się patch, jest zadowalające, ale jak pomyśle ile urządzeń było narażonych, to włos na głowie się jeży.

Warto zauważyć, że w przypadku Androida, dziura ta pozwala 
dowolnej aplikacji zainstalowanej na telefonie na wyskoczenie 
z sandboksa, czyli m.in. dostęp do danych innych aplikacji. 
Można też podejrzewać, że łatka na Androida, nawet jeśli pojawi 
się błyskawicznie, to nie zostanie szybko zainstalowana na 
wszystkich podatnych na atak smartphonach…

Kod exploita znajduje się już na GitHubie. Wykonanie go może trochę zająć. Jak go uruchamiamy? To bardzo proste. Wystarczy skompilować plik za pomocą gcc do binarki i uruchomić.

$gcc cve_2016_0728.c -o cve_2016_0728 -lkeyutils -Wall
$./cve-2016_0728 PP1
uid=1000, euid=1000
Increfing
finished increfing
forking...
finished forking
caling revoke...
uid=0, euid=0
#
#whoami
root
#

Jeżeli po kompilacji system informuje nas, że nie ma nagłówka keyutils.h, to trzeba do zainstalować z repozytorium libkeyutils-dev. W sieci krąży też informacja o tym, że posiadanie SELinux może utrudnić działanie exploita. Jednak hackerzy twierdzą, że znają sztuczki, które i SELinux pozwolą obejść. Działanie exploita uniemożliwia także grsecurity i PaX. Jeden z userów Reddita wymyślił rozwiązanie tymczasowe, zanim pojawi się patch:

echo 1 > /proc/sys/kernel/keys/maxkeys
lub
sysctl -w kernel.keys.maxkeys=1

Na tę chwilę nie ma odnotowanych ataków z wykorzystaniem tej luki, ale zapewne to kwestia czasu, kiedy o nich usłyszymy.

Jest też grupa użytkowników, którzy przetestowali exploit na Androidzie. Informują oni, że dla Androida nie jest on taki straszny, jak wszyscy przypuszczają. Podobno exploit ten wykonuje się dość długo i zżera zasoby. Wygląda na to, że zanim expolit dobrałby się do uprawnień roota, a trwa to około 30 min. to Android zdążyłby się zawiesić, a przynajmniej porządnie zamulić. Dodatkowo, co wiemy nie od dzisiaj Google blokuje aplikacje do rootowania telefonów exploitami w sklepie Google Play. Trzeba by było więc mocno się “postarać”, aby takiego exploita złapać. Wiem, że niektórzy użytkownicy potrafią, jednakże każda aplikacja w Google Play przechodzi kontrolę, która wykrywa znane exploity. Tak więc nie instalujemy aplikacji z nieznanych źródeł, o czym już dawno pisałem.

Prawda jest taka, że jeśli dba się o swój system, to nie jest on tak mocno podatny na ataki. Większość włamań są winą braku higieny pracy w sieci ze strony użytkownika. Mimo wieli tutoriali i ostrzegawczych artykułów użytkownicy i tak dalej myślą, że wiedzą lepiej, a później płaczą.