CVE-2026-48524 | PyJWT: PyJWKClient unbounded JWKS endpoint requests via attacker-controlled kid values (DoS)

PyJWT is a JSON Web Token implementation in Python. Prior to 2.13.0, 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. 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. This vulnerability is fixed in 2.13.0.

Published: 2026-05-28 Last update: 2026-06-01 Assigner: [email protected] Source: [email protected]

Conclusion & alert: CVE-2026-48524 is rated Low Risk (18.6/100): CVSS Low severity, with low exploitation likelihood (EPSS 0.21%). Mandatory action: Low composite risk—no urgent action required; patch on your normal maintenance cycle and revisit priority if CVSS or EPSS increases.

Risk is dynamic; we continuously reassess and refresh what is shown on this page as upstream context changes.

Exploit prediction scoring system (EPSS) score for CVE-2026-48524

EPSS lead: Daily EPSS estimates relative likelihood of exploitation; percentile ranks this CVE among scored vulnerabilities (higher = more severe relative rank).

# Date Old EPSS score New EPSS score Delta (New - Old)
1 2026-06-15 0.06% 0.21% +0.15%
2 2026-06-03 0.04% 0.06% +0.02%
3 2026-05-29 0.04%

Full EPSS history (3 records total)

Common vulnerability scoring system (CVSS) metrics for CVE-2026-48524

CVSS metrics for this CVE.

Base score Version Severity Vector Exploitability Impact Score source
3.7 3.1 LOW
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:L Click to expand
Attack vector (AV:N)
Could be attacked over the internet or any normal routed network—not just someone sitting at the machine.
Attack complexity (AC:H)
Even with access, the exploit needs extra luck, timing, or a fussy environment to actually work.
Privileges required (PR:N)
No account or special rights needed—anonymous or random user is enough.
User interaction (UI:N)
Nobody has to click “OK” or open a trap file; it can work without a victim helping.
Scope (S:U)
Damage stays in the same “trust bubble” as the broken component—no big spill into unrelated systems.
Confidentiality (C:N)
Doesn’t really leak secrets in a meaningful way.
Integrity (I:N)
Data isn’t meaningfully altered or forged.
Availability (A:L)
Might cause slowdowns, glitches, or partial disruption—not a full brick.
2.2 1.4 [email protected]

Weakness enumeration for CVE-2026-48524

GitHub Security Advisory for CVE-2026-48524

GHSA-fhv5-28vv-h8m8 · Severity: low · Ecosystem: pip — PyJWKClient unbounded JWKS endpoint requests via attacker-controlled kid values (DoS)

OS Trackers for CVE-2026-48524

vendor priority summary link
debian not yet assigned CVE-2026-48524 not yet assigned priority: Debian including 1 source packages (pyjwt), 5 status rows across 5 suites (bookworm, bullseye, forky, sid, trixie): open 5. https://security-tracker.debian.org/tracker/CVE-2026-48524
suse low https://www.suse.com/security/cve/CVE-2026-48524/
ubuntu medium CVE-2026-48524 medium priority: Ubuntu including 1 source packages (pyjwt), 8 status rows across 8 suites (bionic, focal, jammy, noble, questing, resolute, upstream, xenial): needs-triage 8. https://ubuntu.com/security/CVE-2026-48524

Affected software / configurations for CVE-2026-48524

Vendor Product Version Raw CPE
pyjwt_project pyjwt < 2.13.0 cpe:2.3:a:pyjwt_project:pyjwt:*:*:*:*:*:*:*:*

References for CVE-2026-48524

cvelogic Threat Intelligence