Luka w standardowej bibliotece języka Rust

W standardowej bibliotece języka Rust zidentyfikowano podatność (CVE-2022-21658) związaną z wyścigiem stanów w funkcji std::fs::remove_dir_all(). W przypadku użycia tej funkcji do usuwania plików tymczasowych w aplikacji z przywilejami, atakujący może doprowadzić do usunięcia dowolnych plików i katalogów systemowych, do których normalnie nie ma dostępu.

Podatność wynika z niewłaściwej implementacji sprawdzania linków symbolicznych przed rekurencyjnym usuwaniem katalogów. Zamiast zakazu podążania za linkami symbolicznymi, funkcja remove_dir_all() najpierw sprawdza, czy plik jest linkiem symbolicznym. Jeśli link jest zdefiniowany, zostaje usunięty jako plik, a jeśli katalog — wywoływana jest operacja rekurencyjnego usuwania zawartości. Problem polega na tym, że między sprawdzeniem a rozpoczęciem operacji usuwania występuje niewielkie opóźnienie.

W momencie gdy sprawdzenie już zostało przeprowadzone, ale operacja przechodzenia przez katalogi w celu usunięcia jeszcze się nie rozpoczęła, atakujący może podmienić katalog z plikami tymczasowymi na link symboliczny. Jeśli trafi w odpowiedni moment, funkcja remove_dir_all() potraktuje link symboliczny jako katalog i zacznie usuwać zawartość, na którą wskazuje ten link. Mimo że powodzenie ataku zależy od precyzji wybranego czasu podmiany katalogu i trafienie za pierwszym razem w odpowiedni moment jest mało prawdopodobne, w toku eksperymentów badaczom udało się uzyskać powtarzalne sukcesy ataku po wykonaniu exploita w ciągu kilku sekund.

Wszystkie wersje Rust od 1.0.0 do 1.58.0 włącznie są podatne. Problem został tymczasowo naprawiony w formie poprawki (poprawka ma być zawarta w wydaniu 1.58.1, które oczekiwane jest w ciągu kilku godzin). Informacje o usunięciu podatności w dystrybucjach można znaleźć na tych stronach: Debian, RHEL, SUSE, Fedora, Ubuntu, Arch, FreeBSD. Wszystkim użytkownikom programów w języku Rust, uruchamianym z podwyższonymi przywilejami i używającym funkcji remove_dir_all, zaleca się pilne zaktualizowanie Rust do wersji 1.58.1. Ciekawe, że wydana poprawka nie rozwiązuje problemu na wszystkich systemach, na przykład w systemie operacyjnym REDOX oraz w wersjach macOS przed 10.10 (Yosemite) podatność nie jest blokowana z powodu braku flagi O_NOFOLLOW, wyłączającej podążanie za linkami symbolicznymi.

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster