Mga kahinaan sa eBPF subsystem ng Linux kernel

Natukoy ang isang kahinaan (CVE-2021-29154) sa subsystem ng eBPF, na nagbibigay-daan sa iyong magpatakbo ng mga handler para sa pagsubaybay, pagsusuri sa pagpapatakbo ng mga subsystem at pamamahala ng trapiko, na isinagawa sa loob ng Linux kernel sa isang espesyal na virtual machine na may JIT, na nagbibigay-daan sa isang lokal na user upang makamit ang pagpapatupad ng kanilang code sa antas ng kernel. Lumilitaw ang problema hanggang sa paglabas ng 5.11.12 (inclusive) at hindi pa naaayos sa mga distribusyon (Debian, Ubuntu, RHEL, Fedora, SUSE, Arch). Ang pag-aayos ay magagamit bilang isang patch.

Ayon sa mga mananaliksik na natukoy ang kahinaan, nakagawa sila ng isang gumaganang prototype ng pagsasamantala para sa 32- at 64-bit na x86 system, na maaaring gamitin ng isang walang pribilehiyong user. Gayunpaman, sinabi ng Red Hat na ang kalubhaan ng problema ay depende sa kung ang eBPF system call ay naa-access ng user. Halimbawa, sa RHEL at karamihan sa iba pang mga distribusyon ng Linux sa default na configuration, ang kahinaan ay maaaring samantalahin kung ang BPF JIT ay pinagana at ang user ay may mga karapatan sa CAP_SYS_ADMIN. Bilang isang solusyon, inirerekumenda na huwag paganahin ang BPF JIT gamit ang command: echo 0 > /proc/sys/net/core/bpf_jit_enable

Ang problema ay sanhi ng isang error sa pagkalkula ng offset para sa mga tagubilin ng sangay sa panahon ng proseso ng pagbuo ng machine code ng JIT compiler. Sa partikular, kapag bumubuo ng mga tagubilin sa sangay, hindi isinasaalang-alang na ang offset ay maaaring magbago pagkatapos na dumaan sa yugto ng pag-optimize. Maaaring gamitin ang kapintasan na ito upang makabuo ng maanomalyang code ng makina at isagawa ito sa antas ng kernel.

Kapansin-pansin na hindi lamang ito ang kahinaan sa subsystem ng eBPF kamakailan. Sa katapusan ng Marso, dalawa pang kahinaan ang natukoy sa kernel (CVE-2020-27170, CVE-2020-27171), na ginagawang posible na gumamit ng eBPF upang i-bypass ang proteksyon laban sa mga kahinaan ng klase ng Spectre, na nagbibigay-daan sa pagtukoy ng mga nilalaman ng memorya ng kernel bilang resulta ng paglikha ng mga kundisyon para sa haka-haka na pagpapatupad ng ilang mga operasyon. Ang pag-atake ng Spectre ay nangangailangan ng pagkakaroon ng isang tiyak na pagkakasunod-sunod ng mga utos sa privileged code na humahantong sa speculative execution ng mga tagubilin. Sa eBPF, maraming paraan ang natagpuan upang makabuo ng mga naturang tagubilin sa pamamagitan ng mga manipulasyon sa mga programang BPF na ipinadala para sa pagpapatupad.

Ang kahinaan ng CVE-2020-27170 ay sanhi ng pagmamanipula ng pointer sa BPF verifier na nagiging sanhi ng mga speculative operations upang ma-access ang isang lugar sa labas ng mga hangganan ng buffer. Ang kahinaan CVE-2020-27171 ay dahil sa isang integer underflow error kapag nagtatrabaho sa mga pointer, na humahantong sa speculative na pag-access sa data sa labas ng buffer. Ang mga problemang ito ay naayos na sa mga kernel release 5.11.8, 5.10.25, 5.4.107, 4.19.182 at 4.14.227, at naisama na rin sa mga kernel update para sa karamihan ng mga distribusyon ng Linux. Ang mga mananaliksik ay naghanda ng isang prototype na pagsasamantala na nagpapahintulot sa isang walang pribilehiyong gumagamit na kunin ang data mula sa memorya ng kernel.

Pinagmulan: opennet.ru

Magdagdag ng komento