Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessIdentify public JWK-accepting endpoint (OIDC/ACME/DPoP)
-
DeliveryCraft JWK with oversized key_ops array
-
ExploitSubmit JWK to endpoint with no authentication
-
ExecutionTrigger O(n²) duplicate scan in import_key()
-
PersistExhaust server CPU per request
-
ImpactRepeat to sustain denial of service
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V2 - Validation and Business Logic Algorithmic complexity limits
|
| Exploitation Conditions | Exploitation requires that the target application exposes a code path where an unauthenticated remote party can supply a JWK (or JWK Set) that is passed to jwcrypto's JWK.import_key(). Concrete exposure surfaces include: OIDC dynamic client registration endpoints where the registering client submits its own public key; ECDH-ES key agreement parsing where the ephemeral public key is included in attacker-controlled input; DPoP proof header parsing where the client-provided public key is extracted and imported; and ACME account key registration where the client's JWK is accepted before authentication. Applications that only import keys from local configuration files, HSMs, or pre-registered trusted sources are not exploitable. Authentication is not required (PR:N) when the vulnerable path is exposed via a public API, but the AC:H vector correctly reflects the deployment-context requirement that such a path must exist and accept external JWK material without prior input sanitisation. |
| Impact | The provided CVSS 3.1 vector (AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H, score 5.9) is reasonable and I assess it as accurate. AC:H is the key moderating factor: the attack requires an application to expose a code path that accepts externally-supplied JWK material and feeds it to import_key() without sanitisation - not all deployments of jwcrypto do this, but those that enable OIDC dynamic client registration, ACME key registration, or DPoP token processing do so inherently. No KEV listing and no public exploit have been identified, which is consistent with the Medium CVSS score. No EPSS data was provided in the input. Real-world risk is deployment-context dependent: an OIDC provider or ACME CA built on jwcrypto is directly exposed with no authentication barrier, while a service that only imports keys from configuration files or trusted internal sources has no practical exposure. The impact is strictly availability; there is no confidentiality or integrity dimension. |
| Exploit ScenarioDerived | An attacker targeting an OIDC provider that supports dynamic client registration (RFC 7591) submits a registration request containing a JWK with key_ops populated with ten thousand identical string entries. The provider's library calls import_key() on the submitted JWK, triggering approximately 100 million pairwise comparisons; at reasonable CPU costs this consumes several seconds per request. By sending a modest stream of such requests - well within typical rate limits - the attacker saturates server CPU and denies service to legitimate authentication flows. No public exploit code is known, but the attack requires only a crafted JSON payload and is trivially constructible from the description. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 16, 2026
CPU exhaustion denial of service in jwcrypto's JWK.import_key() allows a remote unauthenticated attacker to supply a crafted JWK with an arbitrarily large key_ops array and trigger O(n²) duplicate-detection work, consuming CPU proportional to the square of the array length. Any Python application that passes externally-supplied JWK material to this API - via ECDH-ES key agreement, OIDC dynamic client registration, DPoP proof parsing, or ACME account key registration - is vulnerable. No public exploit or active exploitation (CISA KEV) has been identified at time of analysis; CVSS rates this at 5.9 (Medium) with AC:H reflecting the requirement that attacker-controlled key material must reach the vulnerable code path.
RemediationAI
Upgrade jwcrypto to the patched version referenced in GHSA-pwgw-f7xr-863h (https://github.com/latchset/jwcrypto/security/advisories/GHSA-pwgw-f7xr-863h); the exact fixed version number should be confirmed from that advisory, as it was not specified in the available input data. Red Hat customers should apply errata for the affected platform (Ansible Automation Platform 2, RHEL 7/8/9/10, RHOAI, RHOSP 16.2/17.1) via the advisory at https://access.redhat.com/security/cve/CVE-2026-92091. Where patching is not immediately possible, the most effective compensating control is to enforce a maximum key_ops array length in application-layer input validation before passing JWK material to import_key() - even a cap of 20 entries eliminates the algorithmic amplification entirely, at no meaningful trade-off for legitimate usage. Additionally, rate-limit public key-import endpoints (OIDC dynamic registration, ACME, DPoP proof endpoints) to reduce per-attacker request throughput; this limits but does not eliminate risk. Applications that only import keys from trusted, operator-controlled sources require no immediate action.
Affects your stack
Find out whether the stacks and servers you run are on an affected version.
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
jwcrypto is a Python implementation of the JOSE family of standards (JWK, JWS, JWE, JWT), maintained by the latchset project. The JWK specification (RFC 7517) defines an optional key_ops member as an array of permitted cryptographic operations (e.g., 'sign', 'verify', 'encrypt'). RFC 7517 discourages duplicate values but imposes no maximum array length. The jwcrypto import_key() function validates for duplicates using an algorithm with O(n²) time complexity - most likely an unoptimised nested-loop or pairwise comparison - and performs this over an unbounded input. CWE-407 (Insufficient Visual Distinction of Homoglyphs / Inefficient Algorithmic Complexity) correctly identifies the root cause: the absence of both an input-length cap and a linear-time uniqueness check (e.g., a set membership test) transforms attacker-controlled input size directly into disproportionate CPU consumption. Red Hat ships jwcrypto as a transitive dependency across Ansible Automation Platform 2, Red Hat Enterprise Linux 7/8/9/10, OpenShift AI (RHOAI), and OpenStack Platform 16.2 and 17.1.
Know when Jwcrypto 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
AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H
Network-reachable but AC:H because attacker-controlled JWK must reach import_key() via an exposed public endpoint; no confidentiality or integrity impact, only CPU-exhaustion availability loss.
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L
Primary rating from Vendor (redhat).
CVSS VectorVendor: redhat
DescriptionCVE.org
A flaw was found in jwcrypto. The JWK.import_key() function validates the key_ops JWK member for duplicate values using an algorithm with O(n^2) time complexity, and the length of key_ops is not bounded. A remote, unauthenticated attacker can supply a JWK with a large key_ops array to an application that passes attacker-controlled key material to a public key-import API (reachable via ECDH-ES key agreement, OIDC dynamic client registration, DPoP, or ACME account key registration, among others) to consume excessive CPU time, resulting in a denial of service.
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
Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.
Affected Products (CPE)CVE.org
JWCrypto implements JWK, JWS, and JWE specifications using python-cryptography. Rated medium severity (CVSS 6.8), this v
The _Rsa15 class in the RSA 1.5 algorithm implementation in jwa.py in jwcrypto before 0.3.2 lacks the Random Filling pro
Memory exhaustion in JWCrypto before 1.5.7 allows unauthenticated remote attackers to cause denial of service on memory-
Same weakness CWE-407 – Inefficient Algorithmic Complexity
View allSame technique Denial Of Service
View allVendor StatusVendor
SUSE
Severity: Moderate| Product | Status |
|---|---|
| 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 |
EUVD-2026-80228
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB