Race betingst yn de Linux kernel garbage collector dat kin liede ta privileezje eskalaasje

Jann Horn fan it Google Project Zero-team, dy't ienris de Spectre- en Meltdown-kwetsberheden identifisearre, publisearre in technyk foar it eksploitearjen fan in kwetsberens (CVE-2021-4083) yn 'e Linux kernel garbage collector. De kwetsberens komt troch in race-betingsten by it opromjen fan bestânbeskriuwers op unix-sockets en lit mooglik in lokale net-befoarrjochte brûker har koade útfiere op it kernelnivo.

It probleem is nijsgjirrich om't it tiidfinster wêryn't de racebetingst foarkomt te lyts waard rûsd te wêzen om echte eksploaten te meitsjen, mar de skriuwer fan 'e stúdzje liet sjen dat sels sokke ynearsten skeptyske kwetsberens de boarne kinne wurde fan echte oanfallen as de eksploitaasjemakker hat de nedige feardichheden en tiid. Yann Horn liet sjen hoe't, mei help fan filigraan manipulaasjes, kinne jo ferminderje it ras betingst dat optreedt as ropt de ticht () en fget () funksjes tagelyk yn in folslein eksploitearje gebrûk-nei-frij kwetsberens en berikke tagong ta in al befrijde gegevens struktuer binnen de kernel.

In race betingst komt foar yn it proses fan it sluten fan in triem descriptor wylst calling tichtby () en fget () tagelyk. De oprop om te sluten () kin foarkomme foardat fget () wurdt útfierd, dat sil betiizje de garbage samler omdat, neffens de refcount, de triem struktuer sil hawwe gjin eksterne ferwizings, mar bliuwt ferbûn oan de triem descriptor, d.w.s. De garbage collector sil tinke dat it hat eksklusive tagong ta de struktuer, mar yn feite, foar in koarte perioade fan tiid, de oerbleaune yngong yn de triem beskriuwing tabel sil noch wize op de struktuer wurdt befrijd.

Om de kâns te fergrutsjen om yn in racebetingst te kommen, waarden ferskate trúkjes brûkt, dy't it mooglik makken om de kâns op sukses fan eksploitaasje te fergrutsjen nei 30% by it ynfieren fan systeemspesifike optimisaasjes. Bygelyks, om de tiid fan tagong ta in struktuer mei triembeskriuwers mei ferskate hûnderten nanosekonden te fergrutsjen, waarden gegevens út 'e prosessor-cache ferdreaun troch de cache mei aktiviteit op in oare CPU-kearn te litten, wat it mooglik makke om de struktuer út it ûnthâld te heljen ynstee fan út it ûnthâld. de flugge CPU cache.

De twadde wichtige eigenskip wie it brûken fan ûnderbrekkings oanmakke troch in hardware timer te fergrutsjen de race condition tiid. It momint waard selektearre sadat de interrupt handler soe fjoer doe't in race betingst barde en ûnderbrekke de útfiering fan de koade foar in skoft. Om it weromkommen fan kontrôle fierder te fertrage, waarden sa'n 50 tûzen yngongen yn 'e wachtrige generearre mei epoll, wêrtroch't sykjen troch de ûnderbrekkingshanneler nedich wie.

De technyk foar it eksploitearjen fan 'e kwetsberens waard iepenbiere nei in perioade fan 90 dagen net iepenbiering. It probleem ferskynt sûnt kernel 2.6.32 en waard begjin desimber repareare. De fix waard opnommen yn kernel 5.16 en waard ek oerbrocht nei LTS-tûken fan 'e kernel en kernelpakketten levere yn distribúsjes. It is opmerklik dat de kwetsberens waard identifisearre tidens de analyze fan in ferlykber probleem CVE-2021-0920, dy't him manifestearret yn 'e garbage collector by it ferwurkjen fan' e MSG_PEEK flagge.

Boarne: opennet.ru

Add a comment