LiveActive security incident?Get immediate response
CVE Record

CVE-2026-48522: PyJWKClient: missing scheme allowlist enables SSRF + token forgery via file://, ftp://, data: schemes

PyJWT is a JSON Web Token implementation in Python. Prior to 2.13.0, PyJWKClient passes its uri argument directly to urllib.request.urlopen() which uses Python stdlib's default OpenerDirector registering HTTPHandler, HTTPSHandler, FTPHandler, FileHandler, and DataHandler. There is currently no documented option to restrict which schemes PyJWKClient will fetch. If an application's jku URL ingestion path accepts attacker-influenced URLs (e.g., from JWT header, configuration file, OAuth flow parameter), the attacker can cause PyJWKClient to read arbitrary local files via file:// (SSRF on local filesystem), cause PyJWKClient to attempt FTP / data-URI fetches (broader SSRF surface), or forge tokens that PyJWT verifies as valid. The library does not directly return non-HTTP(S) URI contents to the attacker; the chained "plant a JWKS to forge tokens" scenario described in the original report requires additional application-layer flaws (attacker write access to a filesystem path, untrusted jku derivation) that this fix does not address. This vulnerability is fixed in 2.13.0.

MediumCVSS 4.2Not KEV-listedUpdated
Glexia's TakeAutomated analysismoderate

Security readout for executives and security teams

Plain-English summary

PyJWT before 2.13.0 can fetch JWKS URLs through PyJWKClient using unsafe URI schemes, not just HTTP(S). Business risk is mainly for applications that let untrusted input influence JWKS or jku URLs. Impact can include limited local file access behavior, broader SSRF exposure, and possible token forgery when additional application flaws are present.

Executive priority

Treat this as a targeted authentication-stack fix, not a broad emergency. Prioritize internet-facing services and identity flows that process third-party JWTs or dynamically resolve JWKS URLs. Upgrade promptly because authentication trust decisions are affected, even though exploitation appears conditional.

Technical view

PyJWKClient passed its uri directly to urllib.request.urlopen(), inheriting handlers for HTTP, HTTPS, FTP, file, and data schemes. Without a scheme allowlist, attacker-influenced JWKS URL selection can trigger non-HTTP(S) fetches. The reported token-forgery chain requires extra application-layer weaknesses beyond the library issue.

Likely exposure

Exposure is limited to Python applications using PyJWT PyJWKClient versions before 2.13.0 where JWKS or jku URL selection can be influenced by attackers through JWT headers, configuration, OAuth parameters, or similar flows.

Exploitation context

The source bundle does not report active exploitation, and KEV is false. Exploitation is not automatic: an attacker needs influence over the PyJWKClient URI, and stronger outcomes require separate application flaws such as untrusted jku derivation or attacker-controlled JWKS placement.

Researcher notes

The important boundary is application-controlled versus attacker-influenced URI selection. The library issue expands URI handling through urllib defaults; it does not directly return fetched non-HTTP(S) content to attackers. Token forgery depends on additional weaknesses not fixed solely by this advisory.

Mitigation direction

  • Upgrade PyJWT to version 2.13.0 or later.
  • Restrict JWKS and jku sources to trusted HTTPS URLs only.
  • Reject file, ftp, data, and other unexpected URI schemes in application logic.
  • Review OAuth and JWT configuration paths for attacker-controlled JWKS URL input.
  • Check the GitHub advisory for any vendor-specific guidance updates.

Validation and detection

  • Inventory Python services using PyJWT and PyJWKClient.
  • Confirm deployed PyJWT versions are 2.13.0 or later.
  • Review code paths deriving PyJWKClient URIs from JWT headers or request parameters.
  • Verify application validation rejects non-HTTPS JWKS URL schemes.
  • Check authentication logs for unusual JWKS URL sources if logging exists.
Prepared
Confidence
high
Sources
3

Generated from the cited source records. This long-tail analysis has not been individually reviewed by a named human.

Potential ATT&CK relevance

Conservative CVE-to-ATT&CK context

These mappings and lookup hints may be relevant to the vulnerability behavior, CWE, affected product, or exposure path. Glexia-inferred context is not an official MITRE, ATT&CK, CWE, or CVE Program mapping.

ATT&CK lookup starting points

Use these exact CWE pages and searches to review the Glexia ATT&CK library from this CVE's weakness and description context.

cwe · low confidence lookup

CWE-441: Exact CWE lookup

Use the exact CWE identifier as the starting point before reviewing related ATT&CK behavior. Open the exact CWE lookup page first, then review the ATT&CK searches from that MITRE weakness context. This is a Glexia lookup hint, not an official ATT&CK mapping.

Open ATT&CK lookup
cwe · medium confidence lookup

CWE-918: Information exposure and cloud metadata lookup

Information exposure and SSRF weaknesses can make discovery, cloud metadata, and credential material review relevant. Open the exact CWE lookup page first, then review the ATT&CK searches from that MITRE weakness context. This is a Glexia lookup hint, not an official ATT&CK mapping.

Open ATT&CK lookup
description · low confidence lookup

Credential and access behavior lookup

The CVE wording references authentication or credential exposure, so valid-account and credential-access review may help. This is a Glexia inferred lookup path, not an official MITRE, ATT&CK, or CVE Program mapping.

Open ATT&CK lookup
description · low confidence lookup

Cloud metadata behavior lookup

The CVE wording references SSRF or metadata access, so cloud discovery and credential material review may help. This is a Glexia inferred lookup path, not an official MITRE, ATT&CK, or CVE Program mapping.

Open ATT&CK lookup
cve · low confidence lookup

CVE-2026-48522 mapping review

Open the CVE-to-ATT&CK bridge for reviewed, inferred, or future official mappings tied to this CVE.

Open ATT&CK lookup
Vulnerability profileCVE Program record
Severity
Medium
CVSS
4.2 (3.1)
Known Exploited
No
Published

Vector: CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:L/I:L/A:N

Official CVE source material

CNA and ADP enrichment extracted from CVE v5

These fields come from the CVE record and ADP containers, not from Glexia's Take. They preserve time-varying source decisions such as CISA SSVC, KEV status, CVSS metrics, and provider references.

1CVSS vectors
3Timeline events
1ADP providers
2Source links

SSVC decision data

CISA-ADPCISA Coordinator
Timestamp
Version
2.0.3
Exploitation: pocAutomatable: noTechnical Impact: partial

CVSS vector scores

1 official score

We collect every scored CVSS vector available in the official CNA and ADP containers. When more than one version is present, the table keeps the source vectors side by side instead of collapsing them into the highest score.

ScoreVersionSeverityVectorExploitImpactSource
4.2CVSS 3.1MediumCVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:L/I:L/A:N1.62.5GitHub_M

Vulnerability scoring details

Base CVSS 3.1 score

4.2Medium
CVSS 3.1 vector shape for CVE-2026-48522Attack VectorAttack ComplexityPrivileges RequiredUser InteractionScopeConfidentiality ImpactIntegrity ImpactAvailability Impact

Vector: CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:L/I:L/A:N

Attack Vector
NetworkAdjacentLocalPhysical
Attack Complexity
LowHigh
Privileges Required
NoneLowHigh
User Interaction
NoneRequired
Scope
ChangedUnchanged
Confidentiality Impact
HighLowNone
Integrity Impact
HighLowNone
Availability Impact
HighLowNone

Vulnerability timeline

Timeline events are normalized from CVE metadata, CNA source timelines, ADP timelines, and KEV metadata when present.

  1. CVE reservedCVE Program

    The CVE ID was reserved by the assigning CNA.

  2. CVE publishedCVE Program

    The CVE record was published.

  3. CVE updatedCVE Program

    The CVE record metadata indicates this as the latest update time.

ADP provider summaries

CISA-ADPCISA ADP Vulnrichment
other:ssvc

Source materials

Affected products

Products and packages named in the record

VendorProductVersion / packageStatus
jpadillapyjwt< 2.13.0Listed
Weakness

CWE details

CWE links open Glexia weakness intelligence pages with official CWE context, developer remediation guidance, and related CVE mappings.