Vedci z tímu Google Project Zero zverejnili metódu využitia zraniteľnosti (CVE-2020-29661) v implementácii ioctl-handleru TIOCSPGRP z tty subsystému jadra Linux a podrobne preskúmali ochranné mechanizmy, ktoré by mohli zablokovať takéto zraniteľnosti.
Problém spôsobujúca chyba bola odstránená v jadre Linux už 3. decembra minulého roka. Problém sa prejavuje v jadrách do verzie 5.9.13, ale väčšina distribúcií túto otázku vyriešila v aktualizáciách balíkov s jadrom, ktoré boli navrhnuté už minulý rok (Debian, RHEL, SUSE, Ubuntu, Fedora, Arch). Podobná zraniteľnosť (CVE-2020-29660) bola zároveň objavená v implementácii ioctl-výzvy TIOCGSID, ale táto bola už tiež vo všeobecnosti odstránená.
Problém je spôsobený chybou pri nastavovaní zámkov, čo vedie k stavovej závode v kóde drivers/tty/tty_jobctrl.c, ktorý sa dal využiť na vytvorenie podmienok na prístup k pamäti po jej uvoľnení (use-after-free), exploatovaných z užívateľského priestoru prostredníctvom manipulácie s ioct-výzvou TIOCSPGRP. Funkčný exploit bol demonštrovaný na zvýšenie privilégia v Debiane 10 s jadrom 4.19.0-13-amd64.
Pri tom zverejnený článok kladie dôraz nie len na techniku vytvorenia funkčného exploitu, ale aj na to, aké nástroje v jadre existujú na ochranu proti podobným zraniteľnostiam. Záver je minimálne povzbudzujúci; metódy ako segmentácia pamäte v hromade a kontrola prístupu k pamäti po jej uvoľnení sa v praxi nepoužívajú, pretože vedú k zníženiu výkonu, a ochrana na základe CFI (Control Flow Integrity), ktorá blokuje exploidy v neskorších fázach útoku, si vyžaduje úpravy.
Pri úvahe o tom, čo by mohlo zmeniť situáciu v dlhodobom horizonte, sa vyzdvihuje využitie pokročilých statických analyzátorov alebo použitie jazykov, ktoré zabezpečujú bezpečnú prácu s pamäťou, ako sú Rust a dialekty jazyka C s rozšírenými anotáciami (napríklad Checked C), v etape zostavovania, ktoré kontrolujú stav zámkov, objektov a ukazovateľov. Medzi metódy ochrany sa tiež spomína aktivácia režimu panic_on_oops, prevod štruktúr jadra do režimu iba na čítanie a obmedzenie prístupu k systémovým volaniam prostredníctvom takých mechanizmov, ako je seccomp.
Zdroj: opennet.ru
