Výzkumníci z týmu Google Project Zero publikovali metodu exploatace zranitelnosti (CVE-2020-29661) v implementaci ioctl zpracovatele TIOCSPGRP v tty subsystému jádra Linuxu a podrobně prozkoumali mechanismy ochrany, které by mohly blokovat podobné zranitelnosti.
Problém způsobující chybu byl odstraněn v jádře Linuxu již 3. prosince loňského roku. Problém se projevuje v jádrech do verze 5.9.13, ale většina distribucí problém vyřešila v aktualizacích balíčků jádra, které byly navrženy již v loňském roce (Debian, RHEL, SUSE, Ubuntu, Fedora, Arch). Podobná zranitelnost (CVE-2020-29660) byla současně nalezena v implementaci ioctl volání TIOCGSID, ale ta byla také již všude odstraněna.
Problém je způsoben chybou při nastavování zámků, což vede ke stavu závodu v kódu drivers/tty/tty_jobctrl.c, který bylo možné využít k vytváření podmínek pro přístup k paměti po jejím uvolnění (use-after-free), zneužitelných z prostoru uživatele prostřednictvím manipulací s ioctl voláním TIOCSPGRP. Funkční exploit byl demonstrován pro zvýšení privilegií v Debianu 10 s jádrem 4.19.0-13-amd64.
V publikovaném článku je důraz kladen spíše na techniky vytváření funkčního exploitu než na to, jaké nástroje v jádře existují pro ochranu před podobnými zranitelnostmi. Závěr je nepříznivý, metody typu segmentace paměti v haldě a kontroly přístupu k paměti po jejím uvolnění se v praxi nepoužívají, neboť vedou ke snížení výkonu, a ochrana založená na CFI (Control Flow Integrity), která blokuje exploity v pozdních fázích útoku, vyžaduje vylepšení.
Při zvažování toho, co by mohlo změnit situaci v dlouhodobém horizontu, se zdůrazňuje použití pokročilých statických analyzátorů nebo použití jazyků, které zajišťují bezpečný přístup k paměti, jako je Rust a dialekty jazyka C s rozšířenými anotacemi (např. Checked C), ve fázi sestavení ověřujícího stav zámků, objektů a ukazatelů. Mezi ochranné metody se také zmiňuje aktivace režimu panic_on_oops, převod struktur jádra do režimu pouze pro čtení a omezení přístupu k systémovým voláním pomocí mechanismů, jako je seccomp.
Zdroj: opennet.ru
