Ranjivosti u eBPF podsistemu koje dozvoljavaju izvršavanje koda na nivou Linux kernela

Dve nove ranjivosti su identifikovane u eBPF podsistemu, koji vam omogućava da pokrenete rukovaoce unutar Linux kernela u posebnoj virtuelnoj mašini sa JIT-om. Obe ranjivosti omogućavaju izvršavanje vašeg koda sa pravima kernela, izvan izolovane eBPF virtuelne mašine. Informaciju o problemima objavio je tim Zero Day Initiative, koji vodi takmičenje Pwn2Own, tokom kojeg su ove godine demonstrirana tri napada na Ubuntu Linux koji su koristili ranije nepoznate ranjivosti (nije prijavljeno da li su ranjivosti u eBPF-u povezane sa ovim napadima) .

  • CVE-2021-3490 - Ranjivost je uzrokovana nedostatkom 32-bitne provjere izvan granica prilikom izvođenja operacija AND, OR i XOR u eBPF ALU32. Napadač može iskoristiti ovu grešku za čitanje i pisanje podataka izvan granica dodijeljenog bafera. Problem sa XOR operacijama pojavljuje se počevši od verzije kernela 5.7-rc1, i I i OR - počevši od 5.10-rc1.
  • CVE-2021-3489 - Ranjivost je uzrokovana greškom u implementaciji prstenastog bafera i nastala je 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 zakrpa ranjivosti u distribucijama može se pratiti na ovim stranicama: Ubuntu, Debian, RHEL, Fedora, SUSE, Arch). Popravci su takođe dostupni kao zakrpe (CVE-2021-3489, CVE-2021-3490). Da li se problem može iskoristiti zavisi od toga da li je eBPF sistemski poziv dostupan korisniku. Na primjer, u zadanoj konfiguraciji u RHEL-u, iskorištavanje ranjivosti zahtijeva od korisnika da ima CAP_SYS_ADMIN prava.

Odvojeno, možemo primijetiti još jednu ranjivost u Linux kernelu - CVE-2021-32606, koja omogućava lokalnom korisniku da podigne svoje privilegije na root nivo. Problem je evidentan još od Linux kernela 5.11 i uzrokovan je trkom u implementaciji CAN ISOTP protokola, što omogućava promjenu parametara povezivanja soketa zbog nedostatka postavljanja odgovarajućih zaključavanja u funkciji isotp_setsockopt() prilikom obrade zastavice CAN_ISOTP_SF_BROADCAST.

Nakon što se ISOTP utičnica zatvori, vezanje za utičnicu primatelja ostaje na snazi, koja može nastaviti koristiti strukture povezane s utičnicom nakon što se memorija povezana s njima oslobodi (besplatno korištenje zbog poziva isotp_sock strukture koji je već oslobođen kada se pozove isotp_rcv(). Kroz manipulaciju podacima, možete nadjačati pokazivač na funkciju sk_error_report() i izvršiti svoj kod na nivou kernela.

izvor: opennet.ru

Dodajte komentar