Ranjivosti u eBPF podsustavu koje dopuštaju izvršavanje koda na razini Linux kernela

Identificirane su dvije nove ranjivosti u eBPF podsustavu, koji vam omogućuje pokretanje rukovatelja unutar Linux kernela u posebnom virtualnom stroju s JIT-om. Obje ranjivosti omogućuju izvršavanje vašeg koda s pravima jezgre, izvan izoliranog eBPF virtualnog stroja. Informaciju o problemima objavio je tim Zero Day Initiative koji vodi natjecanje Pwn2Own tijekom kojeg su ove godine demonstrirana tri napada na Ubuntu Linux koji su koristili do sada nepoznate ranjivosti (jesu li ranjivosti u eBPF-u povezane s tim napadima nije objavljeno) .

  • CVE-2021-3490 - Ranjivost je uzrokovana nedostatkom provjere 32-bitnih vrijednosti izvan granica prilikom izvođenja bit-wise AND, OR i XOR operacija u eBPF ALU32. Napadač može iskoristiti ovu pogrešku za čitanje i pisanje podataka izvan granica dodijeljenog međuspremnika. Problem s XOR operacijama pojavljuje se počevši od verzije kernela 5.7-rc1, a AND i OR - počevši od 5.10-rc1.
  • CVE-2021-3489 - Ranjivost je uzrokovana pogreškom u implementaciji međuspremnika prstena i zbog činjenice da funkcija bpf_ringbuf_reserve nije provjerila mogućnost da veličina dodijeljene memorijske regije može biti manja od stvarne veličine od ringbufa. Problem se pojavljuje od izdanja 5.8-rc1.

Status krpanja ranjivosti u distribucijama može se pratiti na ovim stranicama: Ubuntu, Debian, RHEL, Fedora, SUSE, Arch). Popravci su također dostupni kao zakrpe (CVE-2021-3489, CVE-2021-3490). Može li se problem iskoristiti ovisi o tome je li eBPF sistemski poziv dostupan korisniku. Na primjer, u zadanoj konfiguraciji u RHEL-u, iskorištavanje ranjivosti zahtijeva da korisnik ima prava CAP_SYS_ADMIN.

Zasebno možemo primijetiti još jednu ranjivost u Linux kernelu - CVE-2021-32606, koja lokalnom korisniku omogućuje podizanje privilegija na root razinu. Problem je očit od Linux kernela 5.11 i uzrokovan je stanjem utrke u implementaciji CAN ISOTP protokola, koji omogućuje promjenu parametara vezanja utičnice zbog nepostojanja odgovarajućih zaključavanja u funkciji isotp_setsockopt(). prilikom obrade zastavice CAN_ISOTP_SF_BROADCAST.

Nakon što se ISOTP utičnica zatvori, vezanje na utičnicu primatelja ostaje na snazi, koja može nastaviti koristiti strukture povezane s utičnicom nakon oslobađanja memorije povezane s njima (use-after-free zbog reference na već oslobođeni isotp_sock struktura kada se isotp_rcv() pozove). Kroz manipulaciju podacima, možete nadjačati pokazivač na funkciju sk_error_report() i izvršiti svoj kod na razini jezgre.

Izvor: opennet.ru

Dodajte komentar