Linuxi tuumas avastati haavatavus (CVE-2021-3609), mis võimaldab kohalikul kasutajal tõsta oma õigusi süsteemis. Probleem tuleneb võistlusolukorrast CAN BCM protokolli rakenduses ja see ilmneb Linuxi tuumades alates 2.6.25 kuni 5.13-rc6. Jaotustes jääb probleem praegu lahendamata (RHEL, Fedora, Debian, Ubuntu, SUSE, Arch).
Haavatavuse avastanud teadlane suutis koostada eksploidimise, et saada root õigused Linuxi tuumadega 5.4 ja uuemates süsteemides, sealhulgas näidati, et rünnak on edukalt teostatav Ubuntu 20.04.02 LTS-s. Pole välistatud, et eksploidimist saab kohandada ka vanemate tuumade jaoks (tuumas 5.4 viidi CAN BCM kood (net/can/bcm.c) hrtimer_tasklet-ilt HRTIMER_MODE_SOFT-ile).
CAN BCM protokoll võimaldab registreerida oma sõnumitöötleja, mis saabub läbi CAN (controller area network) bussiga, ja kinnitada selle teatud võrgu soketiga. Kui sisend sõnum saabub, kutsutakse esile funktsioon bcm_rx_handler(). Ründaja võib kasutada võistlusolukorda ja saavutada võrgu soketi sulgemise samal ajal, kui bcm_rx_handler() töötab. Soketi sulgemisel kutsutakse esile funktsioon bcm_release(), kus vabastatakse mälu, mis on eraldatud bcm_op ja bcm_sock struktuuride jaoks, mis jätkavad kasutamist veel käimasolevas bcm_rx_handler() töötlejas. Tekib olukord, mis viib juba vabastatud mälu ploki juurde pääsemiseni (use-after-free).
Rünnak koosneb kahest CAN BCM soketi avamisest ja nende sidumisest vcan-liidesega. Esimeses soketis tehakse call sendmsg() RX_SETUP lipuga, et seadistada CAN sõnumite töötlejat, samas kui teises soketis tehakse sendmsg() call sõnumi saatmiseks esimesse soketti. Kui sõnum saabub, kutsub see esile bcm_rx_handler() ja ründaja valib õige hetke, et sulgeda esimene soket, mis toob kaasa bcm_release() käivitamise ja bcm_op ja bcm_sock struktuuride vabastamise, kuigi bcm_rx_handler() töö ei ole veel lõpetatud.
Bcm_sock sisu manipuleerimise kaudu saab ründaja üle kirjutada sk->sk_data_ready(sk) funktsiooni näitaja, suunata täitmise ja kasutada tagasipöördumise suunamise (ROP - Return-Oriented Programming) tehnikat, et muuta modprobe_path parameetrit ja saavutada oma koodi täitmine root õigustes. ROP tehnika kasutamisel ei ürita ründaja oma koodi mällu paigutada, vaid kasutab juba laaditud teekides olemasolevaid masinainstruktsioonide juppe, mis lõpevad juhtimise tagastamise käsuga (tavaliselt on need teekide funktsioonide lõpud). Eksploidimise töö on sarnaste plokkide ('gadgetide') kutseketi loomine, et saavutada vajalik funktsionaalsus.

Rünnakuks on vajalik juurdepääs CAN sokettide loomise ja seadistatud vcan võrgu liidese loomiseks. Rünnakuks vajalikud õigused võivad omandada mitteprivilegeeritud kasutaja konteinerites, mis luuakse süsteemides, kus on sisse lülitatud kasutaja nime ruumide (user namespaces) tugi. Näiteks on Ubuntu ja Fedora vaikimisi aktiveeritud kasutaja nime ruumid, kuid Debianis ja RHEL-is ei ole need aktiivsed.
Allikas: opennet.ru
