Niska

PyJWKClient unbounded JWKS endpoint requests via attacker-controlled kid values (DoS)

  • Ujawniono: 28.05.2026
  • Aktualizacja: 11.10.2026 15:17

[!NOTE] The vulnerability surfaces only when a JWKS fetch fails; an attacker can attempt to provoke that with sustained unknown-kid traffic, but the outcome depends on upstream JWKS-endpoint behavior (rate limiting, transient errors) which is beyond the attacker's control. Impact is reduced auth availability until the next successful fetch, not complete denial of service.

Summary

PyJWKClient.get_signing_key() forces a fresh HTTP request to the JWKS endpoint for every JWT with an unknown kid value, with no rate limiting. Since kid comes from the unverified token header, an attacker can trigger unlimited outbound requests.

Additionally, fetch_data() finally block clears the JWKS cache on network error.

Root Cause

jwt/jwks_client.py:172-198 - get_signing_key(kid) calls get_signing_keys(refresh=True) for unknown kids, bypassing TTL cache with no cooldown. jwt/jwks_client.py:120-122 - finally block writes None to cache on error, clearing valid data.

Impact

  • DoS against JWKS endpoint (unlimited requests per invalid token)
  • DoS against application (network I/O latency)
  • Cascading failure (rate limiting clears cache, breaking legitimate auth)

Suggested Fix

  1. Add refresh cooldown (refuse refresh more than once per TTL period)
  2. Move cache write from finally to else block

Affected Versions

All versions with PyJWKClient (2.4.0 through 2.12.1)

Czego dotyczy

Kliknij technologię, aby zobaczyć wszystkie dotyczące jej podatności.

PlatformaPaczkaPodatne wersjePoprawka w wersji
Python (PyPI) pyjwt >= 2.0.0, < 2.13.0 2.13.0

Odnośniki

Ocena CVSS 3.7/10
Wektor CVSS
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:L
Słabość (CWE)
CWE-460, CWE-755
Platforma
Python (PyPI)
Paczka
pyjwt
Ujawniono
28.05.2026
Aktualizacja
11.10.2026 15:17

Źródła i licencje

OSV / GitHub Advisory Database - PYSEC-2026-177 - PyPA Advisory Database; CC BY 4.0

OSV / GitHub Advisory Database - GHSA-fhv5-28vv-h8m8 - CC BY 4.0

Historia podatności: pyjwt

Wszystkie opisane podatności tej paczki (Python (PyPI)), od najnowszej. Widać, czy to jednorazowa wpadka, czy paczka, której trzeba pilnować.

Wszystkie (24) w archiwum
Wszystkich wpisów
24
Pierwsza → ostatnia
08.2017 09.2026
Bez poprawki
2
Wykorzystywana w atakach
0

Rozkład istotności

  • Krytyczna 1
  • Wysoka 10
  • Średnia 11
  • Niska 2

Ujawnienia w latach

  1. 2017: 1
  2. 2018: 0
  3. 2019: 0
  4. 2020: 0
  5. 2021: 0
  6. 2022: 1
  7. 2023: 0
  8. 2024: 1
  9. 2025: 1
  10. 2026: 20
Istotność:
  1. Wysoka · 7.4 CVE-2026-102266 >= 2.13.0, < 2.14.0 2.14.0
  2. Wysoka · 7.4 CVE-2026-102273 >= 2.13.0, < 2.14.0 2.14.0
  3. Wysoka · 7.4 CVE-2026-102267 < 2.14.0 2.14.0
  4. Wysoka · 7.4 CVE-2026-102272 >= 2.13.0, < 2.14.0 2.14.0
  5. PyJWKClient unbounded JWKS endpoint requests via attacker-controlled kid values (DoS) ten wpis
    Niska · 3.7 CVE-2026-48524 >= 2.0.0, < 2.13.0 2.13.0
  6. Wysoka · 7.5 CVE-2026-32597 < 2.12.0 2.12.0
  7. Wysoka · 7.4 CVE-2022-29217 >= 1.5.0, < 2.4.0 2.4.0
  8. Wysoka · 7.5 CVE-2017-11424 < 1.5.1 1.5.1

Dowiedz się, które podatności dotyczą Twojej aplikacji

Po podłączeniu integracji DockRay i włączeniu raportowania oprogramowania DockRay porównuje zgłoszone wersje komponentów ze znanymi podatnościami i powiadamia o potwierdzonych dopasowaniach. Zakres zależy od obsługiwanej technologii i dostępnych biuletynów.

Podłącz swoją aplikację
Newsletter DockRay

Bezpieczeństwo aplikacji w Twojej skrzynce

Najważniejsze podatności, konkretne zalecenia i praktyczne wskazówki dla Twoich aplikacji. Wybierz technologie i śledź to, co ma znaczenie dla Twojego projektu.

  • Codzienne zestawienie nowych podatności, także krytycznych.
  • Powiadomienia o ważnych aktualizacjach.
  • Praktyczne porady o bezpieczeństwie i monitoringu aplikacji.

Pozostaw puste, aby otrzymywać informacje o wszystkich technologiach.

Zapis jest bezpłatny. Wypiszesz się jednym kliknięciem w wiadomości.