Istraživači iz Google Project Zero tima objavili su nedavno putem bloga nova metoda iskorišćavanja ranjivosti (CVE-2020-29661) u implementaciji ioctl rukovaoca TIOCSPGRP od Linux kernel tty podsistem, kao i detaljne zaštitne mehanizme koji bi mogli blokirati ove ranjivosti.
U postu se pominje da problem je uzrokovan greškom u postavkama zaključavanja, što je dovelo do stanja trke u kodu /tty/tty_jobctrl.c, koji je korišten za stvaranje uslova za pristup memoriji nakon pokretanja (use-after-free), koji je iskoristio korisnički prostor kroz manipulaciju sa ioct- pozivanjem TIOCSPGRP.
Pored objavljenih informacija, takođe izvršena je funkcionalna demonstracija eksploatacije za eskalaciju privilegija Debian 10 s kernelom 4.19.0-13-amd64 i što također ne isključuje da može utjecati na različite distribucije, među kojima su naravno one temeljene i izvedene iz Debiana.
Mnoge individualne tehnike eksploatacije i opcije ublažavanja koje ovdje opisujem nisu nove. Međutim, mislim da je vrijedno pisati ih zajedno kako bismo pokazali kako različita ublažavanja imaju interakciju s prilično normalnim exploit-om bez upotrebe.
Isječci koda u ovom blog postu koji su relevantni za eksploataciju preuzeti su iz prethodne verzije 4.19.160, jer se na tome temelji ciljno Debian kernel; neki drugi isječci koda su iz glavne linije Linuxa.
Istovremeno, u objavljenom članku, naglasak nije toliko na tehnici kreiranja funkcionalnog eksploata, već na tome koji alati ima ih u kernelu da se zaštitite protiv takvih ranjivosti.
Zaključak je razočaravajući, jer se spominje da se metode kao što su segmentiranje memorije u hrpi i kontrola pristupa memoriji nakon njenog oslobađanja ne primjenjuju u praksi jer dovode do degradacije performansi i zaštite zasnovane na CFI (Control Flow Integrity), koji blokira eksploatacije u kasnijim faze napada, zahtijeva poboljšanja.
Posebna vrsta terminalnog uređaja su pseudo-terminali, koji se koriste kada, na primjer, otvorite terminalsku aplikaciju u grafičkom okruženju ili se povežete na udaljenu mašinu putem SSH-a. Dok su drugi terminalni uređaji povezani na neku vrstu hardvera, oba kraja pseudo-terminala kontroliraju se korisničkim prostorom, a pseudo-terminali se mogu slobodno kreirati korisničkim prostorom (bez privilegija).
Kad god se / dev / ptmx otvori (skraćeno od "pseudo-terminal multiplexer"), rezultujući deskriptor datoteke predstavlja stranu uređaja (koja se u dokumentaciji i izvorima kernela pominje kao "glavni pseudo-terminal") uređaja. novi pseudo -terminal.
Odgovarajući terminalni uređaj (na koji se školjka normalno povezuje) jezgro automatski kreira pod / dev / pts / .
Kada gledamo šta bi dugoročno moglo napraviti razliku, naglasak je na korišćenju naprednih statičkih parsera ili na korišćenju memorijskih jezika kao što su Rust i C dijalekti sa proširenim napomenama (poput dokazanog C) za pravljenje provera statusa, zaključavanja, objekata i pokazivača. Metode zaštite takođe pominju omogućavanje panic_on_oops režima, čineći strukture kernela samo za čitanje i ograničavajući pristup sistemskim pozivima kroz mehanizme kao što je seccomp.
Greška koja uzrokuje problem popravljen je u Linux kernelu 3. decembra prošle godine. Problem manifestira se u kernelima prije verzije 5.9.13, ali većina distribucija je riješila problem u ažuriranjima paketa kernela koja su ponuđena prošle godine.
Pominje se i slična ranjivost (CVE-2020-29660) koja je istovremeno pronađena u implementaciji TIOCGSID ioctl poziva, ali je također svuda uklonjena.
Konačno Ako ste zainteresirani da saznate više o tome, možete provjeriti detalje Na sledećem linku.