Ranljivost u Linux jezgru koja utječe na mrežni protokol CAN BCM

U Linux kernelu otkrivena je ranjivost (CVE-2021-3609) koja omogućava lokalnom korisniku da podigne svoje privilegije u sistemu. Problem je uzrokovan stanjem utrke u implementaciji CAN BCM protokola i manifestuje se u verzijama Linux kernela od 2.6.25 do 5.13-rc6. U distribucijama problem trenutno ostaje neispravljen (RHEL, Fedora, Debian, Ubuntu, SUSE, Arch).

Istraživač koji je otkrio ranjivost uspio je pripremiti exploit za sticanje root prava na sistemima s Linux kernelima 5.4 i novijim, uključujući demonstraciju mogućnosti uspješnog izvođenja napada na Ubuntu 20.04.02 LTS. Nije isključena mogućnost dorade exploita i za rad s starijim kernelima (u kernelu 5.4 kod CAN BCM (net/can/bcm.c) je prebačen s hrtimer_tasklet na HRTIMER_MODE_SOFT).

CAN BCM protokol omogućava registraciju vlastitog obrtnika poruka koji dolaze preko CAN (controller area network) sabirnice i povezivanje istog na određeni mrežni soket. Kada stigne dolazna poruka, poziva se funkcija bcm_rx_handler(). Napadač može iskoristiti stanje utrke i postići zatvaranje mrežnog soketa istovremeno s izvršavanjem bcm_rx_handler(). Kada se soket zatvori, pokreće se funkcija bcm_release(), u kojoj se oslobađa memorija dodijeljena za strukture bcm_op i bcm_sock, koje se i dalje koriste u još uvijek izvršavanom obrtniku bcm_rx_handler(). Dolazi do situacije koja dovodi do pristupa već oslobođenoj memoriji (use-after-free).

Napad se svodi na otvaranje dva CAN BCM soketa i njihovo povezivanje na vcan interfejs. U prvom soketu izvršava se poziv sendmsg() s RX_SETUP zastavicom za podešavanje obrtnika dolaznih CAN poruka, dok se u drugom soketu izvršava poziv sendmsg() za slanje poruke u prvi soket. Nakon što poruka stigne, aktivira se poziv bcm_rx_handler(), a napadač odabire pravi trenutak i zatvara prvi soket, što dovodi do pokretanja bcm_release() i oslobađanja struktura bcm_op i bcm_sock, iako rad bcm_rx_handler() još nije završen.

Kroz manipulaciju s sadržajem bcm_sock napadač može redefinirati pokazivač na funkciju sk->sk_data_ready(sk), preusmjeriti izvršenje i pomoću tehnika povratno orijentiranog programiranja (ROP - Return-Oriented Programming) organizirati prepisivanje parametra modprobe_path i ostvariti izvršenje svog koda s root pravima. Pri korištenju ROP tehnike, napadač ne pokušava umetnuti svoj kod u memoriju, već koristi već postojeće dijelove strojnih instrukcija u učitanim bibliotekama, koji završavaju instrukcijom povratka kontrole (obično, to su završetci funkcija iz biblioteka). Rad eksploita svodi se na izgradnju lanca poziva sličnih blokova ('gadgets') za dobivanje željene funkcionalnosti.

Ranljivost u Linux jezgru koja utječe na mrežni protokol CAN BCM

Za napad je potreban pristup za stvaranje CAN soketa i konfiguriran mrežni sučelje vcan. Potrebne ovlasti za izvođenje napada mogu biti stečene od strane neprivilegiranog korisnika unutar kontejnera koji se stvaraju u sustavima s uključenom podrškom za prostore imenskih identifikatora korisnika (user namespaces). Na primjer, user namespaces je prema zadanim postavkama uključen u Ubuntu i Fedora, ali nije aktiviran u Debianu i RHEL-u.

Izvor: opennet.ru

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster