U jezgri Linux Identificirana je ranjivost (CVE-2021-3609) koja lokalnom korisniku omogućuje eskalaciju svojih privilegija u sustavu. Problem je uzrokovan uvjetom utrke u implementaciji CAN BCM protokola i prisutan je u izdanjima kernela. Linux od verzije 2.6.25 do 5.13-rc6. Problem ostaje neriješen u distribucijama (RHEL, Fedora, Debian, Ubuntu, SUSE, Arch).
Istraživač koji je otkrio ranjivost uspio je pripremiti iskorištavanje za dobivanje root privilegija na sustavima s jezgrama. Linux 5.4 i novije, uključujući mogućnost uspješnog izvođenja napada u Ubuntu 20. travnja 2002. LTS. Moguće je da se exploit može preraditi kako bi radio sa starijim jezgrama (u jezgri 5.4, CAN BCM kod (net/can/bcm.c) je premješten iz hrtimer_tasklet u HRTIMER_MODE_SOFT).
Protokol CAN BCM omogućuje vam da registrirate vlastiti rukovatelj porukama koji stiže preko CAN sabirnice (mreža područja kontrolera) i priključite ga na određenu mrežnu utičnicu. Kada stigne dolazna poruka, poziva se funkcija bcm_rx_handler(). Napadač može iskoristiti stanje utrke i uzrokovati zatvaranje mrežne utičnice u isto vrijeme kada se izvršava bcm_rx_handler(). Kada se utičnica zatvori, poziva se funkcija bcm_release(), koja oslobađa memoriju dodijeljenu za strukture bcm_op i bcm_sock, koje se nastavljaju koristiti u rukovatelju bcm_rx_handler() koji se još uvijek izvršava. Dolazi do situacije koja dovodi do pristupa već oslobođenom memorijskom bloku (use-after-free).
Napad se svodi na otvaranje dvije CAN BCM utičnice i njihovo povezivanje s vcan sučeljem. Prva utičnica poziva sendmsg() s oznakom RX_SETUP za postavljanje rukovatelja za dolazne CAN poruke, a druga utičnica poziva sendmsg() za slanje poruke prvoj utičnici. Nakon što poruka stigne, pokreće se poziv bcm_rx_handler(), a napadač odabire pravi trenutak i zatvara prvi socket, što dovodi do pokretanja bcm_release() i oslobađanja bcm_op i bcm_sock struktura, iako rad bcm_rx_handlera () još nije dovršen.
Manipulirajući sadržajem bcm_sock, napadač može redefinirati pokazivač na funkciju sk->sk_data_ready(sk), preusmjeriti izvršenje i, korištenjem tehnika povratno-orijentiranog programiranja (ROP), organizirati prepisivanje parametra modprobe_path i osigurati da njihov kod izvršava se s root pravima. Kada koristi ROP tehniku, napadač ne pokušava svoj kod smjestiti u memoriju, već operira komadima strojnih instrukcija koje su već dostupne u učitanim bibliotekama, završavajući instrukcijom povratka kontrole (u pravilu su to krajevi funkcija knjižnice) . Rad exploit-a svodi se na izgradnju lanca poziva sličnih blokova ("gadgeta") kako bi se dobila željena funkcionalnost.

Napad zahtijeva pristup za stvaranje CAN utičnica i konfigurirano vcan mrežno sučelje. Potrebne privilegije za napad može dobiti neprivilegirani korisnik u kontejnerima stvorenim na sustavima s omogućenim korisničkim imenskim prostorima. Na primjer, korisnički imenski prostori su omogućeni prema zadanim postavkama u Ubuntu i Fedora, ali nije aktiviran u Debian i RHEL.
Izvor: opennet.ru
