Vetkura kondiĉo en la Linukso-kerna rubkolektilo, kiu povas konduki al privilegia eskalado

Jann Horn de la Google Project Zero-teamo, kiu iam identigis la vundeblecojn Spectre kaj Meltdown, publikigis teknikon por ekspluati vundeblecon (CVE-2021-4083) en la Linukso-kerna rubkolektilo. La vundebleco ŝuldiĝas al raskondiĉo dum purigado de dosierpriskribiloj sur Uniksaj ingoj kaj eble permesas al loka senprivilegia uzanto ekzekuti sian kodon ĉe la kernnivelo.

La problemo estas interesa ĉar la tempofenestro, dum kiu okazas la raskondiĉo, estis taksita tro malgranda por krei realajn atingojn, sed la aŭtoro de la studo montris, ke eĉ tiaj komence skeptikaj vundeblecoj povas iĝi la fonto de realaj atakoj se la ekspluatkreinto havas. la necesajn kapablojn kaj tempon. Yann Horn montris kiel, helpe de filigranaj manipuladoj, vi povas redukti la raskondiĉon, kiu okazas dum vokado de la funkcioj close() kaj fget() samtempe en plene ekspluatebla uzpost-libera vundebleco kaj atingi aliron al jam liberigita datumoj. strukturo ene de la kerno.

Vetkura kondiĉo okazas dum la procezo de fermo de dosierpriskribilo dum vokado de close() kaj fget() samtempe. La alvoko fermi() povas okazi antaŭ ol fget() estas ekzekutita, kio konfuzos la rubkolektilon ĉar, laŭ la refkalkulo, la dosierstrukturo ne havos eksterajn referencojn, sed restos ligita al la dosierpriskribilo, t.e. La rubkolektisto pensos, ke ĝi havas ekskluzivan aliron al la strukturo, sed fakte, dum mallonga tempo, la restanta enskribo en la dosierpriskribila tabelo ankoraŭ montros al la strukturo liberigita.

Por pliigi la probablon eniri en raskondiĉon, oni uzis plurajn lertaĵojn, kiuj ebligis pliigi la probablon de ekspluata sukceso al 30% kiam oni enkondukas sistemojn-specifajn optimumojn. Ekzemple, por pliigi la tempon de aliro al strukturo kun dosierpriskribiloj je plurcent nanosekundoj, datenoj estis forigitaj de la procesorkaŝmemoro sternigante la kaŝmemoron kun agado sur alia CPU-kerno, kio ebligis preni la strukturon de memoro prefere ol de. la rapida CPU-kaŝmemoro.

La dua grava trajto estis la uzo de interrompoj generitaj per hardvartempigilo por pliigi la raskondiĉtempon. La momento estis elektita tiel ke la interrompa prizorganto ekpafu kiam okazus raskondiĉo kaj interrompus la ekzekuton de la kodo dum iom da tempo. Por plue prokrasti la revenon de kontrolo, ĉirkaŭ 50 mil eniroj en la atendovico estis generitaj uzante epoll, kio postulis serĉadon tra la interrompa prizorganto.

La tekniko por ekspluati la vundeblecon estis malkaŝita post 90-taga nediskoniga periodo. La problemo aperas ekde la kerno 2.6.32 kaj estis riparita komence de decembro. La riparo estis inkluzivita en kerno 5.16 kaj ankaŭ estis transdonita al LTS-filioj de la kerno kaj kernpakaĵoj liveritaj en distribuoj. Estas rimarkinde, ke la vundebleco estis identigita dum la analizo de simila problemo CVE-2021-0920, kiu manifestiĝas en la rubkolektanto dum prilaborado de la flago MSG_PEEK.

fonto: opennet.ru

Aldoni komenton