Dirty Pipe - podatność w Linuksie, przez którą możesz mieć roota

Krytyczna podatność w jądrze Linuksa, która umożliwia dowolnemu lokalnemu użytkownikowi objęcie uprawnień roota, i która dotyczy lwiej części najważniejszych dystrybucji, brzmi jak koszmar. A jednak to prawda. I to prawda, która dzieje się na naszych oczach. Przyjrzyjmy się bliżej luce CVE-2022-0847, znanej także jako Dirty Pipe.
Mimo tego, że społeczność rozwijająca Linuksa przoduje w kwestii tempa łatania kolejnych luk, to jednak trudno zakładać, że Linux będzie kiedyś w stu procentach bezpieczny. I nie byłoby to szczególnym problemem, gdyby chodziło o niszowy edytor kodu. Perspektywa zmienia się ze względu na skalę – Linux jest dziś wszędzie, od Raspberry Pi po gigantyczne usługi chmurowe największych dostawców. Jeśli poważna dziura jest w Linuksie, problem ma cały świat.
Dirty Pipe
Co gorsza, exploit jest ogólnodostępny. Pierwszy wariant PoC został opublikowany przez Maksa Kellermana i zakładał on, że nieuprawnieni użytkownicy lokalni mogli wstrzyknąć swoje dane w najbardziej wrażliwy system plików, będących w trybie tylko do odczytu, całkowicie pomijając restrykcje i swobodnie eskalując uprawnienia aż do roota.
W praktyce rzecz leży w plikach GZ. W Linuksie zachodzi możliwość powiązania wszystkich logów przechowywanych w tym formacie z ominięciem mechanizmów bezpieczeństwa stosowanych w procesorze. Powiązanie jest możliwe dzięki użyciu API Synced Flush, które napastnik wykorzystuje do nadpisania ostatniego wolnego bloku, i w ten sposób wstrzyknięcia danych.
W ten sposób atakujący jest w stanie modyfikować kluczowy dla konfiguracji instancji plik – /etc/passwd. „Wystarczy”, że po wcześniejszych krokach postawi się flagę „x” za blokiem służącym dla konfiguracji roota, by wyzerować jego hasło. Wówczas wystarczy wydać komendę su root, a system nawet nie zapyta o hasło.
Dirty Pipe – jak się bronić?
Dobre wieści są takie, że luka została już załatana w jądrze z gałęzi 5.16.11, 5.11.25 i 5.10.102, jednak nie powinna ona napawać zbytnim optymizmem – nie taką oczywistością jest bowiem, że w codziennej praktyce napotykam serwery z tak świeżym Linuksem. Rozwiązaniem problemu jest oczywiście aktualizacja jądra, niemniej naiwnie byłoby twierdzić, że da się to zrobić globalnie w ciągu kilku tygodni. Tymczasem root jest na wyciągnięcie ręki.