Biblioteka nanorand dla języka Rust w wersjach przed 0.5.1 zawiera krytyczny błąd powodujący, że każdy generator liczb losowych (w tym ChaCha) zwraca wyłącznie wartość zero. Skutkuje to całkowitym brakiem losowości, co podważa bezpieczeństwo wszelkich mechanizmów kryptograficznych i uwierzytelniających opartych na tej bibliotece.
▸ Pokaż oryginał (EN)
An issue was discovered in the nanorand crate before 0.5.1 for Rust. It caused any random number generator (even ChaCha) to return all zeroes because integer truncation was mishandled.
Błąd wynika z nieprawidłowej obsługi obcinania liczby całkowitej (integer truncation) podczas konwersji typów (CWE-681). W wyniku tego przekształcenia wartości generowane przez algorytm losowy są sprowadzane do zera niezależnie od wewnętrznego stanu generatora. Oznacza to, że nawet kryptograficznie silny generator ChaCha produkuje ciąg samych zer zamiast pseudolosowych danych, co czyni go całkowicie bezużytecznym z punktu widzenia bezpieczeństwa (CWE-330 — niewystarczająca losowość).
Atakujący lub złośliwy podmiot może przewidzieć wszystkie wartości generowane przez bibliotekę (są one stale równe zero), co umożliwia łamanie kluczy kryptograficznych, tokenów sesji, identyfikatorów jednorazowych (nonce) oraz innych sekretów zależnych od losowości. Może to prowadzić do przełamania poufności, integralności i dostępności systemów wykorzystujących tę bibliotekę.
Należy zaktualizować bibliotekę nanorand do wersji 0.5.1 lub nowszej. Zaleca się pilną weryfikację wszystkich aplikacji Rust używających tej zależności oraz unieważnienie i regenerację wszelkich sekretów (kluczy, tokenów, nonce) wygenerowanych przy użyciu podatnych wersji biblioteki.
Biblioteka nanorand crate dla języka Rust w wersjach przed 0.5.1 (projekt Nanorand Project Nanorand).
Szczegóły podatności zostały udokumentowane w bazie RustSec pod identyfikatorem RUSTSEC-2020-0089.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:HNanorand Project Nanorand
APPNanorand Project< 0.5.1