W bibliotece nanorand dla języka Rust (wersje przed 0.6.1) implementacja Deref dla TlsWyRand niepoprawnie wyłuskuje surowy wskaźnik (raw pointer), co umożliwia istnienie wielu mutowalnych referencji do tego samego obiektu jednocześnie. Narusza to fundamentalne gwarancje bezpieczeństwa pamięci języka Rust i może prowadzić do poważnych konsekwencji dla integralności, poufności i dostępności aplikacji.
▸ Pokaż oryginał (EN)
An issue was discovered in the nanorand crate before 0.6.1 for Rust. There can be multiple mutable references to the same object because the TlsWyRand Deref implementation dereferences a raw pointer.
W Rust istnienie wielu mutowalnych referencji do tego samego miejsca w pamięci w tym samym czasie jest zabronione przez model ownership i borrow checker. Implementacja Deref w typie TlsWyRand dokonuje wyłuskania surowego wskaźnika (raw pointer) bez odpowiednich gwarancji bezpieczeństwa, omijając mechanizmy kontroli kompilatora. W rezultacie możliwe jest uzyskanie wielu jednoczesnych mutowalnych referencji do tego samego obiektu, co tworzy stan wyścigu danych (data race) lub naruszenie pamięci.
Atakujący lub złośliwy kod może doprowadzić do naruszenia integralności danych, nieoczekiwanego zachowania programu, uszkodzenia pamięci lub wykonania dowolnego kodu — co tłumaczy ocenę CVSS 9.8 obejmującą pełny wpływ na poufność, integralność i dostępność.
Należy zaktualizować crate nanorand do wersji 0.6.1 lub nowszej. W pliku Cargo.toml należy ustawić nanorand = "0.6.1" lub wyższą. Szczegóły dostępne w referencji RUSTSEC-2021-0114.
Biblioteka nanorand (crate) dla języka Rust w wersjach przed 0.6.1 — projekty Nanorand Project Nanorand.
Podatność sklasyfikowana w bazie RustSec jako RUSTSEC-2021-0114. Dotyczy specyficznie ekosystemu Rust — błąd narusza gwarancje bezpieczeństwa pamięci (memory safety) będące kluczową cechą tego języka.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:HNanorand Project Nanorand
APPNanorand Project0.5.0 – 0.6.1 (bez)