Stanje utrke u sakupljaču smeća Linux kernela koje može dovesti do eskalacije privilegija

Jann Horn iz Google Project Zero tima, koji je jednom identifikovao ranjivosti Spectre i Meltdown, objavio je tehniku ​​za iskorištavanje ranjivosti (CVE-2021-4083) u sakupljaču smeća Linux kernela. Ranjivost je uzrokovana stanjem utrke prilikom čišćenja deskriptora datoteka na unix utičnicama i potencijalno omogućava lokalnom neprivilegiranom korisniku da izvrši svoj kod na razini kernela.

Problem je interesantan jer je vremenski okvir tokom kojeg nastaje stanje trke procijenjen kao premali da bi stvorio stvarne eksploatacije, ali je autor studije pokazao da čak i takve prvobitno skeptične ranjivosti mogu postati izvor stvarnih napada ako kreator eksploatacije ima potrebne vještine i vrijeme. Yann Horn je pokazao kako, uz pomoć filigranskih manipulacija, možete svesti uvjet utrke koji se javlja kada se istovremeno pozivaju funkcije close() i fget() u potpuno iskoristivu ranjivost bez upotrebe i ostvariti pristup već oslobođenim podacima strukturu unutar kernela.

Uslov trke se javlja tokom procesa zatvaranja deskriptora datoteke dok se istovremeno pozivaju close() i fget(). Poziv close() može se dogoditi prije izvršavanja fget(), što će zbuniti sakupljača smeća jer, prema refcountu, struktura datoteke neće imati eksterne reference, već će ostati pridružena deskriptoru datoteke, tj. Sakupljač smeća će misliti da ima isključivi pristup strukturi, ali u stvari, u kratkom vremenskom periodu, preostali unos u tabeli deskriptora fajla će i dalje ukazivati ​​na strukturu koja se oslobađa.

Da bi se povećala vjerovatnoća ulaska u stanje trke, korišteno je nekoliko trikova koji su omogućili povećanje vjerovatnoće uspjeha eksploatacije na 30% pri uvođenju optimizacija specifičnih za sistem. Na primjer, da bi se povećalo vrijeme pristupa strukturi s deskriptorima datoteke za nekoliko stotina nanosekundi, podaci su izbačeni iz keša procesora tako što su keš memoriju zatrpali aktivnostima na drugom CPU jezgru, što je omogućilo da se struktura preuzme iz memorije, a ne iz brza CPU keš memorija.

Druga važna karakteristika bila je upotreba prekida koje generiše hardverski tajmer kako bi se povećalo vrijeme uvjeta utrke. Trenutak je odabran tako da se rukovalac prekida aktivira kada dođe do stanja trke i prekine izvršavanje koda na neko vrijeme. Kako bi se dodatno odgodilo vraćanje kontrole, oko 50 hiljada unosa u čekanju je generirano pomoću epoll-a, što je zahtijevalo pretragu kroz rukovalac prekida.

Tehnika za iskorištavanje ranjivosti otkrivena je nakon 90-dnevnog perioda neotkrivanja. Problem se pojavljuje od kernela 2.6.32 i otklonjen je početkom decembra. Popravka je uključena u kernel 5.16 i takođe je prebačena na LTS grane kernela i pakete kernela koji se isporučuju u distribucijama. Važno je napomenuti da je ranjivost identifikovana tokom analize sličnog problema CVE-2021-0920, koji se manifestuje u sakupljaču smeća prilikom obrade oznake MSG_PEEK.

izvor: opennet.ru

Dodajte komentar