Mga kahinaan sa subsystem ng eBPF na nagpapahintulot sa pagpapatupad ng code sa antas ng kernel ng Linux

Dalawang bagong kahinaan ang natukoy sa eBPF subsystem, na nagbibigay-daan sa iyong magpatakbo ng mga handler sa loob ng Linux kernel sa isang espesyal na virtual machine na may JIT. Ang parehong mga kahinaan ay ginagawang posible na isagawa ang iyong code gamit ang mga karapatan sa kernel, sa labas ng isang nakahiwalay na eBPF virtual machine. Ang impormasyon tungkol sa mga problema ay nai-publish ng koponan ng Zero Day Initiative, na nagpapatakbo ng kumpetisyon ng Pwn2Own, kung saan sa taong ito ay ipinakita ang tatlong pag-atake sa Ubuntu Linux na gumamit ng mga dating hindi kilalang kahinaan (kung ang mga kahinaan sa eBPF ay nauugnay sa mga pag-atake na ito ay hindi iniulat) .

  • CVE-2021-3490 - Ang kahinaan ay sanhi ng kakulangan ng 32-bit na out-of-bounds checking kapag gumaganap ng bitwise AND, OR, at XOR operations sa eBPF ALU32. Maaaring samantalahin ng isang umaatake ang error na ito upang magbasa at magsulat ng data sa labas ng mga hangganan ng inilalaang buffer. Lumilitaw ang problema sa mga operasyon ng XOR simula sa bersyon ng kernel 5.7-rc1, at AT at O ​​- simula sa 5.10-rc1.
  • CVE-2021-3489 - Ang kahinaan ay sanhi ng isang error sa pagpapatupad ng ring buffer at dahil sa ang katunayan na ang bpf_ringbuf_reserve function ay hindi nasuri ang posibilidad na ang laki ng inilalaan na rehiyon ng memorya ay maaaring mas mababa kaysa sa aktwal na laki ng ringbuf. Lumilitaw ang problema mula noong inilabas ang 5.8-rc1.

Ang katayuan ng pag-patch ng mga kahinaan sa mga pamamahagi ay maaaring masubaybayan sa mga pahinang ito: Ubuntu, Debian, RHEL, Fedora, SUSE, Arch). Available din ang mga pag-aayos bilang mga patch (CVE-2021-3489, CVE-2021-3490). Kung ang isyu ay maaaring pagsamantalahan ay depende sa kung ang eBPF system call ay naa-access ng user. Halimbawa, sa default na configuration sa RHEL, ang pagsasamantala sa kahinaan ay nangangailangan ng user na magkaroon ng mga karapatan sa CAP_SYS_ADMIN.

Hiwalay, maaari nating tandaan ang isa pang kahinaan sa Linux kernel - CVE-2021-32606, na nagpapahintulot sa isang lokal na gumagamit na itaas ang kanilang mga pribilehiyo sa antas ng ugat. Ang problema ay maliwanag mula noong Linux kernel 5.11 at sanhi ng kundisyon ng lahi sa pagpapatupad ng CAN ISOTP protocol, na ginagawang posible na baguhin ang mga parameter na nagbubuklod ng socket dahil sa kakulangan ng pagtatakda ng wastong mga lock sa isotp_setsockopt() function. kapag pinoproseso ang CAN_ISOTP_SF_BROADCAST flag.

Matapos isara ang ISOTP socket, mananatiling may bisa ang pagbubuklod sa socket ng tatanggap, na maaaring patuloy na gamitin ang mga istrukturang nauugnay sa socket pagkatapos mapalaya ang memory na nauugnay sa mga ito (use-after-free dahil sa tawag sa isotp_sock structure na napalaya na kapag tinawag ang isotp_rcv()). Sa pamamagitan ng pagmamanipula ng data, maaari mong i-override ang pointer sa function na sk_error_report() at i-execute ang iyong code sa antas ng kernel.

Pinagmulan: opennet.ru

Magdagdag ng komento