Luka Eskalacji Uprawnień w Jądrze Linux - Dirty COW (CVE-2016-5195)

XLinkedInFacebook

Wprowadzenie

Dirty COW to nazwa nadana luce bezpieczeństwa (CVE-2016-5195) w jądrze systemu operacyjnego Linux, która została publicznie ujawniona w październiku 2016 roku. Nazwa pochodzi od mechanizmu copy-on-write (COW), w którym wykryto błąd, oraz od faktu, że pozwalała ona na nieautoryzowane modyfikacje danych. Luka ta umożliwiała lokalnemu, nieuprzywilejowanemu użytkownikowi uzyskanie dostępu do zapisu w obszarach pamięci, które normalnie były dostępne tylko do odczytu, prowadząc do eskalacji uprawnień. Dotyczyła ona praktycznie wszystkich wersji jądra Linux od wersji 2.6.22 (wydanej w 2007 roku) do momentu jej załatania, co czyniło ją niezwykle rozpowszechnioną.

Jak działają luka Dirty COW?

Luka Dirty COW wykorzystywała błąd typu race condition (wyścig) w implementacji mechanizmu copy-on-write (COW) w jądrze Linux. Mechanizm COW jest używany do optymalizacji pamięci, gdzie wiele procesów może współdzielić tę samą stronę pamięci, dopóki jeden z nich nie spróbuje jej zmodyfikować. Wtedy tworzona jest prywatna kopia dla tego procesu, aby uniknąć wpływu na innych. Atakujący mógł wykorzystać wyścig między operacją próby zapisu na stronie pamięci (co powinno spowodować utworzenie kopii) a próbą jej zmodyfikowania, zanim system operacyjny zdołał utworzyć i przypisać prywatną kopię. Poprzez wielokrotne i szybkie wykonywanie tych operacji, atakujący mógł wstrzyknąć dane bezpośrednio do oryginalnej, współdzielonej strony pamięci, mimo że system uważał ją za tylko do odczytu. W praktyce atak polegał na manipulacji plikami mapowanymi w pamięci (np. /proc/self/mem) i wielokrotnym wywoływaniu funkcji madvise z flagą MADV_DONTNEED w połączeniu z operacją zapisu. To powodowało, że jądro próbowało kopiować stronę, ale atakujący mógł zapisać do niej, zanim kopia została skutecznie wykonana i odblokowana. Skutkiem było to, że nieuprzywilejowany proces mógł modyfikować pliki systemowe, takie jak /etc/passwd (zawierający hasła użytkowników lub ich skróty), by zmienić uprawnienia lub dodać nowego użytkownika z uprawnieniami roota.

Główne zalety i charakterystyka

Luka Dirty COW sama w sobie nie przynosi żadnych zalet z punktu widzenia bezpieczeństwa systemu operacyjnego, wręcz przeciwnie – stanowi poważne zagrożenie. Jej odkrycie i analiza dostarczyły jednak cennych lekcji na temat złożoności jądra systemu Linux i potencjalnych problemów z warunkami wyścigu, które mogą prowadzić do poważnych luk bezpieczeństwa. Zrozumienie działania Dirty COW podkreśla znaczenie ciągłego audytu kodu, rygorystycznego testowania obciążeniowego oraz szybkiego reagowania na zgłoszone luki w celu ochrony integralności systemów informatycznych.

Zastosowania w praktyce

Porównanie z innymi strukturami danych

Luka Dirty COW wyróżniała się wyjątkowo długim okresem istnienia (prawie 9 lat) oraz szerokim zakresem systemów, których dotyczyła, co czyniło ją szczególnie niebezpieczną. W przeciwieństwie do niektórych luk, które wymagają złożonych warunków do wykorzystania, Dirty COW była stosunkowo łatwa do eksploatacji, a gotowe exploity były szybko dostępne dla szerokiego grona atakujących. Można ją porównać do innych luk typu race condition, które często są trudne do wykrycia i załatania, ale Dirty COW była specyficzna dla mechanizmu COW i jego interakcji z operacjami zarządzania pamięcią. Jej skutki były podobne do innych luk eskalacji uprawnień (np. PwnKit CVE-2021-4034), umożliwiając atakującemu uzyskanie pełnej kontroli nad systemem, ale metoda ataku była unikalna dla tej konkretnej wady jądra.

Najlepsze praktyki (2026)

Typowe błędy i pułapki

office@freenetmedia.pl