O vulnerabilitate a fost identificată în kernelul Linux (CVE-2022-42896), care poate fi utilizată potențial pentru a organiza execuția de cod de la distanță la nivel de kernel prin trimiterea unui pachet L2CAP special format prin Bluetooth. În plus, a fost descoperită o altă problemă similară (CVE-2022-42895) în gestionatorul L2CAP, care poate duce la scurgeri de conținut din memoria kernelului în pachetele de informații de configurare. Prima vulnerabilitate s-a manifestat din august 2014 (kernel 3.16), iar a doua din octombrie 2011 (kernel 3.0). Vulnerabilitățile au fost remediate în versiunile kernelului Linux 6.1.0, 6.0.8, 4.9.333, 4.14.299, 4.19.265, 5.4.224, 5.10.154 și 5.15.78. Se poate urmări implementarea remedierilor în distribuții pe următoarele pagini: Debian, Ubuntu, Gentoo, RHEL, SUSE, Fedora, Arch.
Pentru a demonstra posibilitatea unei atacuri de la distanță, au fost publicate prototipuri de exploatatoare care funcționează în Ubuntu 22.04. Pentru a efectua atacul, agresorul trebuie să se afle în raza de acțiune Bluetooth — nu este necesară asocierea prealabilă, dar Bluetooth-ul trebuie să fie activat pe computer. Este suficient să cunoști adresa MAC a dispozitivului victimei, care poate fi determinată prin sniffing sau, în cazul anumitor dispozitive, calculată pe baza adresei MAC Wi-Fi.
Prima vulnerabilitate (CVE-2022-42896) este cauzată de accesarea unei zone de memorie deja eliberate (use-after-free) în implementarea funcțiilor l2cap_connect și l2cap_le_connect_req — după crearea canalului prin apelul de callback new_connection, nu se strecura niciun blocaj pentru acesta, dar se seta un temporizator (__set_chan_timer), care, la expirarea timeout-ului, apelează funcția l2cap_chan_timeout și șterge canalul fără a verifica finalizarea operațiunii cu canalul în funcțiile l2cap_le_connect*.
În mod implicit, timeout-ul este de 40 de secunde și s-a presupus că o stare de competiție nu poate apărea într-un asemenea interval, dar s-a dovedit că din cauza unei alte erori în gestionatorul SMP se poate obține un apel instantaneu al temporizatorului și, astfel, atingerea unei stări de competiție. Problema din l2cap_le_connect_req poate duce la scurgeri de memorie a kernelului, iar în l2cap_connect la suprascrierea conținutului memoriei și executarea propriului cod. Prima variantă de atac poate fi efectuată folosind Bluetooth LE 4.0 (din 2009), iar a doua folosind Bluetooth BR/EDR 5.2 (din 2020).
A doua vulnerabilitate (CVE-2022-42895) este cauzată de scurgerea datelor reziduale din memorie în funcția l2cap_parse_conf_req, ceea ce poate fi folosit pentru obținerea de informații despre indicii structurilor nucleului prin trimiterea de cereri de configurare special concepute. În funcția l2cap_parse_conf_req s-a folosit structura l2cap_conf_efs, care nu a fost inițializată corespunzător și, prin manipularea flag-ului FLAG_EFS_ENABLE, s-a putut obține includerea în pachet a datelor vechi din stivă. Problema se manifestă doar pe sistemele în care nucleul este compilat cu opțiunea CONFIG_BT_HS (dezactivată în mod implicit, dar activată în anumite distribuții, de exemplu, în Ubuntu). Pentru un atac de succes este necesară, de asemenea, setarea parametrului HCI_HS_ENABLED prin interfața de gestionare la valoarea true (care în mod implicit nu este folosită).
Sursa: opennet.ro
