Forskere fra Google Project Zero-teamet offentliggjorde en metode til at udnytte en sårbarhed (CVE-2020-29661) i implementeringen af TIOCSPGRP ioctl-handleren fra tty-undersystemet i Linux-kernen og undersøgte også i detaljer de beskyttelsesmekanismer, der kunne blokere sådanne sårbarheder.
Fejlen, der forårsagede problemet, blev rettet i Linux-kernen den 3. december sidste år. Problemet dukker op i kerner op til version 5.9.13, men de fleste distributioner har løst problemet i opdateringer til kernepakker, der blev tilbudt sidste år (Debian, RHEL, SUSE, Ubuntu, Fedora, Arch). En lignende sårbarhed (CVE-2020-29660) blev samtidig fundet i implementeringen af TIOCGSID ioctl-kaldet, men den er også allerede blevet rettet overalt.
Problemet er forårsaget af en fejl ved indstilling af låse, hvilket fører til en løbstilstand i drivers/tty/tty_jobctrl.c-koden, som blev brugt til at skabe use-after-free-betingelser udnyttet fra brugerplads gennem ioct-manipulationer. ved at kalde TIOCSPGRP. En fungerende udnyttelse er blevet demonstreret til privilegieeskalering på Debian 10 med kerne 4.19.0-13-amd64.
Samtidig fokuserer den publicerede artikel ikke så meget på teknikken til at skabe en fungerende udnyttelse, men snarere på hvilke værktøjer der findes i kernen til at beskytte mod sådanne sårbarheder. Konklusionen er ikke trøstende; metoder som hukommelsessegmentering i heapen og kontrol af hukommelsesadgang, efter at den er frigivet, bruges ikke i praksis, da de fører til et fald i ydeevne, og CFI (Control Flow Integrity)-baseret beskyttelse, som blokerer udnyttelser i de senere stadier af et angreb, skal forbedres.
Når man overvejer, hvad der ville gøre en forskel på lang sigt, er en, der skiller sig ud, brugen af avancerede statiske analysatorer eller brugen af hukommelsessikre sprog som Rust- og C-dialekter med rige annoteringer (såsom Markeret C) for at kontrollere tilstand under byggefasen låse, objekter og pointere. Beskyttelsesmetoder omfatter også aktivering af panic_on_oops-tilstanden, ændring af kernestrukturer til skrivebeskyttet tilstand og begrænsning af adgang til systemopkald ved hjælp af mekanismer såsom seccomp.
Kilde: opennet.ru