Biblioteka joserfc w wersjach przed 1.6.8 akceptuje tokeny JWT podpisane przez atakującego z użyciem pustego klucza HMAC, gdy klucz weryfikacyjny dostarczony przez aplikację to pusty ciąg znaków lub None. Podatność umożliwia całkowite obejście mechanizmu uwierzytelniania opartego na tokenach JWT.
▸ Pokaż oryginał (EN)
joserfc is a Python library that provides an implementation of several JSON Object Signing and Encryption (JOSE) standards. Prior to 1.6.8, joserfc.jwt.decode accepts attacker-forged HMAC-signed tokens when the caller-supplied verification key is the empty string or None, because HMACAlgorithm.sign and HMACAlgorithm.verify in src/joserfc/_rfc7518/jws_algs.py pass the output of OctKey.get_op_key(...) to hmac.new(...) and OctKey.import_key in src/joserfc/_rfc7518/oct_key.py only emits a SecurityWarning for keys shorter than 14 bytes without rejecting zero-length input. This issue is fixed in version 1.6.8.
Funkcja joserfc.jwt.decode nie odrzuca kluczy zerowej długości — moduł OctKey.import_key emituje jedynie ostrzeżenie (SecurityWarning) dla kluczy krótszych niż 14 bajtów, ale nie blokuje kluczy o długości zero. W rezultacie HMACAlgorithm.sign oraz HMACAlgorithm.verify przekazują wynik OctKey.get_op_key() bezpośrednio do hmac.new(), co pozwala atakującemu samodzielnie wygenerować poprawnie weryfikowany token HMAC przy użyciu pustego sekretu. Aplikacja wywołująca joserfc.jwt.decode z kluczem będącym pustym stringiem lub None nieświadomie akceptuje sfałszowane tokeny jako autentyczne.
Atakujący może sfałszować dowolny token JWT i podać się za innego użytkownika (w tym administratora), skutecznie omijając uwierzytelnianie oraz wszelkie mechanizmy autoryzacji oparte na tokenach w aplikacji korzystającej z biblioteki joserfc.
Należy zaktualizować bibliotekę joserfc do wersji 1.6.8 lub nowszej, która zawiera poprawkę odrzucającą klucze zerowej długości na poziomie OctKey.import_key. Dodatkowo zaleca się przegląd kodu aplikacji pod kątem miejsc, w których klucz weryfikacyjny JWT może być pusty lub None, oraz wdrożenie walidacji klucza przed wywołaniem joserfc.jwt.decode.
Biblioteka joserfc (Python) we wszystkich wersjach przed 1.6.8
Podatność dotyczy scenariusza, w którym aplikacja przekazuje pusty klucz weryfikacyjny — co może wystąpić np. przy błędnej konfiguracji zmiennych środowiskowych lub braku inicjalizacji sekretu. Poprawka dostępna w commicie 86d00910b2b2d2d07503fee9b572906daefab7f1 w repozytorium authlib/joserfc.
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:H/VA:N/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:X