Zraniteľnosti v subsystéme eBPF, ktoré umožňujú vykonávať kód na úrovni jadra Linuxu

Boli zistené dve nové zraniteľnosti v subsystéme eBPF, ktorý umožňuje spúšťať spracovateľov v rámci jadra Linuxu v špeciálnej virtuálnej machine s JIT. Obe zraniteľnosti poskytujú možnosť vykonať vlastný kód s právami jadra, mimo izolovanej virtuálnej machine eBPF. Informácie o problémoch zverejnil tím Zero Day Initiative, ktorý organizuje súťaže Pwn2Own, kde tento rok boli demonštrované tri útoky na Ubuntu Linux, pri ktorých boli využité predtým neznáme zraniteľnosti (neuvádza sa, či sú zraniteľnosti v eBPF spojené s týmito útokmi).

  • CVE-2021-3490 — zraniteľnosť je spôsobená absenciou kontroly prekročenia hranice 32-bitových hodnôt pri vykonávaní bitových operácií AND, OR a XOR v eBPF ALU32. Útočník môže využiť túto chybu na čítanie a zápis dát mimo hraníc vyhradeného buffera. Problém s operáciou XOR sa prejavuje od verzie jadra 5.7-rc1, a AND a OR od vydania 5.10-rc1.
  • CVE-2021-3489 — zraniteľnosť je spôsobená chybou v implementácii kruhového bufferu a súvisí s tým, že funkcia bpf_ringbuf_reserve nekontrolovala, či môže byť veľkosť vyhradeného priestoru pamäte menšia ako skutočná veľkosť kruhového bufferu ringbuf. Problém sa prejavuje od vydania 5.8-rc1.

Štatus opravy zraniteľností v distribúciách je možné sledovať na týchto stránkach: Ubuntu, Debian, RHEL, Fedora, SUSE, Arch. Opravy sú tiež dostupné vo forme patchov (CVE-2021-3489, CVE-2021-3490). Možnosť exploitácie problému závisí od dostupnosti systémového volania eBPF pre používateľa. Napríklad v predvolenej konfigurácii v RHEL je na exploitáciu zraniteľnosti potrebné, aby mal používateľ práva CAP_SYS_ADMIN.

Samostatne možno spomenúť ešte jednu zraniteľnosť v jadre Linux — CVE-2021-32606, ktorá umožňuje lokálnemu používateľovi zvýšiť svoje práva na úroveň root. Problém sa prejavuje od jadra Linux 5.11 a je spôsobený stavom pretekania v implementácii protokolu CAN ISOTP, ktorý umožňuje zmeniť parametre väzby na socket z dôvodu absencie nastavenia riadnych zámkov vo funkcii isotp_setsockopt() pri spracovaní flagu CAN_ISOTP_SF_BROADCAST.

Po uzavretí soketu ISOTP naďalej pretrváva väzba na soket príjemcu, ktorý môže pokračovať v používaní štruktúr súvisiacich so soketom aj po uvoľnení s nimi spojenej pamäte (use-after-free z dôvodu prístupu pri volaní isotp_rcv() k už uvoľnenej štruktúre isotp_sock). Manipuláciou s údajmi je možné dosiahnuť predefinovanie ukazovateľa na funkciu sk_error_report() a vykonať vlastný kód na úrovni jadra.

Zdroj: opennet.ru

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster