Biblioteka Python joserfc (autorstwa Hsiaoming) jest podatna na atak wyczerpania zasobów (CWE-770) poprzez przesyłanie nadmiernie dużych tokenów JWT. Atakujący może spowodować przetwarzanie ekstremalnie dużych komunikatów w systemach logowania, co może prowadzić do niedostępności aplikacji lub infrastruktury diagnostycznej.
▸ Pokaż oryginał (EN)
joserfc is a Python library that provides an implementation of several JSON Object Signing and Encryption (JOSE) standards. In versions from 1.3.3 to before 1.3.5 and from 1.4.0 to before 1.4.2, the ExceededSizeError exception messages are embedded with non-decoded JWT token parts and may cause Python logging to record an arbitrarily large, forged JWT payload. In situations where a misconfigured — or entirely absent — production-grade web server sits in front of a Python web application, an attacker may be able to send arbitrarily large bearer tokens in the HTTP request headers. When this occurs, Python logging or diagnostic tools (e.g., Sentry) may end up processing extremely large log messages containing the full JWT header during the joserfc.jwt.decode() operation. The same behavior also appears when validating claims and signature payload sizes, as the library raises joserfc.errors.ExceededSizeError() with the full payload embedded in the exception message. Since the payload is already fully loaded into memory at this stage, the library cannot prevent or reject it. This issue has been patched in versions 1.3.5 and 1.4.2.
Gdy joserfc przetwarza token JWT o nadmiernym rozmiarze, zgłasza wyjątek ExceededSizeError, którego komunikat zawiera oryginalny, niezakodowany fragment tokenu JWT (np. pełny nagłówek lub payload). Ponieważ payload jest w tym momencie już w całości załadowany do pamięci, biblioteka nie jest w stanie go odrzucić przed osadzeniem w komunikacie wyjątku. W środowiskach, gdzie brakuje prawidłowo skonfigurowanego serwera produkcyjnego (np. nginx, Apache) ograniczającego rozmiar nagłówków HTTP, atakujący może przesłać dowolnie duży token bearer w nagłówku Authorization. Systemy logowania (np. Python logging) oraz narzędzia diagnostyczne (np. Sentry) mogą wówczas przetwarzać i zapisywać ekstremalnie duże komunikaty, zużywając zasoby systemowe.
Atakujący może doprowadzić do niedostępności aplikacji (DoS) poprzez przeciążenie systemu logowania lub narzędzi diagnostycznych przetwarzających ogromne komunikaty błędów. Atak może też skutkować nadmiernym zużyciem zasobów systemowych (pamięć, dysk, przepustowość) zarówno po stronie aplikacji, jak i zewnętrznych usług agregujących logi.
Należy zaktualizować bibliotekę joserfc do wersji 1.3.5 lub 1.4.2, w których problem został naprawiony. Dodatkowo zaleca się skonfigurowanie produkcyjnego serwera HTTP (np. nginx, Apache) z limitem rozmiaru nagłówków HTTP przed aplikacją Python, co stanowi dodatkową warstwę ochrony.
Biblioteka joserfc w wersjach od 1.3.3 do przed 1.3.5 oraz od 1.4.0 do przed 1.4.2. Szczególnie narażone są aplikacje pozbawione produkcyjnego serwera HTTP ograniczającego rozmiar nagłówków żądań.
Podatność dotyczy wyłącznie dostępności (VA:H, SA:H) — brak wpływu na poufność i integralność danych. Problem jest szczególnie istotny w aplikacjach bez warstwy odwrotnego proxy (reverse proxy) ograniczającej rozmiar żądań HTTP.
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:H/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:XHsiaoming Joserfc
APPHsiaoming1.3.3 – 1.3.5 (bez)1.4.0 – 1.4.2 (bez)