Sebezhetőség a Rust szabványkönyvtárban

Sebezhetőséget (CVE-2022-21658) azonosítottak a Rust szabványkönyvtárában az std::fs::remove_dir_all() függvény versenyfeltételei miatt. Ha ezt a funkciót ideiglenes fájlok törlésére használják egy privilegizált alkalmazásban, a támadó elérheti olyan tetszőleges rendszerfájlok és könyvtárak törlését, amelyeket a támadó általában nem tudna törölni.

A biztonsági rést a szimbolikus hivatkozások ellenőrzésének helytelen megvalósítása okozza a könyvtárak rekurzív törlése előtt. Ahelyett, hogy megakadályozná a szimbolikus hivatkozások követését, a remove_dir_all() először ellenőrzi, hogy a fájl szimbolikus hivatkozás-e. Ha egy hivatkozás definiálva van, akkor fájlként törlődik, ha pedig könyvtár, akkor egy rekurzív tartalomeltávolítási műveletet hívunk meg. A probléma az, hogy van egy kis késés az ellenőrzés és a törlési művelet megkezdése között.

Abban az időben, amikor az ellenőrzés már megtörtént, de a törlésre szánt könyvtárak felsorolásának művelete még nem kezdődött el, a támadó szimbolikus hivatkozással ideiglenes fájlokkal helyettesítheti a könyvtárat. Ha a megfelelő időben érkezik, a remove_dir_all() függvény a szimbolikus hivatkozást könyvtárként kezeli, és megkezdi a tartalom eltávolítását, amelyre a hivatkozás mutat. Annak ellenére, hogy a támadás sikere a címtár cseréjére kiválasztott időpont pontosságán múlik, és a megfelelő pillanat első eltalálása nem valószínű, a kísérletek során a kutatók megismételhető sikeres támadást tudtak elérni az exploit végrehajtása után. néhány másodperc.

A Rust 1.0.0-tól 1.58.0-ig terjedő összes verziója érintett. A probléma egyelőre javítás formájában megoldódott (a javítás néhány órán belül várhatóan az 1.58.1-es kiadásba is belekerül). A következő oldalakon követheti nyomon a sérülékenység megszüntetését a következő disztribúciókban: Debian, RHEL, SUSE, Fedora, Ubuntu, Arch, FreeBSD. A megemelt jogosultságokkal futó és az remove_dir_all függvényt használó Rust programok minden felhasználójának azt tanácsoljuk, hogy sürgősen frissítse a Rust 1.58.1-es verziójára. Érdekes, hogy a kiadott javítás nem minden rendszeren oldja meg a problémát; például a REDOX OS-ben és a macOS 10.10 előtti verzióiban (Yosemite) a biztonsági rés nincs blokkolva az O_NOFOLLOW jelző hiánya miatt, amely letiltja a szimbolikus követést. linkeket.

Forrás: opennet.ru

Hozzászólás