Kwetsbaarheid in de Rust-standaardbibliotheek

Er is een kwetsbaarheid (CVE-2022-21658) geïdentificeerd in de Rust-standaardbibliotheek vanwege een race condition in de functie std::fs::remove_dir_all(). Als deze functie wordt gebruikt om tijdelijke bestanden in een geprivilegieerde toepassing te verwijderen, kan een aanvaller willekeurige systeembestanden en mappen verwijderen waartoe de aanvaller normaal gesproken geen toegang zou hebben.

Het beveiligingslek wordt veroorzaakt door een onjuiste implementatie van het controleren van symbolische koppelingen voordat mappen recursief worden verwijderd. In plaats van te voorkomen dat symlinks worden gevolgd, controleert remove_dir_all() eerst of het bestand een symlink is. Als er een link is gedefinieerd, wordt deze als bestand verwijderd, en als het een map is, wordt een recursieve bewerking voor het verwijderen van inhoud aangeroepen. Het probleem is dat er een kleine vertraging zit tussen de controle en het begin van de verwijderbewerking.

Op een moment dat de controle al is uitgevoerd, maar de bewerking van het opsommen van mappen voor verwijdering nog niet is begonnen, kan de aanvaller de map vervangen door tijdelijke bestanden met een symbolische link. Als de link op het juiste moment wordt weergegeven, behandelt de functie remove_dir_all() de symbolische link als een map en begint de inhoud te verwijderen waarnaar de link verwijst. Ondanks het feit dat het succes van de aanval afhangt van de nauwkeurigheid van het gekozen tijdstip waarop de map wordt vervangen en het onwaarschijnlijk is dat de eerste keer het juiste moment wordt bereikt, konden de onderzoekers tijdens de experimenten een herhaalbare succesvolle aanval realiseren nadat ze de exploit hadden uitgevoerd binnen een paar seconden.

Alle versies van Rust, van 1.0.0 tot en met 1.58.0, worden getroffen. Het probleem is voorlopig in patchvorm opgelost (de oplossing zal worden opgenomen in release 1.58.1, die binnen een paar uur wordt verwacht). U kunt de eliminatie van de kwetsbaarheid in distributies volgen op deze pagina's: Debian, RHEL, SUSE, Fedora, Ubuntu, Arch, FreeBSD. Alle gebruikers van Rust-programma's die met verhoogde rechten draaien en de functie remove_dir_all gebruiken, worden geadviseerd om Rust dringend te updaten naar versie 1.58.1. Het is interessant dat de uitgebrachte patch het probleem niet op alle systemen oplost; in REDOX OS en versies van macOS vóór 10.10 (Yosemite) wordt de kwetsbaarheid bijvoorbeeld niet geblokkeerd vanwege de afwezigheid van de O_NOFOLLOW-vlag, die de volgende symbolische koppelingen.

Bron: opennet.ru

Voeg een reactie