Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessSend crafted RSA JWK (n,e,d, no CRT params) to from_binary/from_map
-
DeliveryOmitted CRT routes key into convert_sfm_to_crt prime-recovery
-
ExploitFactoring loop runs modular exponentiation until 1s watchdog kills worker
-
ExecutionFlood many concurrent tiny requests
-
ImpactSaturate 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. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – 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
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
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
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
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.
Primary rating from Vendor (EEF).
CVSS VectorVendor: EEF
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
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.
JOSE is "JSON Web Almost Everything" - JWA, JWS, JWE, JWT, JWK, JWKS with no dependencies using runtime's native crypto
Signature verification bypass in the OCaml jose library (ulrikstrid/ocaml-jose) before 0.11.0 lets attackers forge valid
JWT token forgery in appsup-dart/jose library (versions prior to 0.3.5+1) enables remote attackers to bypass authenticat
Password-protected private-key exports produced by the Erlang/Elixir `jose` library between 1.10.0 and 1.11.12 are encry
Memory-exhaustion denial of service in the erlang-jose JOSE/JWE library for Erlang and Elixir (versions 1.0.0 through 1.
jose is an npm library providing a number of cryptographic operations. Rated medium severity (CVSS 5.9), this vulnerabil
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
The Erlang/Elixir JOSE library (potatosalad/erlang-jose) can be driven into an unbounded tail-recursive loop through JOS
Authentication-tag forgery in the Erlang JOSE library (jose 1.2.0 through 1.11.12) lets an unauthenticated remote attack
Bleichenbacher padding-oracle weakness in erlang-jose's pure-Erlang RSAES-PKCS1-v1_5 decryption (jose 1.3.0 through befo
jose is JavaScript module for JSON Object Signing and Encryption, providing support for JSON Web Tokens (JWT), JSON Web
ECDSA JWS signature malleability in erlang-jose (potatosalad:jose) 1.0.0 through 1.11.12 lets anyone holding a single le
EUVD-2026-110309
NVD
CVE.org
EPSS
GitHub
Exploit-DB