Võistlusseisund Linuxi kerneli prügikogus, mis võib viia privileegide suurenemiseni

Jann Horn Google Project Zero meeskonnast, kes kunagi tuvastas Spectre ja Meltdowni haavatavused, avaldas meetodi Linuxi tuuma prügikogumishaava (CVE-2021-4083) ärakasutamiseks. Haavatavuse põhjuseks on rassiseisund Unixi pesade failideskriptorite puhastamisel ja see võib potentsiaalselt lubada kohalikul privilegeerimata kasutajal käivitada oma koodi kerneli tasemel.

Probleem on huvitav, sest ajaaken, mille jooksul rassiseisund ilmneb, oli hinnanguliselt liiga väike, et luua tõelisi ärakasutusi, kuid uuringu autor näitas, et isegi sellised algselt skeptilised haavatavused võivad saada tõeliste rünnakute allikaks, kui ärakasutamise looja on vajalikke oskusi ja aega. Yann Horn näitas, kuidas filigraansete manipulatsioonide abil saab funktsioonide close() ja fget() üheaegsel kutsumisel tekkivat rassiseisundit vähendada täielikult ärakasutatavaks pärast-vaba kasutamise haavatavaks ning saavutada juurdepääs juba vabastatud andmetele. kerneli sees olev struktuur.

Võistlustingimus ilmneb failideskriptori sulgemise protsessis, kutsudes samal ajal sulge() ja fget(). Väljakutse close() võib esineda enne fget() täitmist, mis ajab prügikorjaja segadusse, sest vastavalt refcount-ile ei ole failistruktuuril väliseid viiteid, vaid see jääb seotuks failikirjeldusega, s.t. Prügikorjaja arvab, et tal on ainujuurdepääs struktuurile, kuid tegelikult viitab failideskriptorite tabelis allesjäänud kirje lühikese aja jooksul siiski vabastatavale struktuurile.

Võistlusseisundisse sattumise tõenäosuse suurendamiseks kasutati mitmeid nippe, mis võimaldasid süsteemispetsiifiliste optimeerimiste juurutamisel tõsta ekspluateerimise õnnestumise tõenäosust 30%-ni. Näiteks failideskriptoritega struktuurile juurdepääsu aja pikendamiseks mitmesaja nanosekundi võrra tõrjuti andmed protsessori vahemälust välja, täites vahemälu teises CPU tuumas toimuva tegevusega, mis võimaldas struktuuri hankida pigem mälust kui mälust. kiire protsessori vahemälu.

Teiseks oluliseks tunnuseks oli riistvarataimeri genereeritud katkestuste kasutamine võistlustingimuste aja pikendamiseks. Moment valiti nii, et katkestuste töötleja käivitaks võistlustingimuse ilmnemisel ja katkestaks mõneks ajaks koodi täitmise. Juhtimise tagastamise edasiseks viivitamiseks genereeriti epolli abil ootejärjekorda umbes 50 tuhat kirjet, mis nõudis katkestuste töötleja kaudu otsimist.

Haavatavuse ärakasutamise tehnika avalikustati pärast 90-päevast mitteavaldamise perioodi. Probleem ilmneb alates kerneli versioonist 2.6.32 ja see parandati detsembri alguses. Parandus sisaldus kernelis 5.16 ja kanti üle ka distributsioonides tarnitud tuuma ja kernelipakettide LTS-i harudesse. Tähelepanuväärne on, et haavatavus tuvastati sarnase probleemi CVE-2021-0920 analüüsimisel, mis väljendub prügikogujas lipu MSG_PEEK töötlemisel.

Allikas: opennet.ru

Lisa kommentaar