Skip to main content

Erlang jose EUVDEUVD-2026-110307

| CVE-2026-65628 MEDIUM
Uncontrolled Recursion (CWE-674)
2026-10-26 EEF
5.9
CVSS 4.0 · Vendor: EEF
View

Attack ChainAIDerived

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

  1. Access
    Submit mismatched-kty peer JWK to ECDH endpoint
  2. Delivery
    shared_secret/2 falls into infinite tail recursion
  3. Exploit
    Erlang scheduler pinned at 100% CPU
  4. Execution
    Repeat requests to exhaust all schedulers
  5. Impact
    Service-wide denial of service

Vulnerability Assessment

Weakness
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Recursion depth limits
Exploitation Conditions

Exploitation requires that the application call jose_jwk:shared_secret/2 (Elixir JOSE.JWK.shared_secret/2) to derive an ECDH shared secret using an externally supplied peer public JWK, AND that it does so without first validating that the peer key's kty (and crv for EC/OKP keys) matches its own key - the advisory's stated vulnerable pattern. The attacker then sends a single JWK whose kty differs from the server's key (e.g. an RSA public key against the server's EC P-256 key), which is enough to hang the deriving process indefinitely. No authentication or privilege is needed beyond the ability to submit a peer key to the derivation flow (PR:N, UI:N). Limiting factors: only affects deployments on jose 1.5.0 through before 1.11.13 that actually use the shared_secret/2 ECDH path on untrusted input - applications using jose solely for JWS/JWE/JWT signing and verification do not reach the vulnerable clause.

Impact

This is a genuine but modest-priority availability issue, not a drop-everything emergency. The vendor CVSS 4.0 score is 5.9 (medium), with impact confined to availability (VA:H; VC/VI:N) - there is no confidentiality or integrity exposure, only CPU-exhaustion denial-of-service via an infinite tail-recursive loop (CWE-674/835). EPSS is very low at 0.14% (3rd percentile) and the CVE is NOT in CISA KEV, so there is no sign of active or widespread exploitation. Countervailing that, a verified public proof-of-concept exploit script (with run logs showing a hung scheduler) is published in the GHSA advisory, and the trigger is a single crafted request requiring no authentication (PR:N) and no user interaction (UI:N), making it trivially automatable once a vulnerable code path is reachable. The signals conflict on attack vector: the supplied CVSS 4.0 vector asserts AV:L (local), yet the advisory describes a remotely triggerable DoS where an attacker-controlled peer JWK arrives over the wire in an ordinary ECDH key-agreement endpoint - treat the realistic vector as network-reachable and verify with the vendor rather than trusting AV:L. The AT:P (attack requirements) metric reflects the real limiter: the flaw is only reachable when an application derives a shared secret from an untrusted peer key without first checking kty/crv, which is a narrower usage pattern than generic JWT signing/verification. Net: for operators running Elixir/Erlang services that perform ECDH shared-secret derivation with jose on externally supplied keys, this warrants prompt patching (consistent with the vuln.today 'this_month' decision label); for everyone else using jose only for JWS/JWE/JWT, real exposure is low.

Exploit ScenarioDerived

An unauthenticated remote attacker submits an attacker-controlled peer public JWK of a mismatched key type (for example an RSA key) to an application that derives an ECDH shared secret against its own EC P-256 key via JOSE.JWK.shared_secret/2 on untrusted input. The kty mismatch makes the function re-enter itself with identical arguments, pinning a BEAM scheduler at 100% CPU per request so the call never returns; repeated requests exhaust the available schedulers and take the service down. A verified public proof-of-concept script demonstrating this is published in the GHSA advisory.

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

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

Alert me

AnalysisAIv1 – Oct 28, 2026

The Erlang/Elixir JOSE library (potatosalad/erlang-jose) can be driven into an unbounded tail-recursive loop through JOSE.JWK.shared_secret/2 when an application derives an ECDH shared secret from an attacker-supplied peer JWK whose key type differs from the application's own key. A single mismatched JWK (for example an RSA public key submitted to a server holding an EC P-256 key) never returns and never crashes, pinning one BEAM scheduler at 100% CPU; repeated submissions exhaust schedulers and degrade or take down the service. Only deployments on jose 1.5.0 through 1.11.12 that actually call shared_secret/2 on untrusted input are reachable - applications using jose purely for JWS/JWE/JWT signing and verification do not hit the vulnerable clause. Severity is a genuine but modest-priority availability issue: EPSS is 0.14% (3rd percentile), there is no CISA KEV listing, priority is 'this_month', but a public proof-of-concept script published with the vendor advisory demonstrates the scheduler hang. Fixed in 1.11.13.

RemediationAI

Upgrade to jose 1.11.13 or later - the released fix makes shared_secret/2 raise {badarg, [ModuleA, ModuleB]} when both already-decoded JWKs have different key types instead of recursing forever (patch commit https://github.com/potatosalad/erlang-jose/commit/26182a7de63b91550035d3f08741f7d17f1f675a, advisory https://github.com/potatosalad/erlang-jose/security/advisories/GHSA-fpj2-9h59-32pp). If upgrading is not immediately possible, the advisory's workaround is to check before calling shared_secret/2 that both keys have the same kty - and for EC/OKP keys the same crv - rejecting the request otherwise; the trade-off is that this validation must be added at every call site that handles untrusted peer keys, and any missed path remains exploitable. The advisory additionally recommends running key agreement on untrusted input under a timeout; note this is containment rather than a fix, since a timed-out derivation has already pinned a scheduler until the worker is forcibly killed, so it limits blast radius per request without preventing scheduler consumption. Callers that never invoke shared_secret/2 on externally supplied JWKs (for example deployments using jose only for JWS/JWE/JWT) are not exposed and can schedule the upgrade on the 'this_month' priority indicated by the decision data rather than as an emergency; there is no CISA KEV entry and EPSS is 0.14% (3rd percentile).

Affected VersionsENISA

jose 1.5.0 <1.11.13
jose 7b80b9f55b9898e1a6901ce136061b241b021d7c <26182a7de63b91550035d3f08741f7d17f1f675a

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

The affected component is jose_jwk, the JWK handling module of potatosalad's pure-Erlang JOSE implementation, specifically shared_secret/2 as defined around lines 962-965 of src/jwk/jose_jwk.erl. The function has two clauses: the first pattern-matches both #jose_jwk{} records on the same kty module (shared_secret(#jose_jwk{kty={Module,YourKey}}, #jose_jwk{kty={Module,MyKey}})), and because the Module variable is bound once, that clause doubles as the guard preventing a cross-type derive_key call. The fallback clause, shared_secret(YourJWK, MyJWK) -> shared_secret(from(YourJWK), from(MyJWK)), exists to normalize unparsed input - but from/1 is idempotent and returns an already-parsed #jose_jwk{} record unchanged, so when two records with different kty modules are passed the fallback re-enters itself with identical arguments. The result is a tail-recursive spin with no base case and no exception, matching CWE-674 (uncontrolled recursion) and, per the GitHub advisory, CWE-835 (loop with unreachable exit condition). Because BEAM reductions are preemptible but this loop is a pure tail call that continually makes progress, the affected process never yields its scheduler back to useful work, so a single request permanently consumes a scheduler rather than merely a process. The fix in 1.11.13 makes the mismatched-type case raise {badarg, [ModuleA, ModuleB]}, exposing only key-type module names and no key material. The flaw was introduced with shared_secret/2 itself in 1.5.0 and is confined to the EC/OKP ECDH key-agreement path; it does not affect symmetric or signature operations.

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 5.9 MEDIUM
CVSS:4.0/AV:L/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
vuln.today AI 7.5 HIGH

Peer JWK arrives over the wire so AV:N (vendor used AV:L), no auth or interaction so PR:N/UI:N; only availability is harmed via scheduler exhaustion (A:H, C/I:N); the app-must-use-unvalidated-peer-key precondition is a deployment condition not expressible in 3.1 (captured as AT:P in 4.0).

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:P/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
Present
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

jose_jwk:shared_secret/2 (exposed in Elixir as JOSE.JWK.shared_secret/2) derives an ECDH shared secret from two JWKs. Its first function clause only matches when both JWKs carry the same key type (kty) module, and its fallback clause re-invokes itself as shared_secret(from(YourJWK), from(MyJWK)). Because from/1 returns an already-parsed jose_jwk record unchanged, passing two JWKs whose key types differ (for example an EC key and an RSA key) makes the fallback clause re-enter with identical arguments, producing an unbounded tail-recursive loop that never returns and never crashes.

An application that derives a shared secret from an externally supplied peer public key without first checking that the peer key's type and curve match its own key can be driven into this loop by an attacker-controlled JWK, pinning an Erlang scheduler at 100% CPU. Repeated requests exhaust the available schedulers, resulting in a denial of service.

This issue affects jose: from 1.5.0 before 1.11.13.

Threat Intelligence Overview

EPSS Score
0.1%
Top 97% exploitable
Prevalence
Medium
de facto JOSE/JWT library for Erlang/Elixir, but 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.1%
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

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.

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-2026-65631 MEDIUM
6.9 Oct 26

CPU-exhaustion denial of service in the erlang-jose library (versions 1.7.7 through 1.11.12) lets remote attackers who c

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