Skip to main content

python-jose CVE-2026-120459

| EUVDEUVD-2026-115219 CRITICAL
Improper Verification of Cryptographic Signature (CWE-347)
2026-11-02 VulnCheck GHSA-7jv8-hwmh-86qc
9.1
CVSS 4.0 · Vendor: VulnCheck
View

Attack ChainAIDerived

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

  1. Access
    Identify app using python-jose HS256/384/512
  2. Delivery
    Determine verification key resolves to empty
  3. Exploit
    Forge JWT with arbitrary claims
  4. Execution
    HMAC-sign token with zero-length key
  5. Persist
    Submit to jwt.decode endpoint
  6. Impact
    Authentication 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.

Act Now Prioritize within 24-48h. Why: CRITICAL severity.
No patch listed yet 0.3% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – 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

python-jose 0 ≤3.5.0

Affected Packages

euvd python_jose no fix

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

Vendor (VulnCheck) PRIMARY 9.1 CRITICAL
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
vuln.today AI 7.4 HIGH

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.

3.1 AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N
4.0 AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (VulnCheck).

CVSS VectorVendor: VulnCheck

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
Present
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 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.

Executive ViewAI

Why It Matters

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.

Business Impact: High
Compensating Controls

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

EPSS Score
0.3%
Top 83% exploitable
Prevalence
Medium
popular Python JWT library, common but not universally deployed
Social Media
1
Sightings
Data Quality
4 sources
Confidence: Medium

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.3%
Patch available No
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
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
Yes
Human Impact
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

Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.

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

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