Dobësi në kernelin Linux që prek protokollin e rrjetit CAN BCM

Në kernelin Linux është zbuluar një dobësi (CVE-2021-3609) që i lejon një përdoruesi lokal të rrisë privilegjet e tij në sistem. Problemi shkaktohet nga një race condition në implementimin e protokollit CAN BCM dhe shfaqet në versionet e kernelit Linux nga 2.6.25 deri te 5.13-rc6. Në distribucionet, problemi ende mbetet i pazgjidhur (RHEL, Fedora, Debian, Ubuntu, SUSE, Arch).

Studiuesi që zbuloi dobësinë arriti të përgatisë një exploit për marrjen e të drejtave root në sisteme me kernel Linux 5.4 e më të reja; mes të tjerash, u demonstrua mundësia e një sulmi të suksesshëm në Ubuntu 20.04.02 LTS. Nuk përjashtohet mundësia e përshtatjes së exploit-it edhe për kernelë më të vjetër (në kernelin 5.4 kodi CAN BCM (net/can/bcm.c) u kalua nga hrtimer_tasklet në HRTIMER_MODE_SOFT).

Protokolli CAN BCM lejon regjistrimin e një përpunuesi të personalizuar për mesazhet që vijnë përmes bus-it CAN (controller area network) dhe lidhjen e tij me një socket të caktuar të rrjetit. Kur mbërrin një mesazh hyrës, thirret funksioni bcm_rx_handler(). Sulmuesi mund të shfrytëzojë race condition dhe të arrijë mbylljen e socket-it të rrjetit njëkohësisht me ekzekutimin e bcm_rx_handler(). Gjatë mbylljes së socket-it thirret funksioni bcm_release(), në të cilin lirohet memoria e caktuar për strukturat bcm_op dhe bcm_sock, të cilat vazhdojnë të përdoren nga përpunuesi bcm_rx_handler() që ende po ekzekutohet. Kjo krijon një situatë që çon në akses te një bllok memorieje i liruar tashmë (use-after-free).

Sulmi reduktohet në hapjen e dy socket-eve CAN BCM dhe lidhjen e tyre me ndërfaqen vcan. Në socket-in e parë kryhet thirrja sendmsg() me flamurin RX_SETUP për konfigurimin e përpunuesit të mesazheve hyrëse CAN, ndërsa në socket-in e dytë kryhet thirrja sendmsg() për dërgimin e një mesazhi te socket-i i parë. Pasi mesazhi mbërrin, aktivizohet thirrja bcm_rx_handler(), dhe sulmuesi zgjedh momentin e duhur për të mbyllur socket-in e parë, gjë që sjell nisjen e bcm_release() dhe lirimin e strukturave bcm_op dhe bcm_sock, edhe pse ekzekutimi i bcm_rx_handler() ende nuk ka përfunduar.

PĂ«rmes manipulimeve me pĂ«rmbajtjen e bcm_sock, njĂ« sulmues mund tĂ« mbishkruajĂ« treguesin e funksionit sk->sk_data_ready(sk), tĂ« ridrejtojĂ« ekzekutimin dhe, me ndihmĂ«n e teknikave tĂ« programimit tĂ« orientuar te kthimi (ROP — Return-Oriented Programming), tĂ« organizojĂ« mbishkrimin e parametrit modprobe_path dhe tĂ« arrijĂ« ekzekutimin e kodit tĂ« vet me tĂ« drejta root. GjatĂ« pĂ«rdorimit tĂ« teknikĂ«s ROP, sulmuesi nuk pĂ«rpiqet tĂ« vendosĂ« kodin e vet nĂ« memorie, por pĂ«rdor fragmente ekzistuese tĂ« instruksioneve tĂ« makinĂ«s nĂ« bibliotekat e ngarkuara, qĂ« pĂ«rfundojnĂ« me instruksionin e kthimit tĂ« kontrollit (zakonisht kĂ«to janĂ« fundet e funksioneve tĂ« bibliotekave). Funksionimi i exploit-it reduktohet nĂ« ndĂ«rtimin e njĂ« zinxhiri thirrjesh tĂ« blloqeve tĂ« tilla (“gadgets”) pĂ«r tĂ« marrĂ« funksionalitetin e dĂ«shiruar.

Dobësi në kernelin Linux që prek protokollin e rrjetit CAN BCM

Për sulmin kërkohet qasje për krijimin e soketëve CAN dhe një ndërfaqe rrjeti vcan e konfiguruar. Të drejtat e nevojshme për kryerjen e sulmit mund të merren nga një përdorues i paprivilegjuar në kontejnerët e krijuar në sisteme me mbështetje të aktivizuar për user namespaces. Për shembull, user namespaces është i aktivizuar si parazgjedhje në Ubuntu dhe Fedora, por nuk është aktiv në Debian dhe RHEL.

Burimi: opennet.ru

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster