Ang kahinaan sa eBPF subsystem na nagbibigay-daan sa pagpapatupad ng code sa antas ng kernel ng Linux

Natukoy ang isang kahinaan (CVE-2021-4204) sa subsystem ng eBPF, na nagbibigay-daan sa iyong magpatakbo ng mga handler sa loob ng Linux kernel sa isang espesyal na virtual machine na may JIT, na nagpapahintulot sa isang lokal na walang pribilehiyong user na makamit ang pagtaas ng pribilehiyo at isagawa ang kanilang code sa Antas ng kernel ng Linux. Ang problema ay lumilitaw mula noong Linux kernel 5.8 at nananatiling hindi naayos (kabilang ang release 5.16). Ang katayuan ng mga update na nabuo upang ayusin ang problema sa mga pamamahagi ay maaaring masubaybayan sa mga pahinang ito: Debian, RHEL, SUSE, Fedora, Ubuntu, Arch. Inanunsyo na ang isang gumaganang pagsasamantala ay nilikha, na binalak na mai-publish sa Enero 18 (mga user at developer ay binigyan ng isang linggo upang ayusin ang kahinaan).

Ang kahinaan ay sanhi ng maling pag-verify ng mga programang eBPF na ipinadala para sa pagpapatupad. Ang eBPF subsystem ay nagbibigay ng mga auxiliary function, ang tamang paggamit nito ay na-verify ng isang espesyal na verifier. Ang ilang mga function ay nangangailangan ng pagpasa ng isang halaga ng PTR_TO_MEM bilang isang argumento, at upang maiwasan ang mga posibleng buffer overflow, dapat malaman ng verifier ang laki ng memorya na nauugnay sa argumento. Para sa mga function ng bpf_ringbuf_submit at bpf_ringbuf_discard, ang data sa laki ng inilipat na memorya ay hindi iniulat sa verifier, na maaaring magamit upang i-overwrite ang mga lugar ng memorya na lampas sa hangganan ng buffer kapag nagpapatupad ng espesyal na idinisenyong eBPF code.

Upang magsagawa ng pag-atake, dapat na mai-load ng user ang sarili niyang BPF program, at maraming kamakailang pamamahagi ng Linux ang humaharang sa kakayahang ito bilang default (kabilang ang walang pribilehiyong pag-access sa eBPF ay ipinagbabawal na ngayon bilang default sa kernel mismo, simula sa release 5.16). Halimbawa, ang kahinaan ay maaaring samantalahin sa default na pagsasaayos sa Ubuntu 20.04 LTS, ngunit sa mga kapaligiran na Ubuntu 22.04-dev, Debian 11, openSUSE 15.3, RHEL 8.5, SUSE 15-SP4 at Fedora 33 ay lilitaw lamang kung itinakda ng administrator. ang kernel.unprivileged_bpf_disabled na parameter sa 0. Bilang isang solusyon para sa pagharang sa kahinaan, maaari mong pigilan ang pagpapatupad ng mga BPF program ng mga unprivileged user gamit ang command na β€œsysctl -w kernel.unprivileged_bpf_disabled=1”.

Pinagmulan: opennet.ru

Magdagdag ng komento