Skip to main content
View

Attack ChainAIDerived

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

  1. Access
    Identify public JWK-accepting endpoint (OIDC/ACME/DPoP)
  2. Delivery
    Craft JWK with oversized key_ops array
  3. Exploit
    Submit JWK to endpoint with no authentication
  4. Execution
    Trigger O(n²) duplicate scan in import_key()
  5. Persist
    Exhaust server CPU per request
  6. Impact
    Repeat 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.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
No patch listed yet 0.5% exploitation probability (EPSS)

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

Alert me

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

Vendor (redhat) PRIMARY 5.9 MEDIUM
AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H
vuln.today AI 5.9 MEDIUM

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.

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

Primary rating from Vendor (redhat).

CVSS VectorVendor: redhat

Attack Vector
Network
Attack Complexity
High
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
None
Integrity
None
Availability
High

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

EPSS Score
0.5%
Top 59% exploitable
Prevalence
Low
niche Python JOSE library, not universally deployed infrastructure
Data Quality
5 sources
Confidence: Medium
EUVD NVD CVE.org EPSS Vulnrichment Vendor GitHub

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 MEDIUM
CISA KEV No
Public POC No
EPSS 0.5%
Patch available No
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
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
Poc
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

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

Attack Technique

Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.

Affected Products (CPE)CVE.org

cpe:2.3:a:red_hat:red_hat_ansible_automation_platform_2:*:*:*:*:*:*:*:*
cpe:2.3:a:red_hat:red_hat_ansible_automation_platform_2:*:*:*:*:*:*:*:*
cpe:2.3:a:red_hat:red_hat_ansible_automation_platform_2:*:*:*:*:*:*:*:*
cpe:2.3:a:red_hat:red_hat_ansible_automation_platform_2:*:*:*:*:*:*:*:*
cpe:2.3:a:red_hat:red_hat_ansible_automation_platform_2:*:*:*:*:*:*:*:*
cpe:2.3:a:red_hat:red_hat_ansible_automation_platform_2:*:*:*:*:*:*:*:*
cpe:2.3:a:red_hat:red_hat_ansible_automation_platform_2:*:*:*:*:*:*:*:*
cpe:2.3:a:red_hat:red_hat_ansible_automation_platform_2:*:*:*:*:*:*:*:*
cpe:2.3:a:red_hat:red_hat_ansible_automation_platform_2:*:*:*:*:*:*:*:*
cpe:2.3:a:red_hat:red_hat_ansible_automation_platform_2:*:*:*:*:*:*:*:*
cpe:2.3:a:red_hat:red_hat_ansible_automation_platform_2:*:*:*:*:*:*:*:*
cpe:2.3:a:red_hat:red_hat_ansible_automation_platform_2:*:*:*:*:*:*:*:*
cpe:2.3:a:red_hat:red_hat_ansible_automation_platform_2:*:*:*:*:*:*:*:*
cpe:2.3:a:red_hat:red_hat_enterprise_linux_10:*:*:*:*:*:*:*:*
cpe:2.3:a:red_hat:red_hat_enterprise_linux_7:*:*:*:*:*:*:*:*
cpe:2.3:a:red_hat:red_hat_enterprise_linux_8:*:*:*:*:*:*:*:*
cpe:2.3:a:red_hat:red_hat_enterprise_linux_8:*:*:*:*:*:*:*:*
cpe:2.3:a:red_hat:red_hat_enterprise_linux_9:*:*:*:*:*:*:*:*
cpe:2.3:a:red_hat:red_hat_openshift_ai_(rhoai):*:*:*:*:*:*:*:*
cpe:2.3:a:red_hat:red_hat_openshift_ai_(rhoai):*:*:*:*:*:*:*:*
+ 15 more

Vendor 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

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