Otkrivene su informacije o šesto ranjivosti (1, 2-3, 4, 5), koja omogućava neprivilegiranom lokalnom korisniku da dobije root prava prepisivanjem podataka u strančnom kešu. Ranjivost nosi kodno ime PinTheft. Dostupan je prototip eksploita. CVE identifikator još nije dodeljen. Ispravka je trenutno dostupna samo u obliku patcheva, koji su objavljeni 5. maja, a 11. maja su prihvaćeni u granu netdev, ali nisu uključeni u korektivna izdanja jezgra.
Ranjivost je prisutna u implementaciji mrežnog protokola RDS (Reliable Datagram Sockets), koji je namenjen za brz i pouzdan prenos poruka između čvorova u klasteru, sa minimalnom latencijom i garantovanom isporukom. Napad je moguć na sistemima sa uključenom podsistemom io_uring (io_uring_disabled=0) i jezgrom kompajliranom sa opcijama CONFIG_RDS, CONFIG_RDS_TCP i CONFIG_IO_URING. Za rad eksploita, u sistemu mora biti dostupan izvršni fajl za čitanje sa SUID-root flagom.
Za automatsko učitavanje modula jezgra rds_tcp, eksploit zahteva slanje podataka preko RDS korišćenjem transporta SO_RDS_TRANSPORT=2. Primećeno je da je među testiranim distribucijama Linux, u konfiguraciji po defaultu, modul jezgra rds dostupan samo u Arch Linux-u. Da bi se ranjivost blokirala, može se onemogućiti automatsko učitavanje modula jezgra rds i rds_tcp: rmmod rds_tcp rds printf 'install rds /bin/false\ninstall rds_tcp /bin/false\n' > /etc/modprobe.d/pintheft.conf
Ranjivost je izazvana greškom u implementaciji mehanizma zerocopy u funkciji rds_message_zcopy_from_user(), koja vrši direktnu promenu podataka u strančnom kešu kako bi se izbeglo nepotrebno baferisanje. U slučaju greške, nije vršeno čišćenje polja rm->data.op_nents, što je dovelo do dvostrukog oslobađanja bafera (double-free). Pojava netačne vrednosti u brojaču referenci mogla je se iskoristiti za prepisivanje podataka u strančnom kešu, zahvaljujući manipulaciji sa pokazivačem na fiksni bafer io_uring.
U ostalom, mehanizam iskorištavanja tipičan je za sve ranjivosti ove kategorije - napadač postiže preuzimanje datoteke programa s suid root oznakom u memorijskom predmemoriranju, nakon čega u ELF zaglavlje umetne kod za pokretanje /usr/bin/sh. Nakon ove manipulacije, pokretanje programa dovodi do učitavanja u memoriju neoriginalne izvršne datoteke iz spremnika, već izmijenjene kopije iz memorijskog predmemoriranja. Za razliku od prethodnih eksploita, nova verzija prilagođena je isključivo za napad na alat „su“, ali se može koristiti i u prisustvu takvih suid programa u sustavu kao što su mount, passwd, chsh, newgrp, umount i pkexec.
Izvor: opennet.ru
