V eBPF podsklopu, ki omogoča izvajanje obdelovalcev za sledenje, analizo delovanja podsklopov in upravljanje prometa, ki se izvajajo znotraj jedra Linuxa v posebnem virtualnem stroju z JIT, je bila odkrita ranljivost (CVE-2021-29154), ki omogoča lokalnemu uporabniku izvrševanje svojega kode na ravni jedra. Težava se kaže do izdanja 5.11.12 (vključno) in še ni bila odpravljena v distribucijah (Debian, Ubuntu, RHEL, Fedora, SUSE, Arch). Odprava je na voljo v obliki popravka.
Po trditvah raziskovalcev, ki so odkrili ranljivost, so razvili delujoč prototip izkoriščanja za 32- in 64-bitne sisteme x86, ki ga lahko uporabi nepriviligiran uporabnik. Podjetje Red Hat pa opozarja, da nevarnost težave odvisna od razpoložljivosti sistemskega klica eBPF uporabniku. Na primer, v RHEL-u in večini drugih distribucij Linuxa v privzeti konfiguraciji se ranljivost lahko izkoristi ob vključeni BPF JIT in ob prisotnosti pravic CAP_SYS_ADMIN pri uporabniku. Kot obvodno mero zaščite priporočamo, da onemogočite BPF JIT z ukazom: echo 0 > /proc/sys/net/core/bpf_jit_enable
Težava je povzročena zaradi napake pri izračunu premika za ukaze vejic v procesu generiranja strojne kode s JIT prevajalnikom. Zlasti pri generiranju vejic se ne upošteva, da se lahko premik spremeni po optimizacijski fazi. Omenjena pomanjkljivost se lahko izrabi za oblikovanje abnormalne strojne kode in njeno izvrševanje na ravni jedra.
Zanimivo je, da to ni edina ranljivost v podsklopu eBPF v zadnjem času. Konec marca so v jedru odkrili še dve ranljivosti (CVE-2020-27170, CVE-2020-27171), ki omogočata uporabo eBPF za obhod zaščit pred ranljivostmi razreda Spectre, ki omogoča določanje vsebine pomnilnika jedra kot posledica ustvarjanja pogojev za spekulativno izvajanje določenih operacij. Za napad Spectre je potrebno, da je v privilegiranem kodi določena zaporedje ukazov, ki vodi do spekulativnega izvajanja instrukcij. V eBPF so odkrili več načinov za generiranje takšnih instrukcij preko manipulacij z BPF programi, ki se izvajajo.
Ranljivost CVE-2020-27170 je povzročena z manipulacijo kazalcev v preveritelju BPF, ki povzroča spekulativne operacije dostopa do območja zunaj meja pomnilnika. Ranljivost CVE-2020-27171 je povezana z napako celotne aritmetike (integer underflow) pri delu s kazalci, kar vodi do spekulativnega dostopa do podatkov zunaj pomnilnika. Omenjeni težavi sta že odpravljeni v izdajah jedra 5.11.8, 5.10.25, 5.4.107, 4.19.182 in 4.14.227 ter vključeni v posodobitve jedra večine distribucij Linux. Raziskovalci so pripravili prototip exploita, ki omogoča neprivilegiranemu uporabniku, da pridobi podatke iz pomnilnika jedra.
Izvor: opennet.ru
