Prieš kelias dienas tai pasklido žinia buvo aptiktas pažeidžiamumas (jau įtraukta į CVE-2023-4273) exFAT failų sistemos tvarkyklėje tiekiamas Linux branduolyje.
Problemaa slypi tame, kad valdiklis leidžia montuoti specialiai sukurtą pertvarą, (pavyzdžiui, prijungę kenkėjišką USB atmintinę), paspauskite dėklo perpildymą ir paleiskite kodą su branduolio teisėmis.
Problema yra tokia: kodas daro prielaidą, kad failo pavadinimo įvestis visada sukuria sujungtą failo pavadinimą, kuriame telpa 255 simboliai (riba yra 258 simboliai, apima 1 papildomą simbolį nuliniam baitui ir 2 papildomus simbolius konvertavimui). Daugiau nei 255 failo pavadinimo simbolių saugojimas katalogo įrašų rinkinyje yra failų sistemos formato pažeidimas, tačiau jį priima Linux tvarkyklė, tačiau taip pat atsiranda krūvos perpildymas (nes failo pavadinimas sujungiamas į dėklo priskirtą kintamąjį).
Kalbant apie pažeidžiamumą, minima, kad tai irs išnaudota dėl dydžio patikros gedimo nukopijavus failo pavadinimą į kamino priskirtą buferį, atsiranda branduolio dėklo perpildymas, jei pateikiamas labai ilgas failo pavadinimas, viršijantis failų sistemos ribą – 255 simbolius.
Funkcija exfat_extract_uni_name() nustoja kopijuoti simbolius į paskirties buferį, kai aptinkamas nulinis simbolis (0x0000), ir grąžina nukopijuotų simbolių skaičių. Tačiau skambinantysis nepaiso grąžinamos reikšmės ir perkelia žymeklį 15 simbolių (30 baitų) kitai iteracijai. Todėl per vieną iteraciją galima praleisti (palikti nepažeistą) 14 simbolių arba 28 baitus.
Pažeidžiamumas yra funkcijoje, kuri atlieka ilgo vardo rekonstrukciją cikliškai nuskaito įrašus su failo vardo dalimis iš katalogo indekso ir sujungia gautas vardo dalis į galutinį ilgą pavadinimą.
Dydžio patikrinimas tos funkcijos kode buvo atliktas atsižvelgiant į kiekvieną įrašą su pavadinimo dalimi, bet neapėmė galutinio pavadinimo (pavyzdžiui, pavadinimas gali būti padalintas į 100 dalių ir pasiekti 1500 simbolių, o ne 258 simbolių buferyje ).
Tyrėjas kurie atrado pažeidžiamumą sugebėjo parengti eksploatacijos prototipą kuri leidžia padidinti savo teises sistemoje. Išbandžius „VirtualBox“ virtualioje mašinoje, išnaudojimas veikia 100% laiko, tačiau paleidžiant įprastoje aplinkoje, kurioje veikia aparatinė įranga, tikimybė, kad jis bus suaktyvintas, sumažėja iki maždaug 50%.
Visų pirma, mano išnaudojimas perrašo kamino skirtą žymeklį į nulinę eilutę, todėl tolesnis bandymas pridėti baigiamąjį nulinį simbolį prie šios eilutės iš tikrųjų tampa primityvu „įrašyti nulinį baitą į užpuoliko pasirinktą atminties vietą.
Taip pat minima, kad pažeidžiamumas gali būti panaudotas siekiant pažeisti branduolius, paleidžiamus UEFI saugaus įkrovos režimu, nes minima, kad vaizdas, kuriame yra pažeidžiamas branduolys su atitinkamu inicijavimo scenarijumi (ir, žinoma, išnaudojimu), kuris paleidžiamas prieš tikrą operacinę sistemą, dedamas į įkrovos diską. Paleidus šį vaizdą, įkeliamas kenkėjiškas (ir nepasirašytas) branduolio modulis, kuris nustato branduolio režimo valdymą ir tada persijungia į tikrą operacinę sistemą (pavyzdžiui, naudodamas kexec iškvietimą).
Galiausiai verta paminėti, kad problema buvo išspręsta vis dar palaikomose „Linux“ versijose. Tuo metu, kai buvo atskleistas pažeidžiamumas, naujausia „Linux“ branduolio versija buvo 6.4.10 „Linux“ versija, tačiau naujojoje 6.5 versijoje jau yra pataisymas.
Norintys sekti sprendimą skirtinguose platinimuose, jie gali tai padaryti šiuose puslapiuose: debian, ubuntu, RHEL, SUSA y Fedora.
Kakleliai nori sužinoti daugiau apie tai, išsamią informaciją galite patikrinti sekanti nuoroda.