Skip to main content

erlang-jose EUVDEUVD-2026-110304

| CVE-2026-65626 MEDIUM
Observable Discrepancy (CWE-203)
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
    Obtain server public RSA key
  2. Delivery
    Submit crafted RSA1_5 JWE ciphertexts to decrypt endpoint
  3. Exploit
    Observe padding-conformance oracle (return value or timing)
  4. Execution
    Run adaptive Bleichenbacher over ~10^4-10^6 queries
  5. Impact
    Recover CEK plaintext or forge signature

Vulnerability Assessment

Weakness
CWE
ASVS 5.0
V6 - Authentication Timing-safe comparisons
Exploitation Conditions

Requires an application that (1) uses jose to unwrap RSA1_5 JWE keys or otherwise calls decrypt_private/3 with rsa_pkcs1_padding, and (2) exposes the decryption outcome across a trust boundary - a distinguishable return value/error (binary key vs. error/{error,{badsize,_}}) or observable response timing. For the direct return-value oracle the pure-Erlang jose_jwa_pkcs1 implementation must be the active backend (e.g. JOSE.crypto_fallback(true) or routing that pins RSA1_5 to it); the PoC explicitly forced this because OTP otherwise selects native RSA. The attacker needs only the public RSA key (no authentication). LIMITING FACTORS: the application must accept the RSA1_5 algorithm (choosing RSA-OAEP/RSA-OAEP-256 or rejecting RSA1_5 at the protected header avoids it); the attack is adaptive chosen-ciphertext requiring roughly 10^4-10^6 queries, so per-client rate-limiting of decryption failures materially raises cost; even with error-value normalization the non-blinded crypto:mod_pow modexp leaves a measurable timing oracle. Affected: jose 1.3.0 through before 1.11.13.

Impact

This is a genuine cryptographic weakness but a moderate real-world priority, not a drop-everything emergency. Signals are internally consistent on the low-to-moderate end: CVSS 5.9 (medium), EPSS 0.09% (0th percentile), no CISA KEV listing, and a vendor-assigned decision label of 'this_month'. The vendor CVSS 4.0 vector (AV:L/AC:L/AT:P/PR:N/UI:N/VC:H) scores confidentiality-only impact, no authentication (public key suffices), but adds AT:P to reflect that exploitation is conditional and non-trivial. There is a notable conflict worth flagging: the vendor chose AV:L (local), yet the description explicitly says an unauthenticated attacker submits ciphertexts to a 'decryption endpoint' - i.e. a network vector (AV:N); the AV:L choice likely reflects the surviving timing side channel rather than the primary return-value oracle, and should be verified against the actual deployment. The attack is real and well-understood (classic Bleichenbacher / Marvin-style), a public PoC demonstrates the distinguisher, and successful exploitation fully recovers plaintext - but it requires an application that both uses jose's RSA1_5 JWE unwrapping and exposes decryption outcomes across a trust boundary, plus roughly 10^4-10^6 adaptive chosen-ciphertext queries. The low EPSS and absence of KEV indicate no observed widespread exploitation, consistent with a targeted, high-effort attack rather than mass scanning. Prioritize patching where RSA1_5 JWE unwrapping is actually exposed; it is a lower priority where RSA1_5 is unused or the pure-Erlang backend is not routed.

Exploit ScenarioDerived

An application uses erlang-jose to unwrap RSA1_5-wrapped JWE content-encryption keys at a network-reachable endpoint and reveals (via return value, error channel, or observable timing) whether a decryption had conforming PKCS#1 v1.5 padding. An unauthenticated attacker holding only the server's public RSA key submits on the order of 10^4-10^6 crafted ciphertexts, using each accept/reject answer as a one-bit padding oracle to run Bleichenbacher's adaptive attack and recover the plaintext content-encryption key (and thus the protected message) of an intercepted ciphertext, or to forge a signature. A public PoC in the GHSA advisory demonstrates the distinguishable padding oracle (it proves the one-bit signal, not a full attack implementation).

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

Bleichenbacher padding-oracle weakness in erlang-jose's pure-Erlang RSAES-PKCS1-v1_5 decryption (jose 1.3.0 through before 1.11.13) can let an unauthenticated attacker who knows only the public RSA key recover plaintext from intercepted RSA1_5 JWE content-encryption keys via roughly 10^4 to 10^6 adaptive chosen-ciphertext queries. Exploitation requires an application that unwraps RSA1_5 JWE keys with jose and exposes the decryption outcome, either as distinguishable return values (recovered key versus error) or as observable timing; the direct return-value oracle applies when the pure-Erlang jose_jwa_pkcs1 backend is active. No CISA KEV entry or confirmed active exploitation was identified, EPSS is 0.09%, and a public PoC reference exists but it is not verified as working exploit code.

RemediationAI

Vendor-released patch: upgrade erlang-jose to 1.11.13 or later; the fix substitutes a randomly generated content-encryption key of the required length whenever RSA1_5 key unwrapping fails for any reason, continuing so that the failure surfaces only as ordinary content authentication failure, and the replacement CEK is generated on every decryption. This removes the padding-validity signal from API results but does not make the RSA operation constant-time, and the low-level RSA padding helpers still return errors. Recommended workarounds are to prefer RSA-OAEP or RSA-OAEP-256, or to refuse RSA1_5 by base64url-decoding the protected segment and rejecting tokens whose alg is RSA1_5 before decrypting; rate-limiting decryption failures per client also makes an adaptive attack much more expensive. Deployments that normalize failures should still apply the patch because non-blinded modexp timing can preserve an oracle. Advisory: https://github.com/potatosalad/erlang-jose/security/advisories/GHSA-vwvr-f994-6j9j; patch commit: https://github.com/potatosalad/erlang-jose/commit/0eac8cef9aaa48fb6846f4e47a0002dc4a73966d.

Affected VersionsENISA

jose 1.3.0 <1.11.13
jose 853c5d4c4c0bd2a7ecb055b237f4284184e176c8 <0eac8cef9aaa48fb6846f4e47a0002dc4a73966d

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 flaw is CWE-203 (observable discrepancy) in RSAES-PKCS1-v1_5 decryption. In jose_jwa_pkcs1, eme_pkcs1_decode/2 accepts only blocks matching the PKCS#1 v1.5 encryption structure (leading 0x00 0x02, at least eight non-zero padding bytes, and a 0x00 separator) and returns the recovered message; otherwise it returns error. The wrapper rsaes_pkcs1_decrypt/2 preserves that distinction and adds {error, {badsize, _}} on length failure, so callers can observe whether padding was valid. No RFC 8017 section 7.2.2 implicit-rejection countermeasure is applied: on padding failure the implementation does not substitute a deterministic pseudo-random plaintext, leaving a one-bit conformance signal. The underlying modular exponentiation in dp/2 uses raw, non-blinded crypto:mod_pow/3, so the padding check can remain distinguishable by timing even if an application normalizes all failures to one error value. The PoC notes that a deployment must route RSA1_5 through the pure-Erlang backend for the direct return-value oracle; on the tested OTP runtime jose otherwise selects native RSA, and the script pins the backend with an ETS override. Applications that use RSA-OAEP or reject RSA1_5 are not exposed through this path.

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:H/VI:N/VA:N/SC:N/SI:N/SA:N
vuln.today AI 5.9 MEDIUM

Remote decryption endpoint and public-key-only attack give AV:N/PR:N; reliance on the app exposing a padding/timing distinction plus many adaptive queries gives AC:H; plaintext recovery is C:H with no integrity/availability loss.

3.1 AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N
4.0 AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:N/VA:N/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
High
Vulnerable system: Integrity
None
Vulnerable system: Availability
None
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

DescriptionCVE.org

The pure-Erlang RSAES-PKCS1-v1_5 decryption in the jose_jwa_pkcs1 module is a Bleichenbacher padding oracle. eme_pkcs1_decode/2 returns the recovered message when a decrypted block has valid PKCS#1 v1.5 padding (a leading 0x00 0x02, a padding string of at least eight non-zero bytes, and a 0x00 separator) and returns a distinct error result otherwise, and rsaes_pkcs1_decrypt/2 additionally returns {error, {badsize, _}} when the length check fails. The implementation applies no implicit-rejection countermeasure (RFC 8017 §7.2.2): it does not substitute a deterministic pseudo-random plaintext on a padding failure, so a one-bit padding-conformance signal leaks to the caller. Because the underlying modular exponentiation in dp/2 is a raw, non-blinded crypto:mod_pow/3, the padding check also stays distinguishable by timing even when an application normalizes every failure to a single error value.

An unauthenticated attacker who knows only the public RSA key and can submit ciphertexts to a decryption endpoint that unwraps RSA1_5 JWE keys (or otherwise calls decrypt_private/3 with rsa_pkcs1_padding) can use this oracle to recover the plaintext of intercepted ciphertexts, such as content-encryption keys and thus the protected message, or to forge signatures, through roughly 10^4 to 10^6 adaptive chosen-ciphertext queries.

This issue affects jose: from 1.3.0 before 1.11.13.

Threat Intelligence Overview

EPSS Score
0.1%
Top 100% exploitable
Prevalence
Medium
dominant JOSE/JWT library of the niche Erlang/Elixir 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

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

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