Kilpailutilanne Linux-ytimen roskienkerääjässä, joka voi johtaa oikeuksien eskaloitumiseen

Jann Horn Google Project Zero -tiimistä, joka kerran tunnisti Spectre- ja Meltdown-haavoittuvuudet, julkaisi tekniikan Linux-ytimen roskakeräimen haavoittuvuuden (CVE-2021-4083) hyödyntämiseksi. Haavoittuvuus johtuu kilpailutilanteesta, kun siivotaan tiedostokuvauksia unix-socketeista, ja se saattaa mahdollistaa paikallisen etuoikeutettoman käyttäjän suorittaa koodinsa ydintasolla.

Ongelma on mielenkiintoinen, koska aikaikkuna, jonka aikana kilpailutilanne esiintyy, arvioitiin liian pieneksi todellisten hyväksikäyttöjen luomiseen, mutta tutkimuksen kirjoittaja osoitti, että jopa sellaisista aluksi skeptisistä haavoittuvuuksista voi tulla todellisten hyökkäysten lähde, jos hyväksikäytön tekijä on tarvittavat taidot ja aika. Yann Horn osoitti, kuinka filigraanisten manipulaatioiden avulla voit vähentää kilpailutilannetta, joka syntyy, kun close()- ja fget()-funktioita kutsutaan samanaikaisesti, täysin hyödynnettäväksi use-after-free-haavoittuvuudeksi ja päästä käsiksi jo vapautettuun dataan. rakenne ytimen sisällä.

Kilpailutilanne tapahtuu suljettaessa tiedostokuvaajaa, kun kutsut close()- ja fget()-funktioita samanaikaisesti. Close()-kutsu voi tapahtua ennen fget():n suorittamista, mikä hämmentää roskienkerääjää, koska uudelleenlaskennan mukaan tiedostorakenteessa ei ole ulkoisia viittauksia, vaan se pysyy liitettynä tiedostokuvaajaan, ts. Jätteenkerääjä luulee, että sillä on yksinomainen pääsy rakenteeseen, mutta itse asiassa lyhyen aikaa tiedostokuvaustaulukon jäljelle jäävä merkintä viittaa silti vapautettavaan rakenteeseen.

Kisatilanteeseen joutumisen todennäköisyyden lisäämiseksi käytettiin useita temppuja, joiden avulla oli mahdollista nostaa hyväksikäytön onnistumisen todennäköisyys 30 %:iin järjestelmäkohtaisia ​​optimointeja otettaessa käyttöön. Esimerkiksi tiedostokuvaajien rakenteen käyttöajan pidentämiseksi useilla sadoilla nanosekunneilla data poistettiin prosessorin välimuistista täyttämällä välimuistin toimintaa toisessa prosessorin ytimessä, mikä mahdollisti rakenteen hakemisen muistista eikä muistista. nopea CPU-välimuisti.

Toinen tärkeä ominaisuus oli laitteistoajastimen generoimien keskeytysten käyttö kilpailuolosuhteiden ajan pidentämiseksi. Hetki valittiin siten, että keskeytyskäsittelijä laukaisi kilpailutilanteen sattuessa ja keskeytti koodin suorittamisen joksikin aikaa. Ohjauksen palautuksen viivyttämiseksi entisestään odotusjonoon luotiin noin 50 XNUMX merkintää epollin avulla, mikä vaati hakua keskeytyskäsittelijän kautta.

Haavoittuvuuden hyödyntämistekniikka julkistettiin 90 päivän salausjakson jälkeen. Ongelma ilmenee ytimen versiosta 2.6.32 lähtien ja se korjattiin joulukuun alussa. Korjaus sisältyi ytimeen 5.16, ja se siirrettiin myös jakeluissa toimitettujen ytimen ja ydinpakettien LTS-haaroihin. On huomionarvoista, että haavoittuvuus tunnistettiin analysoitaessa samanlaista ongelmaa CVE-2021-0920, joka ilmenee roskakorissa käsiteltäessä MSG_PEEK-lippua.

Lähde: opennet.ru

Lisää kommentti