U Netfilteru, podsustavu jezgre Linuxa koja se koristi za filtriranje i modificiranje mrežnih paketa, otkrivena je ranjivost (CVE-2024-1086) koja omogućava lokalnom korisniku izvršavanje koda na razini jezgre i povećanje svojih privilegija u sustavu. Problem je uzrokovan dvostrukim oslobađanjem memorije (double-free) u modulu nf_tables, koji omogućava rad paketnog filtra nftables. Istraživač sigurnosti koji je otkrio ranjivost razvio je i objavio radni prototip eksploita.
Rad eksploita demonstriran je u aktualnim izdanjima Debiana i Ubuntua s jezgrama Linux 5.14 – 6.6, kao i u okruženju s KernelCTF (Capture the Flag) kernelom, koje uključuje dodatne zakrpe za blokiranje tipičnih metoda rada eksploita i koristi se od strane Googlea u programu nagrađivanja za otkrivanje ranjivosti. Stupanj uspješnosti rada eksploita procjenjuje se na 99.4%. U pratećem članku detaljno je razrađen proces stvaranja složenog višeslojnog eksploita i zaobilaženje postojećih mehanizama zaštite i protivmjera u jezgru.

Problem je povezan s pogreškom u funkciji nft_verdict_init(), koja dopušta korištenje pozitivnih vrijednosti kao koda greške za odbacivanje paketa (DROP) u hook-ovima, što se može iskoristiti za pozivanje ponovnog oslobađanja memorije u funkciji nf_hook_slow() za buffere za koje je već pozvana funkcija free(). Problem nastaje kada je operacija NF_DROP formirana s greškom, i jezgra u početku interpretira NF_DROP, ali zatim oslobađa buffer i vraća status NF_ACCEPT. Ova situacija dovodi do toga da se, unatoč oslobađanju povezanog s paketom buffera, njegova obrada ne prekida, već se prenosi drugom obrtniku, koji potom drugi put poziva funkciju oslobađanja memorije.
Ranjivost se manifestira počevši od verzije jezgre Linux 3.15, ali exploit radi s jezgrama počevši od verzije 5.14. Ispravak ranjivosti predložen je u izdanju jezgre Linux 6.8-rc1 i krajem veljače prenesen je u stabilne grane 5.15.149, 6.1.76 i 6.6.15. U distribucijama se ispravak ranjivosti može pratiti na stranicama: Debian, Ubuntu, Gentoo, RHEL, SUSE, Fedora, Arch.
Dodatno se može istaknuti niz ranjivosti u modulu ksmbd, koji nudi ugrađenu u jezgru Linux implementaciju datotečnog poslužitelja na temelju SMB protokola: Ran vulnerability CVE-2024-26592 omogućava udaljeno izvršenje koda s pravima jezgre na sustavima s aktiviranim ksmbd modulom bez prolaska autentifikacije. Problem je uzrokovan utrkom stanja u kodu za obradu TCP veze, koja nastaje zbog nedostatka pravilnog postavljanja blokada prilikom rada s objektom.
Ran vulnerability CVE-2023-52440 također omogućava udaljeno izvršenje koda s pravima jezgre, ali je uzrokovana prelivanjem bafera prilikom obrade neispravnih sesijskih ključeva zbog nedostatka pravilne provjere veličine podataka primljenih od korisnika prije nego što se kopiraju u bafer fiksne veličine.
Ran vulnerabilities (1, 2, 3) CVE-2024-26594, CVE-2023-52442 i CVE-2023-52441 u ksmbd omogućuju udaljeno određivanje sadržaja memorije jezgre bez prolaska autentifikacije. Ran vulnerability CVE-2024-26594 uzrokovana je nepravilnom provjerom podataka prilikom obrade primljenih SMB2 Mech tokena, što dovodi do povratka podataka izvan granica bafera. Ran vulnerability CVE-2023-52442 uzrokovana je nedostatkom pravilne provjere ulaznih podataka tijekom obrade povezanih upita. Ran vulnerability CVE-2023-52441 uzrokovana je nedostatkom potrebne provjere ulaznih podataka prilikom obrade zahtjeva za usklađivanje SMB2 veze.
Ran vulnerabilities CVE-2024-26594 i CVE-2024-26592 ispravljene su u jezgru 6.8 i korektivnim ažuriranjima prošlih stabilnih grana 6.1.75, 6.6.14, 6.7.2. Ostale ran vulnerabilities ispravljene su u jezgru 6.5 i ažuriranjima 5.15.145, 6.1.53, 6.4.16.
Na kraju se može spomenuti aktivacija nove tima programera jezgre Linuxa, osnovanog za analizu prisutnosti ranjivosti i procjenu veze između ispravki unesenih u jezgru i problema s sigurnošću. U veljači su programeri jezgre stvorili vlastitu službu CNA (CVE Numbering Authority), koja je dobila ovlasti za samostalno dodjeljivanje CVE identifikatora ranjivostima. Prije toga, dodjeljivanje CVE-a i analiza veze ispravki s mogućim ranjivostima bila je odgovornost programera distribucija, a u jezgru potencijalne ranjivosti nisu bile istaknute i prikazivale su se zajedno s običnim ispravcima. Rezultati rada nove službe premašili su sva očekivanja — svakodnevno se u jezgru označava do nekoliko desetaka novih ranjivosti koje ranije nisu bile označene kao sigurnosni problemi. Na primjer, 26. ožujka novi CVE identifikatori dodijeljeni su 14 ranjivostima koje ranije nisu razmatrane kao sigurnosni problemi, a 25. ožujka — 41 ranjivost.
Izvor: opennet.ru
