Biblioteka crypto-js w wersjach przed 4.2.0 implementuje funkcję PBKDF2 z domyślnymi ustawieniami czyniącymi ją co najmniej 1 300 000 razy słabszą niż wymaga obecny standard branżowy. Podatność stanowi poważne zagrożenie dla bezpieczeństwa haseł i podpisów kryptograficznych chronionych za pomocą tej biblioteki.
▸ Pokaż oryginał (EN)
crypto-js is a JavaScript library of crypto standards. Prior to version 4.2.0, crypto-js PBKDF2 is 1,000 times weaker than originally specified in 1993, and at least 1,300,000 times weaker than current industry standard. This is because it both defaults to SHA1, a cryptographic hash algorithm considered insecure since at least 2005, and defaults to one single iteration, a 'strength' or 'difficulty' value specified at 1,000 when specified in 1993. PBKDF2 relies on iteration count as a countermeasure to preimage and collision attacks. If used to protect passwords, the impact is high. If used to generate signatures, the impact is high. Version 4.2.0 contains a patch for this issue. As a workaround, configure crypto-js to use SHA256 with at least 250,000 iterations.
Problem wynika z dwóch jednoczesnych błędów w domyślnej konfiguracji PBKDF2: użycia algorytmu SHA1 (uznawanego za kryptograficznie niepewny co najmniej od 2005 roku) oraz ustawienia liczby iteracji na zaledwie 1, podczas gdy specyfikacja z 1993 roku zakładała 1 000 iteracji, a aktualne standardy branżowe wymagają wartości rzędu setek tysięcy. Funkcja PBKDF2 opiera swoje bezpieczeństwo właśnie na liczbie iteracji jako mechanizmie utrudniającym ataki preimage i kolizyjne. Tak skonfigurowana funkcja jest 1 000 razy słabsza niż zakładała oryginalna specyfikacja z 1993 roku i drastycznie podatna na ataki siłowe oraz słownikowe.
Atakujący uzyskujący dostęp do skrótów (hashy) haseł lub kluczy kryptograficznych wygenerowanych za pomocą podatnej konfiguracji PBKDF2 może je złamać w znacznie krótszym czasie niż zakładano. W zależności od zastosowania może to prowadzić do przejęcia kont użytkowników (ujawnienie haseł) lub sfałszowania podpisów kryptograficznych (naruszenie integralności danych).
Należy zaktualizować crypto-js do wersji 4.2.0, która zawiera patch eliminujący problem. Jako obejście (workaround) bez aktualizacji: skonfigurować jawnie użycie algorytmu SHA256 oraz ustawić liczbę iteracji na co najmniej 250 000.
Biblioteka crypto-js (projekt Crypto-Js Project) we wszystkich wersjach przed 4.2.0, wszędzie tam gdzie wykorzystywana jest funkcja PBKDF2 z domyślnymi ustawieniami.
Podatność dotyczy wyłącznie funkcji PBKDF2 — pozostałe funkcje kryptograficzne biblioteki crypto-js nie są objęte tym zgłoszeniem. Ryzyko jest szczególnie wysokie w aplikacjach przechowujących hashe haseł użytkowników lub generujących podpisy kryptograficzne przy użyciu domyślnych ustawień PBKDF2.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:NCrypto Js Project Crypto Js
APPCrypto-Js Project< 4.2.0