Rastoestand in die Linux-kernvullisverwyderaar wat kan lei tot voorregte-eskalasie

Jann Horn van die Google Project Zero-span, wat een keer die Spectre- en Meltdown-kwesbaarhede geïdentifiseer het, het 'n tegniek gepubliseer om 'n kwesbaarheid (CVE-2021-4083) in die Linux-kernvullisverwyderaar te ontgin. Die kwesbaarheid is te wyte aan 'n rastoestand wanneer lêerbeskrywers op Unix-vokkies skoongemaak word en laat moontlik 'n plaaslike onbevoorregte gebruiker toe om hul kode op kernvlak uit te voer.

Die probleem is interessant omdat die tydsperiode waartydens die rastoestand voorkom te klein geskat is om werklike uitbuitings te skep, maar die skrywer van die studie het getoon dat selfs sulke aanvanklik skeptiese kwesbaarhede die bron van werklike aanvalle kan word as die uitbuitingskepper die nodige vaardighede en tyd. Yann Horn het gewys hoe jy, met behulp van filigraan-manipulasies, die rastoestand wat voorkom wanneer die close()- en fget()-funksies gelyktydig opgeroep word tot 'n volledig ontginbare gebruik-na-vrye kwesbaarheid kan verminder en toegang tot 'n reeds vrygestelde data kan verkry. struktuur binne die kern.

'n Rastoestand vind plaas tydens die proses om 'n lêerbeskrywer toe te maak terwyl close() en fget() terselfdertyd geroep word. Die oproep om te sluit() kan plaasvind voordat fget() uitgevoer word, wat die vullisverwyderaar sal verwar omdat, volgens die hertelling, die lêerstruktuur nie eksterne verwysings sal hê nie, maar aan die lêerbeskrywer geheg sal bly, m.a.w. Die vullisverwyderaar sal dink dat dit eksklusiewe toegang tot die struktuur het, maar in werklikheid, vir 'n kort tydperk, sal die oorblywende inskrywing in die lêerbeskrywingstabel steeds wys dat die struktuur vrygestel word.

Om die waarskynlikheid te verhoog om in 'n rastoestand te kom, is verskeie truuks gebruik, wat dit moontlik gemaak het om die waarskynlikheid van uitbuitingsukses tot 30% te verhoog wanneer stelselspesifieke optimaliserings ingestel word. Byvoorbeeld, om die tyd van toegang tot 'n struktuur met lêerbeskrywers met 'n paar honderd nanosekondes te verleng, is data uit die verwerkerkas verwyder deur die kas met aktiwiteit op 'n ander SVE-kern te besaai, wat dit moontlik gemaak het om die struktuur uit die geheue te herwin eerder as van die vinnige CPU-kas.

Die tweede belangrike kenmerk was die gebruik van onderbrekings wat deur 'n hardeware-tydhouer gegenereer word om die wedlooptoestandtyd te verhoog. Die oomblik is so gekies dat die onderbrekingshanteerder sou skiet wanneer 'n wedrentoestand voorkom en die uitvoering van die kode vir 'n geruime tyd sou onderbreek. Om die terugkeer van beheer verder te vertraag, is ongeveer 50 duisend inskrywings in die wagtou gegenereer deur gebruik te maak van epoll, wat vereis het om deur die onderbreking hanteerder te soek.

Die tegniek vir die ontginning van die kwesbaarheid is na 'n 90-dae nie-openbaarmakingstydperk bekend gemaak. Die probleem verskyn sedert kern 2.6.32 en is vroeg in Desember reggestel. Die regstelling is ingesluit in kern 5.16 en is ook oorgedra na LTS takke van die kern en kern pakkette wat in verspreidings verskaf is. Dit is opmerklik dat die kwesbaarheid geïdentifiseer is tydens die ontleding van 'n soortgelyke probleem CVE-2021-0920, wat hom manifesteer in die vullisverwyderaar wanneer die MSG_PEEK-vlag verwerk word.

Bron: opennet.ru

Voeg 'n opmerking