Skip to main content

PyJWT CVE-2026-48525

| EUVDEUVD-2026-32919 MEDIUM
Uncontrolled Resource Consumption (CWE-400)
2026-05-28 GitHub_M GHSA-w7vc-732c-9m39 PYSEC-2026-178
5.3
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Send oversized b64=false JWS compact token
  2. Delivery
    Trigger premature Base64URL decode in PyJWT verifier
  3. Exploit
    Exhaust CPU and memory allocations
  4. Execution
    Signature validation failure discarded too late
  5. Impact
    Service availability degraded or exhausted

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V2 - Validation and Business Logic Resource consumption limits
MITRE ATT&CK

1 technique across 1 tactic: Impact

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Exploitation requires that the target application is using PyJWT versions 2.8.0-2.12.1 AND is invoking the detached JWS token verification path with the unencoded-payload RFC 7797 option (b64=false header). Standard JWT encode/decode operations that do not use detached payloads are not affected. The endpoint processing these tokens must be reachable by the attacker; per the CVSS vector (AV:N/AC:L/PR:N/UI:N), no authentication is required and there is no elevated attack complexity once this feature is in use. Exploitation is limited by deployment specificity: b64=false detached JWS is a niche RFC 7797 extension infrequently used in typical JWT deployments, so most PyJWT consumers are not exposed even on vulnerable versions. No special platform, OS, or runtime configuration is required beyond the use of this specific PyJWT feature.

Impact

The CVSS 5.3 Medium score reflects a partial availability impact with no confidentiality or integrity consequences (C:N/I:N/A:L), which is consistent with a resource exhaustion DoS rather than a code execution or data exposure class. The AV:N/AC:L/PR:N/UI:N vector confirms worst-case reachability: no authentication, no complex precondition, and no user interaction required - making this trivially automatable against any exposed endpoint. EPSS data is not provided, but the combination of low attack complexity and unauthenticated network access suggests moderate opportunistic exploitation potential against services that publicly expose JWT verification. The critical mitigating factor is scope: only applications that specifically invoke PyJWT's detached JWS verification with the b64=false/RFC 7797 option are vulnerable; standard JWT verification workflows are unaffected. No KEV listing and no public exploit code further reduce immediate urgency. The real-world priority is therefore medium for generic PyJWT deployments but high for any service exposing an unauthenticated endpoint that calls PyJWT's detached JWS verify path.

Exploit ScenarioDerived

An attacker sends a crafted HTTP request to an API endpoint that verifies detached JWS tokens using PyJWT, embedding an arbitrarily large Base64URL-encoded string in the compact serialization payload segment while providing a valid-format b64=false header. PyJWT allocates memory and burns CPU decoding this oversized segment before discarding it, even though the signature check will ultimately fail. Repeated high-rate requests of this type exhaust server resources and cause denial of service to legitimate users without requiring any credentials. No public exploit code has been identified at time of analysis, but the low attack complexity and lack of authentication requirements make this straightforward to reproduce from the description alone.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.0% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – May 28, 2026

Uncontrolled resource consumption in PyJWT 2.8.0-2.12.1 exposes any service that verifies detached JWS tokens to unauthenticated denial-of-service. When the unencoded-payload extension (b64=false, RFC 7797) is in use, PyJWT unnecessarily Base64URL-decodes the compact-serialization payload segment before discarding it in favor of the caller-supplied detached payload - turning that segment into an attacker-controlled amplifier for CPU and memory exhaustion regardless of signature validity. No public exploit has been identified at time of analysis, but the CVSS vector (AV:N/AC:L/PR:N/UI:N) confirms fully unauthenticated remote exploitation against any affected endpoint using this feature.

RemediationAI

The primary fix is to upgrade PyJWT to version 2.13.0 or later, which resolves the premature Base64URL decode in the detached JWS verification path. The vendor advisory is available at https://github.com/jpadilla/pyjwt/security/advisories/GHSA-w7vc-732c-9m39. If an immediate upgrade is not feasible, the most effective compensating control is to audit all call sites that invoke PyJWT's JWT decode or verify functions and confirm whether the detached_payload parameter is passed alongside tokens containing a b64=false header; if that code path is not actively used, ensure it cannot be reached from unauthenticated input. For endpoints that must retain detached JWS support, adding an application-layer payload size limit (e.g., rejecting incoming compact serializations exceeding a defined byte threshold before they reach PyJWT) reduces the amplification window, though this does not eliminate the underlying flaw. Blocking or rate-limiting the relevant API endpoints at the network perimeter is a lower-fidelity workaround with the trade-off of degraded availability for legitimate clients.

Affected VersionsENISA

pyjwt 2.8.0, < 2.13.0

Affected Packages

pypi pyjwt fix: 2.13.0

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in pypi

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

PyJWT (CPE: cpe:2.3:a:jpadilla:pyjwt:*:*:*:*:*:*:*:*) is the most widely used Python library for creating and verifying JSON Web Tokens. RFC 7797 defines the JWS Unencoded Payload Option, signified by the b64=false header claim, which allows JWS compact serializations to carry a detached payload passed out-of-band. The defect (CWE-400: Uncontrolled Resource Consumption) arises because PyJWT's verification path performs Base64URL decoding of the inline compact-serialization payload segment prior to applying the b64=false detached-payload enforcement logic. Since that decoded value is subsequently overwritten by the legitimate detached_payload, there is zero functional justification for the early decode - yet the CPU cycles and memory allocations consumed by decoding an arbitrarily large attacker-supplied segment are fully realized. The fix in 2.13.0 guards against this by skipping or size-limiting the decode step when the b64=false header is present.

Know when Pyjwt gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (GitHub_M) PRIMARY 5.3 MEDIUM
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L
SUSE MEDIUM
Red Hat 5.3 MEDIUM

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
None
Integrity
None
Availability
Low

Lifecycle Timeline

1
Patch available
May 28, 2026 - 17:01 EUVD

DescriptionCVE.org

PyJWT is a JSON Web Token implementation in Python. From 2.8.0 to 2.12.1, when verifying detached JWS tokens using the unencoded-payload option ("b64": false, RFC 7797), PyJWT performs Base64URL decoding of the compact-serialization payload segment before enforcing the detached-payload rules. For b64=false, PyJWT later discards that decoded payload and replaces it with the caller-provided detached_payload. In practice, this turns the middle segment into an attacker-controlled “work amplifier”: a remote client can supply an arbitrarily large Base64URL payload segment that forces CPU work + memory allocations even if the signature is invalid. This creates an unauthenticated DoS vector against any endpoint that verifies detached JWS using PyJWT. This vulnerability is fixed in 2.13.0.

Threat Intelligence Overview

EPSS Score
0.0%
Top 88% exploitable
Threat Intel
1
1 sources
Exploit
POC
Public exploit code exists
Social Media
1
Sightings
Data Quality
7 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GHSA MSRC Vendor CIRCL GitHub

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC Yes
EPSS 0.0%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation
Poc
System Exposure· derived
Open
Automatable
Yes
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

46
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +26
PoC: +20
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.

More in Pyjwt

View all
CVE-2026-102266 CRITICAL POC
9.1 Sep 28

Forged HS256 JSON Web Tokens can be accepted as authentic by PyJWT (pip package PyJWT) versions 2.13.0 through 2.13.x wh

CVE-2026-102275 HIGH POC
8.2 Sep 28

Improper validation in PyJWT 2.1.0 through 2.14.0 allows an attacker who already holds a stolen sender-constrained (DPoP

CVE-2026-102274 HIGH POC
7.5 Sep 28

Denial of service in PyJWT 2.9.0 through 2.13.0: a single malformed RSA JWK embedded in a JWK Set aborts construction of

CVE-2026-101918 HIGH POC
7.5 Sep 28

Unauthenticated denial of service in the PyJWT Python library (versions 2.0.0a1 through 2.14.0) allows a remote attacker

CVE-2024-53861 HIGH POC
7.5 Nov 29

pyjwt is a JSON Web Token implementation in Python. Rated high severity (CVSS 7.5), this vulnerability is remotely explo

CVE-2026-48526 HIGH POC
7.4 May 28

Authentication bypass in PyJWT versions prior to 2.13.0 allows remote attackers to forge valid JSON Web Tokens by exploi

CVE-2026-103001 MEDIUM POC
6.5 Sep 30

Reuse of a caller-supplied options mapping in PyJWT 2.11.0 through 2.13.0 can silently leave registered-claim verificati

CVE-2026-102265 MEDIUM POC
5.3 Sep 28

Malformed JSON Web Token headers can cause an uncaught RecursionError in PyJWT 2.13.0 through versions before 2.14.0, re

CVE-2026-102268 CRITICAL
9.1 Sep 28

Signature forgery in PyJWT before 2.14.0 allows an attacker who knows a target's asymmetric public key to forge HMAC-aut

CVE-2026-102267 CRITICAL
9.1 Sep 28

JWKS trust-boundary bypass in PyJWT's PyJWKClient allows a configured trusted JWKS endpoint that returns an HTTP 3xx red

CVE-2026-48524 LOW POC
3.7 May 28

Unconstrained outbound JWKS requests in PyJWT's PyJWKClient.get_signing_key() allow unauthenticated remote attackers to

CVE-2026-101917 HIGH
7.5 Sep 28

Unauthenticated attackers can amplify outbound HTTP traffic from any application that validates JWTs with PyJWT's PyJWKC

Vendor StatusVendor

SUSE

Severity: Medium
Product Status
SUSE Linux Enterprise Desktop 15 SP7 Fixed
SUSE Linux Enterprise High Performance Computing 12 Fixed
SUSE Linux Enterprise High Performance Computing 15 SP7 Fixed
SUSE Linux Enterprise Micro 5.5 Fixed
SUSE Linux Enterprise Module for Basesystem 15 SP7 Fixed

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy