Ranljivosti v podsistemu eBPF jedra Linuxa

V podsistemu eBPF je bila ugotovljena ranljivost (CVE-2021-29154), ki omogoča zagon obdelovalcev za sledenje, analiziranje delovanja podsistemov in upravljanje prometa, ki se izvajajo znotraj jedra Linuxa v posebnem virtualnem stroju z JIT, ki omogoča lokalni uporabnik, da doseže izvajanje svoje kode na ravni jedra. Težava se pojavlja do izdaje 5.11.12 (vključno) in še ni bila odpravljena v distribucijah (Debian, Ubuntu, RHEL, Fedora, SUSE, Arch). Popravek je na voljo kot popravek.

Po besedah ​​raziskovalcev, ki so odkrili ranljivost, jim je uspelo razviti delujoč prototip izkoriščanja za 32- in 64-bitne sisteme x86, ki ga lahko uporablja neprivilegiran uporabnik. Vendar Red Hat ugotavlja, da je resnost težave odvisna od tega, ali je sistemski klic eBPF dostopen uporabniku. Na primer, na RHEL in večini drugih distribucij Linuxa v privzeti konfiguraciji je ranljivost mogoče izkoristiti, če je BPF JIT omogočen in ima uporabnik pravice CAP_SYS_ADMIN. Kot rešitev je priporočljivo onemogočiti BPF JIT z ukazom: echo 0 > /proc/sys/net/core/bpf_jit_enable

Težavo povzroča napaka pri izračunu odmika za navodila razvejanja med postopkom generiranja strojne kode prevajalnika JIT. Zlasti pri generiranju navodil za razvejanje ne upošteva, da se lahko odmik spremeni po prehodu skozi stopnjo optimizacije. To napako je mogoče uporabiti za generiranje nenormalne strojne kode in njeno izvajanje na ravni jedra.

Omeniti velja, da to ni edina ranljivost v podsistemu eBPF v zadnjem času. Konec marca sta bili v jedru identificirani še dve ranljivosti (CVE-2020-27170, CVE-2020-27171), ki omogočata uporabo eBPF za obhod zaščite pred ranljivostmi razreda Spectre, ki omogočajo določanje vsebine pomnilnika jedra. kot posledica ustvarjanja pogojev za špekulativno izvajanje določenih poslov. Napad Spectre zahteva prisotnost določenega zaporedja ukazov v privilegirani kodi, ki vodi do špekulativnega izvajanja navodil. V eBPF je bilo najdenih več načinov za generiranje takšnih navodil z manipulacijami s programi BPF, ki so bili poslani v izvajanje.

Ranljivost CVE-2020-27170 je posledica manipulacije s kazalcem v preverjalniku BPF, ki povzroči špekulativne operacije za dostop do območja zunaj meja medpomnilnika. Ranljivost CVE-2020-27171 je posledica napake pretoka celega števila pri delu s kazalci, kar vodi do špekulativnega dostopa do podatkov zunaj medpomnilnika. Te težave so bile že odpravljene v izdajah jedra 5.11.8, 5.10.25, 5.4.107, 4.19.182 in 4.14.227, prav tako pa so bile vključene v posodobitve jedra za večino distribucij Linuxa. Raziskovalci so pripravili prototip izkoriščanja, ki neprivilegiranemu uporabniku omogoča pridobivanje podatkov iz pomnilnika jedra.

Vir: opennet.ru

Dodaj komentar