NodeBB Forum Software w funkcji `utils.generateUUID` używało kryptograficznie słabego generatora liczb pseudolosowych (`Math.random()`), co umożliwia atakującemu przewidzenie kodu resetu hasła. Podatność pozwala na przejęcie dowolnego konta bez jakiegokolwiek udziału jego właściciela.
▸ Pokaż oryginał (EN)
NodeBB Forum Software is powered by Node.js and supports either Redis, MongoDB, or a PostgreSQL database. It utilizes web sockets for instant interactions and real-time notifications. `utils.generateUUID`, a helper function available in essentially all versions of NodeBB (as far back as v1.0.1 and potentially earlier) used a cryptographically insecure Pseudo-random number generator (`Math.random()`), which meant that a specially crafted script combined with multiple invocations of the password reset functionality could enable an attacker to correctly calculate the reset code for an account they do not have access to. This vulnerability impacts all installations of NodeBB. The vulnerability allows for an attacker to take over any account without the involvement of the victim, and as such, the remediation should be applied immediately (either via NodeBB upgrade or cherry-pick of the specific changeset. The vulnerability has been patched in version 2.x and 1.19.x. There is no known workaround, but the patch sets listed above will fully patch the vulnerability.
Funkcja `utils.generateUUID`, dostępna we wszystkich praktycznych wersjach NodeBB (od co najmniej v1.0.1), generowała tokeny resetu hasła z użyciem `Math.random()` — funkcji niekryptograficznej, której wyniki są przewidywalne. Atakujący, wywołując wielokrotnie funkcję resetu hasła dla wybranego konta, mógł zgromadzić wystarczającą ilość próbek, a następnie za pomocą specjalnie przygotowanego skryptu obliczyć poprawny token resetu. Posiadając prawidłowy token, atakujący przejmuje pełną kontrolę nad kontem ofiary bez jej wiedzy ani interakcji.
Atakujący może przejąć kontrolę nad dowolnym kontem użytkownika platformy NodeBB — w tym kontami administratorów — bez jakiegokolwiek udziału ofiary, co prowadzi do pełnego naruszenia poufności, integralności i dostępności danych konta.
Należy niezwłocznie zaktualizować NodeBB do wersji 2.x lub 1.19.x, w których podatność została załatana. Alternatywnie możliwe jest zastosowanie konkretnych zestawów zmian (cherry-pick) wskazanych w referencjach producenta (commity: 81e3c1ba i e802fab8 w repozytorium GitHub). Nie istnieje żadne znane obejście (workaround) — jedynym skutecznym zabezpieczeniem jest zastosowanie patcha.
Wszystkie instalacje NodeBB — podatność obecna co najmniej od wersji v1.0.1; dotyczy wszystkich wersji starszych niż 1.19.x (linia 1.x) oraz starszych niż 2.x (linia 2.x)
Producent w oficjalnym komunikacie bezpieczeństwa wprost zaleca natychmiastowe zastosowanie remediacji ze względu na możliwość przejęcia konta bez udziału ofiary. Podatność sklasyfikowana jako CWE-330 (użycie niewystarczająco losowych wartości) oraz CWE-338 (użycie kryptograficznie słabego PRNG).
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:H/A:HNodebb
APPNodebb2.0.0< 1.19.8
Powiązane podatności
RCE w NodeBB via endpoint xmlrpc.php — wykonanie dowolnego kodu
NodeBB: path traversal umożliwiający zdalne wykonanie kodu JavaScript
NodeBB — przejęcie konta przez prototype pollution w socket.io
NodeBB: prototype pollution i XSS w module uploader umożliwiające przejęcie konta
NodeBB — pominięcie uwierzytelnienia w weryfikacji tokenów API (Auth Bypass)