Rust-standardikirjaston haavoittuvuus

Rust-standardikirjastossa on havaittu haavoittuvuus (CVE-2022-21658), joka johtuu std::fs::remove_dir_all()-funktion kilpailutilanteesta. Jos tätä toimintoa käytetään väliaikaisten tiedostojen poistamiseen etuoikeutetussa sovelluksessa, hyökkääjä voi saada aikaan mielivaltaisten järjestelmätiedostojen ja hakemistojen poistamisen, joita hyökkääjällä ei normaalisti olisi pääsyä poistaa.

Haavoittuvuus johtuu symbolisten linkkien tarkistamisen virheellisestä toteutuksesta ennen hakemistojen rekursiivista poistamista. Sen sijaan, että estäisi symbolilinkkien seuraamisen, remove_dir_all() tarkistaa ensin, onko tiedosto symbolilinkki. Jos linkki on määritetty, se poistetaan tiedostona, ja jos se on hakemisto, kutsutaan rekursiivinen sisällön poistotoiminto. Ongelmana on, että tarkistuksen ja poistotoiminnon alkamisen välillä on pieni viive.

Kun tarkistus on jo suoritettu, mutta poistettavien hakemistojen luettelointi ei ole vielä alkanut, hyökkääjä voi korvata hakemiston tilapäisillä tiedostoilla, joissa on symbolinen linkki. Jos se osuu oikeaan aikaan, remove_dir_all()-funktio käsittelee symbolista linkkiä hakemistona ja alkaa poistaa sisältöä, johon linkki osoittaa. Huolimatta siitä, että hyökkäyksen onnistuminen riippuu valitun ajan tarkkuudesta hakemiston vaihtamiseen ja oikeaan hetkeen osuminen ensimmäisellä kerralla on epätodennäköistä, kokeiden aikana tutkijat onnistuivat saamaan toistettavan onnistuneen hyökkäyksen suoritettuaan hyväksikäytön Muutama sekunti.

Tämä vaikuttaa kaikkiin Rust-versioihin 1.0.0-1.58.0 mukaan lukien. Ongelma on toistaiseksi ratkaistu korjaustiedoston muodossa (korjaus sisällytetään 1.58.1-julkaisuun, jonka odotetaan valmistuvan muutaman tunnin sisällä). Voit seurata haavoittuvuuden poistamista jakeluista seuraavilla sivuilla: Debian, RHEL, SUSE, Fedora, Ubuntu, Arch, FreeBSD. Kaikkien Rust-ohjelmien käyttäjiä, jotka toimivat korotetuilla oikeuksilla ja käyttävät Remove_dir_all-toimintoa, kehotetaan päivittämään Rust pikaisesti versioon 1.58.1. On mielenkiintoista, että julkaistu korjaustiedosto ei ratkaise ongelmaa kaikissa järjestelmissä; esimerkiksi REDOX-käyttöjärjestelmässä ja macOS:n versioissa ennen 10.10 (Yosemite) haavoittuvuutta ei ole estetty, koska O_NOFOLLOW-lippu puuttuu, mikä estää symbolisen käytön. linkkejä.

Lähde: opennet.ru

Lisää kommentti