Description
PyJWT is a Python implementation of JSON Web Token standards. From 2.1.0 until 2.15.0, PyJWT OKPAlgorithm.from_jwk in jwt/algorithms.py is affected because private-JWK import path does not compare the public key derived from d with x. This occurs when an OKP private JWK supplies non-corresponding x and d components. As a result, identity derived from x can differ from operations performed with d. Consequently, if an integration also accepts private key parameters from a proof header without rejecting them, an attacker may use a stolen sender-constrained token without the legitimate private key. This issue is fixed in version 2.15.0.
Published: 2026-09-28
Score: 6.5 Medium
EPSS: < 1% Very Low
KEV: No
Impact: Key identity confusion leading to potential impersonation
Action: Apply Patch
AI Analysis

Impact

The vulnerability lies in PyJWT’s handling of OKP (Octet Key Pair) JSON Web Keys. The library’s private‑JWK import path does not confirm that the public key component (x) matches the derived key from the private component (d). This is a vulnerability governed by CWE‑345, CWE‑347, and CWE‑348, illustrating improper validation and authentication weaknesses. An attacker can supply a token with mismatched x and d values and, if the receiving application accepts the private‑key parameters from a header without rejecting them, the victim can perform operations as if it possessed the legitimate private key. This allows an attacker to use a stolen sender‑constrained token to impersonate the legitimate issuer and gain unauthorized access or perform restricted actions.

Affected Systems

The issue affects the PyJWT library from versions 2.1.0 through 2.14.x. The fix is included in release 2.15.0. Systems using any earlier releases and that parse OKP JWKs from incoming tokens are vulnerable.

Risk and Exploitability

The CVSS score is 6.5, indicating a moderate severity. EPSS score is reported as less than 1%, suggesting a very low probability of exploitation, and the vulnerability is not listed in CISA’s KEV catalog. Exploitation requires that the target system accepts private‑key parameters from a proof header and does not verify the key consistency, narrowing the attack surface to certain integrations or misconfigured services. With these prerequisites in place, an attacker could successfully forge tokens and impersonate the issuer, but broad remote exploitation is less likely.

Generated by OpenCVE AI on September 30, 2026 at 04:39 UTC.

Remediation

No solution or workaround provided in the CVE record.

OpenCVE Recommended Actions

  • Upgrade PyJWT to version 2.15.0 or later
  • Configure integrations to reject private‑key parameters in proof headers or explicitly validate that the public key matches the derived key from d
  • Audit existing JWK validation logic to ensure x and d consistency or apply the vendor patch if the library is still on an affected release

Generated by OpenCVE AI on September 30, 2026 at 04:39 UTC.

Tracking

Sign in to view the affected projects.

Advisories
Source ID Title
Github GHSA Github GHSA GHSA-x33g-cr3x-6449 PyJWT accepts inconsistent OKP x/d JWKs, causing public/private key identity confusion
History

Tue, 06 Oct 2026 18:30:00 +0000

Type Values Removed Values Added
First Time appeared Pyjwt Project
Pyjwt Project pyjwt
CPEs cpe:2.3:a:pyjwt_project:pyjwt:*:*:*:*:*:*:*:*
Vendors & Products Pyjwt Project
Pyjwt Project pyjwt

Tue, 29 Sep 2026 14:30:00 +0000

Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'no', 'Exploitation': 'poc', 'Technical Impact': 'partial'}, 'version': '2.0.3'}


Tue, 29 Sep 2026 13:15:00 +0000

Type Values Removed Values Added
Weaknesses CWE-347
References
Metrics threat_severity

None

threat_severity

Moderate


Mon, 28 Sep 2026 23:15:00 +0000

Type Values Removed Values Added
First Time appeared Jpadilla
Jpadilla pyjwt
Vendors & Products Jpadilla
Jpadilla pyjwt

Mon, 28 Sep 2026 21:00:00 +0000

Type Values Removed Values Added
Description PyJWT is a Python implementation of JSON Web Token standards. From 2.1.0 until 2.15.0, PyJWT OKPAlgorithm.from_jwk in jwt/algorithms.py is affected because private-JWK import path does not compare the public key derived from d with x. This occurs when an OKP private JWK supplies non-corresponding x and d components. As a result, identity derived from x can differ from operations performed with d. Consequently, if an integration also accepts private key parameters from a proof header without rejecting them, an attacker may use a stolen sender-constrained token without the legitimate private key. This issue is fixed in version 2.15.0.
Title PyJWT accepts inconsistent OKP x/d JWKs, causing public/private key identity confusion
Weaknesses CWE-345
CWE-348
References
Metrics cvssV3_1

{'score': 6.5, 'vector': 'CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:H/A:N'}


Subscriptions

Jpadilla Pyjwt
Pyjwt Project Pyjwt
cve-icon MITRE

Status: PUBLISHED

Assigner: GitHub_M

Published:

Updated: 2026-09-29T13:56:09.869Z

Reserved: 2026-09-28T20:11:16.658Z

Link: CVE-2026-102275

cve-icon Vulnrichment

Updated: 2026-09-29T13:55:46.936Z

cve-icon NVD

Status : Analyzed

Published: 2026-09-28T21:17:15.857

Modified: 2026-10-06T18:17:51.113

Link: CVE-2026-102275

cve-icon Redhat

Severity : Moderate

Publid Date: 2026-09-28T20:46:33Z

Links: CVE-2026-102275 - Bugzilla

cve-icon OpenCVE Enrichment

Updated: 2026-09-30T04:45:19Z

Weaknesses
  • CWE-345

    Insufficient Verification of Data Authenticity

  • CWE-347

    Improper Verification of Cryptographic Signature

  • CWE-348

    Use of Less Trusted Source