Biblioteka Immutable.js przed wersjami 4.3.9 i 5.1.8 jest podatna na celowe kolizje wartości hash prowadzące do nadmiernego zużycia CPU. Atakujący kontrolujący klucze wstawiane do struktur Immutable.Map lub Immutable.Set może doprowadzić do odmowy usługi (DoS).
▸ Pokaż oryginał (EN)
Immutable.js provides many Persistent Immutable data structures. Prior to 4.3.9 and 5.1.8, Immutable.Map and Immutable.Set keep keys that share the same 32-bit hash in a HashCollisionNode collision bucket that is scanned linearly, allowing an attacker who controls keys inserted into a Map, such as through Immutable.Map(obj), Immutable.fromJS(obj), state.merge(userObject), or mergeDeep, to craft many colliding keys and degrade insertion and lookup to consume disproportionate CPU. This issue is fixed in versions 4.3.9 and 5.1.8.
Struktury Immutable.Map i Immutable.Set przechowują klucze o identycznym 32-bitowym hashu w węźle HashCollisionNode, który jest przeszukiwany liniowo. Atakujący, który może kontrolować dane wejściowe — np. przez wywołania Immutable.Map(obj), Immutable.fromJS(obj), state.merge(userObject) lub mergeDeep — może spreparować dużą liczbę kluczy generujących ten sam hash. Powoduje to, że operacje wstawiania i wyszukiwania degradują się do złożoności liniowej zamiast stałej (CWE-407: Insufficient Algorithmic Complexity), pochłaniając nieproporcjonalne zasoby CPU.
Atakujący może spowodować znaczne i ciągłe zużycie CPU na serwerze lub kliencie przetwarzającym złośliwe dane, prowadząc do odmowy usługi (DoS) dla pozostałych użytkowników aplikacji.
Należy zaktualizować bibliotekę Immutable.js do wersji 4.3.9 (gałąź 4.x) lub 5.1.8 (gałąź 5.x). Patche dostępne są w oficjalnym repozytorium GitHub projektu immutable-js.
Immutable.js (immutable-js) w wersjach przed 4.3.9 (gałąź 4.x) oraz przed 5.1.8 (gałąź 5.x)
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:XImmutable Js Immutable
APPImmutable-Js< 4.3.95.0.0 – 5.1.8 (bez)