eBPF posistemio pažeidžiamumas, leidžiantis vykdyti kodą Linux branduolio lygiu

eBPF posistemyje buvo nustatytas pažeidžiamumas (CVE-2021-4204), leidžiantis paleisti tvarkykles Linux branduolio viduje specialioje virtualioje mašinoje su JIT, leidžiančia vietiniam neprivilegijuotam vartotojui pasiekti privilegijų eskalavimą ir vykdyti savo kodą Linux branduolio lygis. Problema atsirado nuo 5.8 Linux branduolio ir lieka nepataisyta (įskaitant 5.16 leidimą). Atnaujinimų, generuojamų siekiant išspręsti platinimo problemą, būseną galima stebėti šiuose puslapiuose: Debian, RHEL, SUSE, Fedora, Ubuntu, Arch. Paskelbta, kad sukurtas veikiantis išnaudojimas, kurį planuojama paskelbti sausio 18 d. (vartotojams ir kūrėjams suteikta savaitė pažeidžiamumui pataisyti).

Pažeidžiamumą sukelia neteisingas eBPF programų, perduodamų vykdyti, patikrinimas. eBPF posistemis teikia pagalbines funkcijas, kurių teisingą naudojimą patikrina specialus tikrintojas. Kai kurioms funkcijoms reikia perduoti PTR_TO_MEM reikšmę kaip argumentą, o kad būtų išvengta galimo buferio perpildymo, tikrintojas turi žinoti su argumentu susietos atminties dydį. Funkcijoms bpf_ringbuf_submit ir bpf_ringbuf_discard tikrintojui nebuvo pranešta apie perkeltos atminties dydį, kuris gali būti naudojamas perrašyti atminties sritis už buferio ribos, kai vykdomas specialiai sukurtas eBPF kodas.

Norėdami įvykdyti ataką, vartotojas turi turėti galimybę įkelti savo BPF programą, o daugelis naujausių Linux platinimų blokuoja šią galimybę pagal numatytuosius nustatymus (įskaitant neprivilegijuotą prieigą prie eBPF dabar pagal nutylėjimą draudžiama pačiame branduolyje, pradedant nuo 5.16 versijos). Pavyzdžiui, pažeidžiamumą galima išnaudoti numatytoje konfigūracijoje Ubuntu 20.04 LTS, tačiau Ubuntu 22.04-dev, Debian 11, openSUSE 15.3, RHEL 8.5, SUSE 15-SP4 ir Fedora 33 aplinkose jis pasirodo tik tada, jei administratorius nustatė parametrą kernel.unprivileged_bpf_disabled į 0. Norėdami blokuoti pažeidžiamumą, galite neleisti BPF programų vykdyti neprivilegijuotiems vartotojams naudodami komandą „sysctl -w kernel.unprivileged_bpf_disabled=1“.

Šaltinis: opennet.ru

Добавить комментарий