Skip to main content

python-jose CVE-2026-85394

| EUVDEUVD-2026-70671 CRITICAL
Improper Verification of Cryptographic Signature (CWE-347)
2026-09-03 VulnCheck GHSA-3qf3-8w2g-rqmx
9.3
CVSS 4.0 · Vendor: VulnCheck
View

Attack ChainAIDerived

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

  1. Access
    Obtain service public key from JWKS/cert
  2. Delivery
    DER-encode key as HMAC secret
  3. Exploit
    Forge HS256 JWT with elevated claims
  4. Execution
    Submit token to verification endpoint
  5. Persist
    python-jose accepts DER key, verifies token
  6. Impact
    Authentication bypass and impersonation

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A04:2025 - Cryptographic Failures
ASVS 5.0
V11 - Cryptography Signature verification
Exploitation Conditions

Exploitation requires the attacker to possess the service's asymmetric (RSA/EC) public key - normally obtainable since public keys are not secret - and requires the verifying application to call python-jose's decode/verify without explicitly restricting the allowed algorithms (i.e., HS256 is implicitly accepted alongside the asymmetric key). The forged secret must be the DER-encoded form of the public key lacking PEM armor or SSH prefixes, which is precisely what the incomplete fix still accepts. The primary limiting factor is algorithm pinning: applications that explicitly whitelist only asymmetric algorithms are not exploitable. No authentication or user interaction is required against a vulnerable configuration.

Impact

The CVSS 4.0 base of 9.3 (AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:N) reflects a network-reachable, unauthenticated integrity/confidentiality break with no availability impact, which is consistent with token forgery leading to authentication bypass and impersonation. Real-world risk is genuinely high but conditional: it requires that the target application (1) exposes or leaks its asymmetric public key - usually trivial, as public keys are meant to be shared - and (2) does not explicitly restrict verification algorithms, a common but not universal misconfiguration. No EPSS score, KEV listing, or public PoC was provided, so there is no evidence of active exploitation; the severity is driven by impact and the low barrier of the technique rather than confirmed in-the-wild use. Any operator running python-jose in a token-verification path where algorithms are unpinned should treat this as urgent and prioritize it well above its lack of KEV status would suggest, since exploitation is deterministic once the two conditions hold. The absence of a confirmed patched release for this specific incomplete-fix CVE increases urgency further.

Exploit ScenarioDerived

An attacker obtains the service's RSA/EC public key (from a JWKS endpoint, TLS certificate, or published documentation), DER-encodes it, and uses it as the HMAC secret to sign a JWT with alg set to HS256 and a payload granting elevated privileges (e.g., admin role or another user's subject). If the application verifies tokens without pinning algorithms, python-jose accepts the DER public key as an HMAC key and the forged token passes verification, yielding authentication bypass and impersonation. No public PoC was provided, but the technique is deterministic and well-understood for this vulnerability class.

Act Now Prioritize within 24-48h. Why: CRITICAL severity.
Patch available 0.2% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – Sep 03, 2026

Token forgery in python-jose through 3.5.0 lets an attacker who possesses the service's asymmetric public key mint valid HS256 (HMAC) JWTs, because the library's HMAC key initialization accepts DER-encoded public keys that lack PEM armor or SSH prefixes and never rejects them as asymmetric material. This is a classic JWT algorithm-confusion (RSA/EC-to-HMAC) attack that succeeds whenever the verifying application does not explicitly restrict the accepted algorithms, and it represents an incomplete fix for CVE-2024-33663. There is no public exploit identified at time of analysis, though the technique is well-documented and the same class of flaw has prior public tooling.

RemediationAI

No vendor-released patch identified at time of analysis for this specific incomplete-fix issue - versions through 3.5.0 are reported vulnerable, so upgrading beyond 3.4.0 (which fixed only the earlier variant) is not sufficient on its own; monitor https://github.com/mpdavis/python-jose/issues/414 and the VulnCheck advisory for a fixed release. The most effective compensating control is to always pin the accepted algorithms explicitly at verification time (e.g., pass algorithms=['RS256'] or the specific asymmetric algorithm to jwt.decode and never include HS* alongside asymmetric keys); this eliminates the confusion path entirely with essentially no downside for a service that only uses asymmetric signing. Additionally, keep verification and signing key material strictly typed so an asymmetric public key is never routed into an HMAC context, and where feasible migrate token verification to a maintained library such as PyJWT with strict algorithm enforcement. Treat the public key as attacker-known and do not rely on its secrecy as a control.

Affected VersionsENISA

python-jose 0 ≤3.5.0

Affected Packages

pypi python-jose fix: 3.4.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

python-jose (CPE cpe:2.3:a:mpdavis:python-jose) is a widely-used pure-Python implementation of JOSE (JWS/JWE/JWK/JWT) used to sign and verify JSON Web Tokens. The root cause is CWE-347 (Improper Verification of Cryptographic Signature) manifesting as algorithm confusion: when a caller verifies a token, python-jose derives the HMAC key from whatever key material is supplied. Earlier fixes (fixed in 3.4.0 per GHSA-6c5p-j8vq-pqhj, addressing OpenSSH/PEM-armored keys akin to CVE-2022-29217 and CVE-2024-33663) blocked recognizably-asymmetric encodings, but the native backend (jose/backends/native.py and jose/utils.py) still accepts a raw DER-encoded public key as an HMAC secret. Because a public key is by design non-secret, an attacker who reads it can compute HS256 = HMAC-SHA256(publicKey, token), and if the server calls decode without pinning algorithms to only the asymmetric family, the forged HS256 token verifies as authentic.

Know when Python 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 (VulnCheck) PRIMARY 9.3 CRITICAL
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N
vuln.today AI 9.1 CRITICAL

Network-reachable unauthenticated token forgery yields impersonation (I:H) and access to protected data (C:H) with no availability impact; AC:L because the required public key is normally obtainable, contingent on unpinned algorithms.

3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
4.0 AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N
SUSE 7.4 HIGH
AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N
Red Hat 7.4 HIGH

Primary rating from Vendor (VulnCheck).

CVSS VectorVendor: VulnCheck

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
None
User Interaction
None
Vulnerable system: Confidentiality
High
Vulnerable system: Integrity
High
Vulnerable system: Availability
None
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

DescriptionCVE.org

python-jose through 3.5.0 fails to properly validate asymmetric keys in HMAC initialization, accepting DER-encoded public keys that lack PEM armor or SSH prefixes. Attackers holding the service's public key can forge HS256 tokens that pass verification when algorithms are not explicitly restricted. This is an incomplete fix for CVE-2024-33663.

Blast Radius

ecosystem impact
† from your stack dependencies † transitive graph · vuln.today resolves 4-path depth
  • 25 pypi packages depend on python-jose (22 direct, 3 indirect)

Ecosystem-wide dependent count for version 3.4.0.

Executive ViewAI

Why It Matters

python-jose library through version 3.5.0 permits JWT token forgery via algorithm confusion, allowing attackers to create valid authentication tokens that bypass signature verification. Any organization running services that depend on python-jose without explicit algorithm restrictions faces complete authentication compromise-attackers can impersonate users and services, gaining unauthorized access to APIs and backend systems with high likelihood of undetected exploitation.

Business Impact: Severe
Compensating Controls

No vendor-released patch identified at time of analysis. Deploy these immediate controls: (1) Configure all JWT verification libraries and frameworks to use algorithm whitelisting, explicitly permitting only RSA or EC signatures while rejecting HMAC; (2) Implement hardcoded verification keys in application code to prevent key confusion attacks; (3) Deploy JWT token validation monitoring to detect and alert on HMAC token attempts or unexpected algorithm usage; (4) Require additional authorization checks (API keys, rate limits, contextual validation) for sensitive operations to limit blast radius if tokens are forged; (5) Enable detailed JWT audit logging to support forensic investigation of any potential exploitation.

Threat Intelligence Overview

EPSS Score
0.2%
Top 87% exploitable
Prevalence
Medium
popular but not dominant Python JWT/JOSE library (PyJWT more common)
Threat Intel
1
1 source
Social Media
3
Sightings
Data Quality
7 sources
Confidence: High

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 CRITICAL
CISA KEV No
Public POC No
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
CRITICAL severity
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
Out-of-Cycle
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
Yes
Human Impact
Very High

Priority Score

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

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

More in Python

View all
CVE-2025-24016 CRITICAL POC
9.9 Feb 10

Wazuh SIEM platform versions 4.4.0 through 4.9.0 contain an unsafe deserialization vulnerability in the DistributedAPI t

CVE-2025-27520 CRITICAL POC
9.8 Apr 04

BentoML version 1.4.2 and earlier contains an unauthenticated remote code execution vulnerability through insecure deser

CVE-2025-2945 CRITICAL POC
9.9 Apr 03

pgAdmin 4 contains critical remote code execution vulnerabilities in the Query Tool download and Cloud Deployment endpoi

CVE-2013-5093 MEDIUM POC
6.8 Sep 27

The renderLocalView function in render/views.py in graphite-web in Graphite 0.9.5 through 0.9.10 uses the pickle Python

CVE-2025-32375 CRITICAL POC
9.8 Apr 09

BentoML is a Python library for building online serving systems optimized for AI apps and model inference. Rated critica

CVE-2014-0224 HIGH POC
7.4 Jun 05

OpenSSL before 0.9.8za, 1.0.0 before 1.0.0m, and 1.0.1 before 1.0.1h does not properly restrict processing of ChangeCiph

CVE-2024-21644 HIGH POC
7.5 Jan 08

pyLoad download manager version prior to 0.5.0b3.dev77 exposes the Flask SECRET_KEY through an unauthenticated endpoint.

CVE-2026-33017 CRITICAL POC
9.3 Mar 17

Langflow (a visual LLM pipeline builder) contains a critical unauthenticated code execution vulnerability (CVE-2026-3301

CVE-2017-9462 HIGH POC
8.8 Jun 06

In Mercurial before 4.1.3, "hg serve --stdio" allows remote authenticated users to launch the Python debugger, and conse

CVE-2026-49869 CRITICAL POC
10.0 Jun 26

Unauthenticated remote code execution affects Kestra OSS (the open-source event-driven orchestration platform) prior to

CVE-2026-39987 CRITICAL POC
9.3 Apr 08

Unauthenticated remote code execution in Marimo ≤0.20.4 allows attackers to execute arbitrary system commands via the `/

CVE-2024-21645 MEDIUM POC
5.3 Jan 08

pyLoad is the free and open-source Download Manager written in pure Python. Rated medium severity (CVSS 5.3), this vulne

Vendor StatusVendor

SUSE

Severity: Important
Product Status
SUSE Linux Enterprise Module for Package Hub 15 SP7 Affected
SUSE Linux Enterprise Server 16.0 Affected
SUSE Linux Enterprise Server 16.1 Affected
SUSE Linux Enterprise Server for SAP applications 16.0 Affected
SUSE Linux Enterprise Server for SAP applications 16.1 Affected

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