Skip to main content

erlang-jose CVE-2026-65631

| EUVDEUVD-2026-110309 MEDIUM
Inefficient Algorithmic Complexity (CWE-407)
2026-10-26 EEF
6.9
CVSS 4.0 · Vendor: EEF
View

Attack ChainAIDerived

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

  1. Access
    Send crafted RSA JWK (n,e,d, no CRT params) to from_binary/from_map
  2. Delivery
    Omitted CRT routes key into convert_sfm_to_crt prime-recovery
  3. Exploit
    Factoring loop runs modular exponentiation until 1s watchdog kills worker
  4. Execution
    Flood many concurrent tiny requests
  5. Impact
    Saturate all BEAM schedulers and deny service

Vulnerability Assessment

Weakness
CWE
ASVS 5.0
V2 - Validation and Business Logic Algorithmic complexity limits
Exploitation Conditions

The vulnerable path is reached only when an application parses an UNTRUSTED JWK through the public jose_jwk:from_binary/1 or jose_jwk:from_map/1 APIs (or Elixir JOSE.JWK.from_binary/1 / from_map/1) - for example accepting a client-supplied key or a JWK Set over an HTTP boundary. The triggering input is specifically an RSA private key that supplies d, e, and n but omits ALL CRT parameters (p, q, dp, dq, qi); this exact combination routes from_map_rsa_private_key/2 into convert_sfm_to_crt/1, and the three integers are read from base64url and never validated as a real RSA key (a prime modulus makes the factoring search never succeed). No credentials, no valid RSA key, and no special configuration are required. LIMITING FACTORS: the application must actually expose these parsing APIs to attacker-controlled input (a service that never parses untrusted private RSA JWKs is not reachable); and an internal 1-second watchdog caps each single request, so sustained denial of service requires flooding many concurrent requests rather than one.

Impact

Signals are consistent in pointing to a moderate, availability-only issue rather than a top-tier emergency. The vendor CVSS 4.0 score is 6.9 (Medium) with VA:H but VC:N/VI:N - pure CPU-exhaustion DoS, no confidentiality or integrity impact. EPSS is low (0.24%, 14th percentile) and the CVE is NOT in CISA KEV, indicating no evidence of active or widespread exploitation. However, a working proof-of-concept exploit script is published in the vendor GHSA advisory with verified logs showing ~1009 ms of CPU burned by a single 211-byte request, so weaponization is trivial and already demonstrated - do not treat POC availability as equivalent to active exploitation. The vuln.today decision label is 'this_month', aligning with a prompt-but-not-crisis posture. A key CONFLICT: the vendor CVSS vector specifies AV:L (local), yet the description and advisory explicitly describe an unauthenticated REMOTE attacker submitting a crafted JWK over an HTTP trust boundary (e.g., a client-supplied key or JWK Set) - the local vector appears to understate reach and should be verified; this analysis independently assesses the vector as AV:N. Net: a genuine, easily-exploitable DoS worth patching this cycle for any service parsing untrusted JWKs, but not a data-breach-grade, drop-everything event.

Exploit ScenarioDerived

An application exposes an endpoint that parses client-supplied or federation JWKs (e.g., a JWK Set) via JOSE.JWK.from_binary/1 or from_map/1. An unauthenticated attacker submits a few-hundred-byte RSA JWK containing n, e, and d but no CRT parameters, where n is a prime, forcing the library into a never-terminating prime-recovery factoring loop that consumes nearly a full CPU-second before a 1-second watchdog kills the worker. By flooding such tiny requests the attacker pins every BEAM scheduler at 100% and denies service to legitimate traffic; a public, verified PoC script for the amplification is included in the vendor advisory.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.2% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – Oct 28, 2026

CPU-exhaustion denial of service in the erlang-jose library (versions 1.7.7 through 1.11.12) lets remote attackers who can get an application to parse an untrusted JWK pin BEAM schedulers by submitting a private RSA key that carries only d, e and n and omits every CRT parameter. Parsing such a key drives an internal prime-recovery loop that performs a modular exponentiation over the attacker-supplied modulus on every iteration; when the modulus is itself prime the search can never succeed and burns work until a one-second watchdog kills the worker, so roughly 211 bytes of input costs about one CPU-second. The advisory ships a public proof-of-concept script that was verified end-to-end to reach that watchdog, no credentials or valid RSA key are required, and sustained denial of service needs a flood of concurrent requests because the watchdog bounds each individual parse; EPSS is low (0.24%, 14th percentile) and there is no CISA KEV entry, consistent with a moderate, availability-only issue rather than a top-tier emergency.

RemediationAI

Vendor-released patch: 1.11.13. Version 1.11.13 (commit bfd336c0062bff93e65d08c22361897e96afd956, https://github.com/potatosalad/erlang-jose/commit/bfd336c0062bff93e65d08c22361897e96afd956) bounds the recovery path: moduli above 8192 bits are not searched at all, recovery runs a limited number of randomized trials under a work budget with a deadline checked before each expensive operation, and recovered factors are validated against the supplied exponents. Trade-off to plan for: after upgrading, keys that are larger than 8192 bits or that exhaust the recovery budget must include the CRT parameters (p, q, dp, dq, qi) to be imported, so legacy CRT-less private JWKs may need to be re-exported. If upgrading immediately is not possible, the vendor's documented workaround is to avoid parsing private RSA JWKs from untrusted sources, or to reject any RSA JWK that carries d but lacks p, q, dp, dq or qi before it reaches jose_jwk:from_map/1 or JOSE.JWK.from_map/1 and the from, from_binary and from_file variants; the cost of that filter is that CRT-less SFM private keys can no longer be imported through those APIs. Note that an internal one-second watchdog only caps a single request, so it is not a mitigation for concurrent flooding. Advisory: https://github.com/potatosalad/erlang-jose/security/advisories/GHSA-3m45-vrpj-xmrq.

Affected VersionsENISA

jose d19e1ba68d88c68d29aa942be2573a22dbafca1f <bfd336c0062bff93e65d08c22361897e96afd956
jose 1.7.7 <1.11.13

Affected Packages

euvd jose fix: 1.11.13

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

erlang-jose (potatosalad/erlang-jose, CPE cpe:2.3:a:potatosalad:jose) implements JOSE/JSON Web Key handling for Erlang and Elixir. RSA private keys arrive in two representations: CRT form (with p, q, dp, dq, qi) and SFM form, which supplies only n, e and d. In src/jwk/jose_jwk_kty_rsa.erl the public entry points jose_jwk:from_map/1 and jose_jwk:from_binary/1 (Elixir JOSE.JWK.from_map/1, JOSE.JWK.from_binary/1) parse untrusted maps; when a private key has d, e and n but none of the CRT fields, the final clause of from_map_rsa_private_key/2 does not reject it but spawns a worker that calls convert_sfm_to_crt/1 to rebuild the missing primes by factoring n from (n, e, d). The search loop convert_sfm_to_crt_find_p/6 walks candidate bases A = 2, 4, 6, ... performing a modular exponentiation modulo the attacker-sized n at each step. All three integers come straight from crypto:bytes_to_integer applied to base64url input and are never validated as describing a real RSA key, so an attacker can substitute an arbitrary prime as n; the loop then iterates to no avail until the parent's 'receive ... after 1000 -> erlang:exit(Child, kill)' watchdog fires. This is CWE-407 (Inefficient Algorithmic Complexity), also tracked as CWE-400 (Uncontrolled Resource Consumption): a tiny input is amplified into a large, unbounded computation, and larger moduli (4096/8192-bit) raise the per-core cost further.

Know when Jose 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 (EEF) PRIMARY 6.9 MEDIUM
CVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
vuln.today AI 7.5 HIGH

Unauthenticated attacker submits a crafted JWK over the network with no user interaction (AV:N/AC:L/PR:N/UI:N); impact is CPU-exhaustion availability loss only, so C:N/I:N/A:H.

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

Primary rating from Vendor (EEF).

CVSS VectorVendor: EEF

Attack Vector
Local
Attack Complexity
Low
Attack Requirements
None
Privileges Required
None
User Interaction
None
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
None
Vulnerable system: Availability
High
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

DescriptionCVE.org

Inefficient Algorithmic Complexity in erlang-jose allows an unauthenticated remote attacker to cause a CPU-exhaustion denial of service by submitting a crafted RSA JSON Web Key.

When an application parses an untrusted JWK through the public jose_jwk:from_binary/1 or jose_jwk:from_map/1 API (or the Elixir wrappers JOSE.JWK.from_binary/1 and JOSE.JWK.from_map/1), an RSA private key that supplies d, e, and n but omits all Chinese Remainder Theorem parameters (p, q, dp, dq, qi) is routed into convert_sfm_to_crt/1, which tries to recover the missing primes by factoring the modulus. The three integers are read straight from the base64url input and are never validated as a real RSA key. When the modulus cannot be split into two factors (for example, when it is itself prime), the search loop convert_sfm_to_crt_find_p/6 performs a modular exponentiation over the attacker-sized modulus on every iteration and never succeeds. A single request of a few hundred bytes forces close to one CPU-second of work before an internal one-second watchdog kills the worker, and a larger modulus raises the cost further. By flooding such requests an attacker can saturate every scheduler and deny service, without credentials, a valid RSA key, or any special configuration.

This issue affects jose: from 1.7.7 before 1.11.13.

Threat Intelligence Overview

EPSS Score
0.2%
Top 86% exploitable
Prevalence
Medium
de facto JOSE/JWT library for Erlang/Elixir, but a niche ecosystem
Data Quality
5 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 MEDIUM
CISA KEV No
Public POC No
EPSS 0.2%
Patch available Yes
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
Defer
Exploitation· derived
None
System Exposure· derived
Small
Automatable· derived
No
Human Impact· derived
Medium

Priority Score

34
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +34
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.

More in Jose

View all
CVE-2022-36083 MEDIUM POC
5.3 Sep 07

JOSE is "JSON Web Almost Everything" - JWA, JWS, JWE, JWT, JWK, JWKS with no dependencies using runtime's native crypto

CVE-2026-89086 CRITICAL
9.1 Sep 10

Signature verification bypass in the OCaml jose library (ulrikstrid/ocaml-jose) before 0.11.0 lets attackers forge valid

CVE-2026-34240 HIGH
7.5 Mar 31

JWT token forgery in appsup-dart/jose library (versions prior to 0.3.5+1) enables remote attackers to bypass authenticat

CVE-2026-65629 HIGH
7.4 Oct 26

Password-protected private-key exports produced by the Erlang/Elixir `jose` library between 1.10.0 and 1.11.12 are encry

CVE-2026-65627 MEDIUM
6.9 Oct 26

Memory-exhaustion denial of service in the erlang-jose JOSE/JWE library for Erlang and Elixir (versions 1.0.0 through 1.

CVE-2021-29443 MEDIUM
5.9 Apr 16

jose is an npm library providing a number of cryptographic operations. Rated medium severity (CVSS 5.9), this vulnerabil

CVE-2026-65630 MEDIUM
5.9 Oct 26

Recovery of a long-term X25519 private key is possible in erlang-jose 1.10.0 through 1.11.12 whenever the pure-Erlang Cu

CVE-2026-65628 MEDIUM
5.9 Oct 26

The Erlang/Elixir JOSE library (potatosalad/erlang-jose) can be driven into an unbounded tail-recursive loop through JOS

CVE-2026-65625 MEDIUM
5.9 Oct 26

Authentication-tag forgery in the Erlang JOSE library (jose 1.2.0 through 1.11.12) lets an unauthenticated remote attack

CVE-2026-65626 MEDIUM
5.9 Oct 26

Bleichenbacher padding-oracle weakness in erlang-jose's pure-Erlang RSAES-PKCS1-v1_5 decryption (jose 1.3.0 through befo

CVE-2024-28176 MEDIUM
5.9 Mar 09

jose is JavaScript module for JSON Object Signing and Encryption, providing support for JSON Web Tokens (JWT), JSON Web

CVE-2026-65632 MEDIUM
5.1 Oct 26

ECDSA JWS signature malleability in erlang-jose (potatosalad:jose) 1.0.0 through 1.11.12 lets anyone holding a single le

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