Istraživači iz tima Google Project Zero objavili su nedavno putem bloga nova metoda iskorištavanja ranjivosti (CVE-2020-29661) u implementaciji ioctl rukovatelja TIOCSPGRP od Linux kernel tty podsustav, kao i detaljne zaštitne mehanizme koji bi mogli blokirati te ranjivosti.
U postu se spominje da problem je uzrokovan pogreškom u postavkama zaključavanja, što je dovelo do stanja utrke u kodu /tty/tty_jobctrl.c, koji je korišten za stvaranje uvjeta za pristup memoriji nakon pokretanja (use-after-free), iskorištavan od strane korisničkog prostora kroz manipulaciju s ioct- pozivanjem TIOCSPGRP.
Osim objavljenih informacija, također izvedena je funkcionalna demonstracija eksploatacije za eskalaciju privilegija u Debian 10 s kernelom 4.19.0-13-amd64 a što također ne isključuje da može utjecati na razne distribucije, među kojima su naravno i one temeljene i izvedene iz Debiana.
Mnoge pojedinačne tehnike iskorištavanja i opcije ublažavanja koje ovdje opisujem nisu nove. Međutim, mislim da ih vrijedi pisati zajedno kako bi se pokazalo kako različita ublažavanja djeluju s prilično normalnim exploit-om bez naknadnog korištenja.
Isječci koda u ovom postu na blogu koji su relevantni za eksploataciju preuzeti su iz prethodne verzije 4.19.160, jer se na tome temelji ciljna Debian kernel; neki drugi isječci koda su iz Linux mainlinea.
Istovremeno, u objavljenom članku, naglasak nije toliko na tehnici stvaranja funkcionalnog exploita, već na tome koji alat ima ih u kernelu da se zaštitiš protiv takvih ranjivosti.
Zaključak je razočaravajući, budući da se spominje da se metode poput segmentiranja memorije u hrpi i kontrole pristupa memoriji nakon što se ona oslobodi ne primjenjuju u praksi jer dovode do degradacije performansi i zaštite temeljene na CFI (Control Flow Integrity), koji blokira eksploatacije u kasnijim fazama napada, zahtijeva poboljšanja.
Posebna vrsta terminalnog uređaja su pseudo terminali, koji se koriste kada, primjerice, otvorite terminalsku aplikaciju u grafičkom okruženju ili se spojite na udaljeni stroj putem SSH-a. Dok su drugi terminalni uređaji spojeni na neku vrstu hardvera, oba kraja pseudoterminala kontroliraju se korisničkim prostorom, a pseudoterminali se mogu slobodno kreirati korisničkim prostorom (bez privilegija).
Kad god se otvori / dev / ptmx (kratica od "pseudo-terminal multiplexer"), rezultirajući deskriptor datoteke predstavlja stranu uređaja (koja se u dokumentaciji i izvorima kernela naziva "glavni pseudoterminal") uređaja. novi pseudo -terminal.
Odgovarajući terminalni uređaj (na koji se obično povezuje ljuska) jezgra automatski kreira pod / dev / pts / .
Kada gledamo što bi dugoročno moglo napraviti razliku, naglasak je na korištenju naprednih statičkih analizatora ili korištenju memorijskih jezika poput Rust i C dijalekata s proširenim napomenama (poput dokazanog C) za izradu provjera statusa, zaključavanja, objekata i pokazivača. Metode zaštite također spominju omogućavanje panic_on_oops načina rada, čineći strukture jezgre samo za čitanje i ograničavajući pristup sistemskim pozivima putem mehanizama kao što je seccomp.
Pogreška koja uzrokuje problem popravljen je u Linux kernelu 3. prosinca prošle godine. Problem manifestira se u kernelima prije verzije 5.9.13, ali većina distribucija riješila je problem u ažuriranjima paketa kernela koja su ponuđena prošle godine.
Također se spominje slična ranjivost (CVE-2020-29660) koja je istovremeno pronađena u implementaciji TIOCGSID ioctl poziva, ali je također posvuda uklonjena.
Konačno Ako vas zanima više o tome, možete provjeriti detalje U sljedećem linku.