Ujawniono technikę wykorzystania luki w podsystemie tty jądra Linuksa

Badacze z zespołu Google Project Zero opublikowali metodę wykorzystania luki (CVE-2020-29661) w implementacji procedury obsługi ioctl TIOCSPGRP z podsystemu tty jądra Linuksa, a także szczegółowo zbadali mechanizmy zabezpieczające, które mogłyby blokować takie luki w zabezpieczeniach.

Błąd powodujący problem został naprawiony w jądrze Linuksa już 3 grudnia ubiegłego roku. Problem pojawia się w jądrach do wersji 5.9.13, ale większość dystrybucji rozwiązała problem w aktualizacjach pakietów jądra zaproponowanych w zeszłym roku (Debian, RHEL, SUSE, Ubuntu, Fedora, Arch). Podobną lukę (CVE-2020-29660) wykryto jednocześnie w implementacji wywołania ioctl TIOCGSID, ale została ona również wszędzie naprawiona.

Problem jest spowodowany przez błąd blokujący powodujący wyścig w kodzie sterowników/tty/tty_jobctrl.c, który może zostać wykorzystany do stworzenia warunków dostępu do pamięci typu use-after-free, wykorzystywanych z przestrzeni użytkownika poprzez wywołanie ioct TIOCSPGRP. Zademonstrowano działający exploit dla eskalacji uprawnień w Debianie 10 z jądrem 4.19.0-13-amd64.

Jednocześnie w opublikowanym artykule nacisk kładziony jest nie tyle na technikę tworzenia działającego exploita, ile na to, jakie narzędzia istnieją w jądrze do ochrony przed takimi lukami. Wniosek nie napawa optymizmem, metody takie jak segmentacja pamięci w stercie i kontrolowanie dostępu do pamięci po jej zwolnieniu nie są w praktyce stosowane, gdyż prowadzą do spadku wydajności, a ochrona oparta na CFI (Control Flow Integrity), która blokuje exploitów w późniejszych etapach ataku, wymaga poprawy.

Rozważając, co może mieć znaczenie na dłuższą metę, należy użyć zaawansowanych analizatorów statycznych lub języków bezpiecznych dla pamięci, takich jak dialekty Rust i C z bogatymi adnotacjami (takimi jak Checked C) w fazie budowy kontrolerów stanu wyróżniają się zamki, przedmioty i wskaźniki. Wśród metod ochrony wymienia się również aktywację trybu panic_on_oops, przeniesienie struktur jądra do trybu tylko do odczytu oraz ograniczenie dostępu do wywołań systemowych za pomocą mechanizmów takich jak seccomp.

Źródło: opennet.ru

Dodaj komentarz