Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain service public key from JWKS/cert
-
DeliveryDER-encode key as HMAC secret
-
ExploitForge HS256 JWT with elevated claims
-
ExecutionSubmit token to verification endpoint
-
Persistpython-jose accepts DER key, verifies token
-
ImpactAuthentication 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. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – 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
Affected Packages
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
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
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.
AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
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- 25 pypi packages depend on python-jose (22 direct, 3 indirect)
Ecosystem-wide dependent count for version 3.4.0.
Articles & Coverage 1
Executive ViewAI
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.
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
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.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
Wazuh SIEM platform versions 4.4.0 through 4.9.0 contain an unsafe deserialization vulnerability in the DistributedAPI t
BentoML version 1.4.2 and earlier contains an unauthenticated remote code execution vulnerability through insecure deser
pgAdmin 4 contains critical remote code execution vulnerabilities in the Query Tool download and Cloud Deployment endpoi
The renderLocalView function in render/views.py in graphite-web in Graphite 0.9.5 through 0.9.10 uses the pickle Python
BentoML is a Python library for building online serving systems optimized for AI apps and model inference. Rated critica
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
pyLoad download manager version prior to 0.5.0b3.dev77 exposes the Flask SECRET_KEY through an unauthenticated endpoint.
Langflow (a visual LLM pipeline builder) contains a critical unauthenticated code execution vulnerability (CVE-2026-3301
In Mercurial before 4.1.3, "hg serve --stdio" allows remote authenticated users to launch the Python debugger, and conse
Unauthenticated remote code execution affects Kestra OSS (the open-source event-driven orchestration platform) prior to
Unauthenticated remote code execution in Marimo ≤0.20.4 allows attackers to execute arbitrary system commands via the `/
pyLoad is the free and open-source Download Manager written in pure Python. Rated medium severity (CVSS 5.3), this vulne
Same technique Information Disclosure
View allVendor 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 |
| openSUSE Leap 16.0 | Affected |
| openSUSE Leap 15.6 | Affected |
EUVD-2026-70671
GHSA-3qf3-8w2g-rqmx
NVD
CVE.org
EPSS
VulDB
Exploit-DB