Varnostna vprašanja v podsystemu eBPF, ki omogočajo izvajanje kode na ravni jedra Linux

Odkrite so bile dve novi ranljivosti v podsystemu eBPF, ki omogoča zagon obdelovalnikov znotraj jedra Linux v posebnem virtualnem stroju s JIT. Obe ranljivosti omogočata izvajanje lastne kode s privilegiji jedra, zunaj izoliranega virtualnega stroja eBPF. Informacije o težavah je objavila ekipa Zero Day Initiative, ki izvaja tekmovanja Pwn2Own, v okviru katerih so bile letos prikazane tri napade na Ubuntu Linux, pri čemer so bile uporabljene prej neznane ranljivosti (ni navedeno, ali so ranljivosti v eBPF povezane s temi napadi).

  • CVE-2021-3490 — ranljivost je povzročena z odsotnostjo preverjanja prekoračitve meja 32-bitnih vrednosti pri izvajanju bitnih operacij AND, OR in XOR v eBPF ALU32. Napadalec lahko izkorišča to napako za branje in pisanje podatkov zunaj meja dodeljenega pomnilnika. Problem pri operaciji XOR se kaže od različice jedra 5.7-rc1, AND in OR pa od različice 5.10-rc1.
  • CVE-2021-3489 — ranljivost je povzročena z napako pri implementaciji krožnega pomnilnika in je povezana s tem, da funkcija bpf_ringbuf_reserve ni preverila, ali je velikost dodeljenega pomnilnika lahko manjša od dejanske velikosti krožnega pomnilnika ringbuf. Problem se kaže od različice 5.8-rc1.

Status popravkov ranljivosti v distribucijah je mogoče spremljati na naslednjih straneh: Ubuntu, Debian, RHEL, Fedora, SUSE, Arch). Popravki so prav tako na voljo v obliki popravkov (CVE-2021-3489, CVE-2021-3490). Možnost izkoriščanja težave je odvisna od dostopnosti sistemskega klica eBPF uporabniku. Na primer, v privzeti konfiguraciji v RHEL je za izkoriščanje ranljivosti potrebno, da ima uporabnik pravice CAP_SYS_ADMIN.

Izpostaviti je mogoče še eno ranljivost v jedru Linux — CVE-2021-32606, ki omogoča lokalnemu uporabniku, da poveča svoje privilegije do ravni root. Problem se kaže od jedra Linux 5.11 in je posledica stanja dirke pri implementaciji protokola CAN ISOTP, kar omogoča spremembo parametrov vezave na vtičnik zaradi pomanjkanja ustreznih zaklepov v funkciji isotp_setsockopt() pri obdelavi zastavice CAN_ISOTP_SF_BROADCAST.

Po zaprtju ISOTP vtičnika ostaja vezava na prejemni vtičnik, ki lahko še naprej uporabi strukture, povezane z vtičnikom, po osvoboditvi s tem povezanih pomnilniških enot (uporaba po osvoboditvi zaradi dostopa pri klicu isotp_rcv() do že osvobojene strukture isotp_sock). S manipulacijo z podatki je mogoče doseči prepisovanje kazalca na funkcijo sk_error_report() in izvajati svoj kodo na ravni jedra.

Izvor: opennet.ru

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster