Një dobësi në kernelin Linux, e cila ndikon në protokollin rrjetor CAN BCM

Në kernelin Linux është identifikuar një vulnerabilitet (CVE-2021-3609) që lejon një përdorues lokal të ngrisë privilegjet e tij në sistem. Problemi është shkaktuar nga një gjendje garuese në implementimin e protokollit CAN BCM dhe shfaqet në versionet e kernelit Linux nga 2.6.25 deri në 5.13-rc6. Në distribucione, problemi ende mbetet i papërmirësuar (RHEL, Fedora, Debian, Ubuntu, SUSE, Arch).

Hulumtuesi që identifikoi vulnerabilitetin arriti të përgatisë një exploit për të marrë të drejtat e root në sistemet me kernela Linux 5.4 dhe më të reja, duke përfshirë demonstrimin e mundësisë për të realizuar me sukses një sulm në Ubuntu 20.04.02 LTS. Nuk përjashtohet mundësia e ripërpunimit të exploit-it për të punuar me kernela më të vjetra (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ë trajtuesi të mesazheve që vijnë përmes autobusit CAN (controller area network) dhe lidhjen e tij me një socket të caktuar rrjeti. Kur mbërrin një mesazh në hyrje, thirret funksioni bcm_rx_handler(). Sulmuesi mund të shfrytëzojë gjendjen garuese dhe të arrijë mbylljen e socket-it të rrjetit në të njëjtën kohë me ekzekutimin e bcm_rx_handler(). Kur mbyllet socket-i, thirret funksioni bcm_release(), ku çlirohet memoria e alokuar për strukturat bcm_op dhe bcm_sock, të cilat vazhdojnë të përdoren në trajtuesin bcm_rx_handler(). Kjo krijon një situatë që çon në referimin në një bllok memorjeje të çliruar tashmë (use-after-free).

Sulmi përfshin 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 të konfiguruar trajtuesin e mesazheve CAN, dhe në socket-in e dytë kryhet thirrja sendmsg() për të dërguar mesazhin në socket-in e parë. Pas mbërritjes së mesazhit, aktivizohet thirrja bcm_rx_handler(), dhe sulmuesi zgjidh momentin e duhur për të mbyllur socket-in e parë, çka çon në aktivizimin e bcm_release() dhe çlirimin e strukturave bcm_op dhe bcm_sock, ndonëse puna e bcm_rx_handler() ende nuk ka përfunduar.

NĂ«pĂ«rmjet manipulimeve me pĂ«rmbajtjen e bcm_sock, sulmuesi mund tĂ« rinovojĂ« treguesin nĂ« funksionin sk->sk_data_ready(sk), tĂ« redirigjojĂ« ekzekutimin dhe duke pĂ«rdorur teknikĂ«n e programimit tĂ« orientuar nĂ« kthim (ROP — Return-Oriented Programming) tĂ« organizojĂ« rishkrimin e parametrave modprobe_path dhe tĂ« arrijĂ« ekzekutimin e kodit tĂ« tij me tĂ« drejta root. Me pĂ«rdorimin e teknikĂ«s ROP, sulmuesi nuk pĂ«rpiqet tĂ« vendosĂ« kodin e tij nĂ« memorje, por operon me blloqet e instrukcioneve tĂ« makinĂ«s qĂ« tashmĂ« janĂ« nĂ« bibliotekat e ngarkuara, tĂ« cilat pĂ«rfundojnĂ« me instruksionin e kthimit tĂ« kontrollit (zakonisht kĂ«to janĂ« pĂ«rfundimet e funksioneve tĂ« bibliotekĂ«s). Funksioni i exploit-it konsiston nĂ« ndĂ«rtimin e njĂ« zinxhiri thirrjesh tĂ« tillĂ« blloqesh ("gadget"), pĂ«r tĂ« arritur funksionalitetin e dĂ«shiruar.

Një dobësi në kernelin Linux, e cila ndikon në protokollin rrjetor CAN BCM

Për sulmin kërkohet të ketë akses për të krijuar socket-e CAN dhe një ndërfaqe rrjeti të konfiguruar vcan. Të drejtat e nevojshme për të realizuar sulmin mund të fitojnë një përdorues pa privilegje në konteinerët e krijuar në sistemet me mbështetje të aktivizuar për hapësirat e emrave të identifikuesve të përdoruesve (user namespaces). Për shembull, user namespaces është aktivizuar nga default në Ubuntu dhe Fedora, por nuk është aktivizuar në Debian dhe RHEL.

Burimi: opennet.ru

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