Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessIdentify app using python-jose HS256/384/512
-
DeliveryDetermine verification key resolves to empty
-
ExploitForge JWT with arbitrary claims
-
ExecutionHMAC-sign token with zero-length key
-
PersistSubmit to jwt.decode endpoint
-
ImpactAuthentication bypassed, act as forged identity
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A04:2025 - Cryptographic Failures
ASVS 5.0
V11 - Cryptography Signature verification
|
| Exploitation Conditions | Exploitation requires that the application's HS256/HS384/HS512 verification key actually resolves to an empty/zero-length HMAC secret - for example an oct JWK with an empty 'k' value, or an HMACKey/CryptographyHMACKey constructed from a zero-length secret. This is the AT:P (Attack Requirements: Present) condition in the CVSS 4.0 vector: against such a deployment, a remote unauthenticated attacker (PR:N) can forge tokens with arbitrary claims that jwt.decode accepts. The principal limiting factor is that correctly configured deployments supplying a non-empty, properly sourced HMAC secret are not exploitable; the flaw depends on a key-resolution/misconfiguration path yielding an empty key rather than on any default network-facing behavior. |
| Impact | Signals are moderately strong but not uniform. The CVSS 4.0 base score of 9.1 (AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:N) and the vuln.today 'act_now' decision label, combined with reporting by VulnCheck, argue for prompt remediation. However, the vector itself tempers raw severity: AT:P (Attack Requirements: Present) encodes the fact that exploitation is conditional - the application's HMAC verification key must actually resolve to an empty/zero-length value, which is not the case for correctly configured deployments. No CISA KEV listing is present in the input, so this is not confirmed as actively exploited; per available data, no public exploit code is identified (the references are a bug-tracker issue, two source files, and the VulnCheck advisory, none flagged as working PoC/exploit code). No EPSS score was supplied, so widespread-exploitation probability cannot be quantified here. Net: this is a genuine authentication-bypass priority for any deployment whose HS256/HS384/HS512 key can resolve to empty (the signature check is effectively void against a known/empty secret, allowing forged tokens), but the AT:P precondition means it is not an unconditional network-unauthenticated compromise of every default install. Note the input provides only a CVSS 4.0 vector - no 3.1 vector - so 3.1-based tooling comparisons require the independently assessed vector below. |
| Exploit ScenarioDerived | An application validates incoming JWTs with python-jose using an HS256 key sourced from an oct JWK whose 'k' value is empty (or otherwise resolves to a zero-length secret). A remote, unauthenticated attacker crafts a JWT with arbitrary claims (e.g., elevated roles or another user's identity), HMAC-signs it with the empty key, and submits it; jwt.decode accepts the forged token, bypassing authentication. No public working exploit is identified in the provided data, and the attack only succeeds where the verification key actually resolves to empty. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Nov 02, 2026
Authentication bypass in python-jose through 3.5.0 allows a remote unauthenticated attacker (CVSS vector PR:N) to forge HS256/HS384/HS512 JSON Web Tokens with arbitrary claims that jwt.decode will accept, because the library's HMACKey and CryptographyHMACKey classes accept zero-length HMAC secrets. The flaw is only reachable in deployments where the application's HS-family verification key actually resolves to an empty value, such as an oct JWK whose 'k' member is empty - the AT:P attack-requirement in the CVSS 4.0 vector and the AC:H rating in the independently assessed CVSS 3.1 vector. Correctly configured applications that supply a non-empty, properly sourced HMAC secret are not exploitable; no public exploit code was identified at time of analysis, and the vendor issue tracker (mpdavis/python-jose#398) is the coordination point.
RemediationAI
No vendor-released patch or fixed version is identified in the available data - the supplied references point to the upstream issue (https://github.com/mpdavis/python-jose/issues/398) and to the 3.5.0 backend sources rather than to a patched release, so track that issue for a version bump before deploying. Until a fix ships, the effective control is to guarantee the HMAC verification key is never empty: validate at startup and at key-resolution time that any secret used for HS256/HS384/HS512 is non-empty and meets a minimum length, and reject oct JWKs whose 'k' member is absent, null or empty before they reach jwt.decode - the trade-off is that a misconfigured or legacy JWKS will start failing authentication loudly instead of silently accepting forged tokens. Where the application does not require symmetric algorithms, pin the accepted algorithm set to asymmetric ones (RS/ES/PS) with strict alg-to-key-type binding and reject 'none', which removes the empty-HMAC-key path entirely but will reject legitimate HS-signed clients. Rotating any HMAC secret that may have been sourced from an empty JWK value is advisable for deployments matching the AT:P condition, since forged tokens may already be indistinguishable from valid ones.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
python-jose is a Python implementation of JSON Object Signing and Encryption (JOSE) supporting JWS, JWE, JWK and JWT. CWE-347 (Improper Verification of Cryptographic Signature) is the root-cause class here: the HMAC key classes in jose/backends/native.py (HMACKey) and jose/backends/cryptography_backend.py (CryptographyHMACKey) do not reject a zero-length secret, so an empty key is accepted as a valid signing/verification key. HMAC (HS256/HS384/HS512) is symmetric - the same secret both signs and verifies - and a zero-length key is trivially known to an attacker, so any token the attacker signs with the empty key will validate. The practical entry point is key resolution from a JWK set: an oct JWK carrying an empty 'k' member resolves to an empty secret, after which jwt.decode accepts attacker-authored tokens with arbitrary claims (identity, role, scope). The supplied evidence does not describe further trigger mechanics; what is confirmed is the empty-key acceptance path, and what is unverified is which specific key-resolution configurations in downstream applications yield an empty value. The independent assessment's AC:H / AT:P characterisation follows from the fact that exploitation depends on that key-resolution or misconfiguration path rather than on any default network-facing behaviour of the library.
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:P/PR:N/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N
Remote and unauthenticated (AV:N/PR:N/UI:N), but AC:H because success depends on the verification key resolving to empty; token forgery breaks auth, giving C:H/I:H and A:N.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
DescriptionCVE.org
python-jose through 3.5.0 contains an authentication bypass vulnerability that allows unauthenticated attackers to forge JWTs because HMACKey and CryptographyHMACKey accept zero-length HMAC secrets. When an application's HS256/HS384/HS512 verification key resolves to empty, such as an oct JWK with empty k, attackers can forge tokens with arbitrary claims that jwt.decode accepts.
Articles & Coverage 1
Executive ViewAI
A critical authentication bypass in python-jose (through 3.5.0) allows remote attackers to forge valid JWTs under specific misconfigurations, potentially granting unauthorized access to systems and data. Leadership should prioritize verification of JWT key configurations and plan for dependency updates, as exploitation could lead to data breaches and compliance violations.
No vendor-released patch identified at time of analysis. As interim mitigation, ensure all HS256/HS384/HS512 verification keys are non-empty and derived from secure sources; enforce key length and format validation; monitor authentication logs for forged tokens; and restrict JWT acceptance to expected algorithms.
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
Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.
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
EUVD-2026-115219
GHSA-7jv8-hwmh-86qc
NVD
CVE.org
EPSS
Exploit-DB