Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain recipient public key
-
DeliveryCraft small zip:DEF JWE over compressed zeros
-
ExploitSubmit token to JWE decrypt endpoint
-
ExecutionUnbounded zlib:inflate expands payload in one call
-
ImpactExhaust node memory and crash the BEAM
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V2 - Validation and Business Logic Compression ratio limits
|
| Exploitation Conditions | The affected application must decrypt attacker-supplied JWE tokens using jose's JOSE.JWE.block_decrypt/2 (jose_jwe:block_decrypt/2) and must honor the optional zip:"DEF" DEFLATE header - which jose does automatically during decryption, before the recipient can inspect or reject the payload. With asymmetric key management (RSA-OAEP, ECDH-ES) the attacker needs only the recipient's public key and no authentication or secret material. Affected: jose 1.0.0 up to (not including) 1.11.13. LIMITING FACTORS: exploitation requires an exposed code path that decrypts JWEs received from untrusted senders; the attacker must be able to obtain or know the recipient's public key; applications that never accept compressed (zip-header) JWEs, or that reject them before decrypting, are not exposed. Per vendor, 1.11.13 caps inflation at zip_size_maximum (1 MiB default, tunable via the jose zip_size_maximum application env key or jose:zip_size_maximum/1); upgrading is the complete fix, with pre-decrypt rejection of any token whose protected header contains a zip member as the only stated workaround. |
| Impact | This is a remotely triggerable, availability-only denial-of-service (decompression bomb) in erlang-jose. The signals are mixed and point to a real but moderate priority. EPSS is low (0.25%, 16th percentile) and the CVE is NOT in CISA KEV, so there is no evidence of active or widespread exploitation - consistent with a niche-ecosystem library flaw rather than a mass-exploited internet bug. Offsetting that, a full working PoC is included in the GHSA advisory with a VERIFIED log showing 771x amplification (a ~348 KB token inflating to 256 MiB, +459.9 MB measured), so exploitation is demonstrably practical, not theoretical, and requires only the recipient's PUBLIC key with the common asymmetric algorithms (RSA-OAEP, ECDH-ES). The vuln.today decision label is 'this_month' (not act_now/emergency). A key signal conflict must be flagged: the official CVSS 4.0 vector uses AV:L (local), which depresses the 6.9 score, yet the description and PoC clearly show a remotely delivered JWE token crossing a network trust boundary via JOSE.JWE.block_decrypt/2 - a network-vector assessment would score higher (see assessed vectors). Impact is strictly availability (VC:N/VI:N/VA:H / C:N/I:N/A:H): no confidentiality or integrity loss, and the BEAM can be restarted, but a single small token can OOM-kill the node and take down the service for all users, so blast radius per successful request is high. Net: a genuine priority for any Elixir/Erlang service that decrypts JWE tokens from untrusted senders, but not an emergency given low EPSS, no KEV, and DoS-only impact. |
| Exploit ScenarioDerived | An outside attacker who holds only the recipient's public key (as is normal for RSA-OAEP or ECDH-ES) crafts a few-kilobyte JWE carrying the zip:"DEF" header over a highly compressible plaintext such as a long run of zero bytes. When the victim service decrypts the token with JOSE.JWE.block_decrypt/2, jose automatically DEFLATE-inflates the payload via unbounded zlib:inflate/2, expanding a tiny token into hundreds of MB or GB and OOM-killing the BEAM. A working, verified PoC is published in the GHSA advisory (348 KB token → 256 MiB, ~771x amplification), so no special attacker skill or secret material is required. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 28, 2026
Memory-exhaustion denial of service in the erlang-jose JOSE/JWE library for Erlang and Elixir (versions 1.0.0 through 1.11.12) lets a remote, unauthenticated attacker inflate a few-kilobyte JWE token into hundreds of megabytes or gigabytes on the decrypting node and crash the BEAM. When a token carries the optional zip: "DEF" header, jose_jwe_zip:uncompress/2 feeds the entire attacker-controlled plaintext to zlib:inflate/2 with no output-size or inflation-ratio bound, and this happens automatically inside jose_jwe:block_decrypt/2 (JOSE.JWE.block_decrypt/2) before the recipient can inspect or reject the payload; with RSA-OAEP or ECDH-ES key management the attacker only needs the recipient's public key and no secret material. Exposure is limited to applications that actually decrypt JWEs received from untrusted senders and do not reject compressed headers first; EPSS is 0.25% (16th percentile), no confirmed active exploitation (CISA KEV) is recorded, and a proof-of-concept script with supporting logs is published in the upstream advisory GHSA-wfpv-qxp8-x5gm.
RemediationAI
Vendor-released patch: upgrade erlang-jose to 1.11.13 (fix commit 857eb8e7f2d33e2c9ca2189e77226561cacaf2ad, advisory https://github.com/potatosalad/erlang-jose/security/advisories/GHSA-wfpv-qxp8-x5gm), which inflates JWE plaintext incrementally and raises an error as soon as the decompressed size would exceed zip_size_maximum (default 1048576 bytes / 1 MiB) instead of materializing the full output, and which also returns authentication failures on compressed JWEs without invoking decompression at all; per the vendor, upgrading is the complete fix, and applications that legitimately need larger compressed plaintexts can raise the ceiling via the jose application environment key zip_size_maximum or the accessor jose:zip_size_maximum/1 (:jose.zip_size_maximum/1 from Elixir). If upgrading is not immediately possible, the only workaround the vendor states is to reject compressed JWEs before decrypting: base64url-decode the protected segment returned by jose_jwe:expand/1 (JOSE.JWE.expand/1) and refuse any token whose header contains a zip member - the trade-off is that applications which must interoperate with peers that legitimately emit zip: "DEF" tokens will reject those payloads, and the check must be applied on every decryption path, including code that calls jose_jwe:block_decrypt/2 directly rather than through the Elixir wrapper.
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
JSON Web Encryption (RFC 7516) defines an optional "zip" protected-header member that DEFLATE-compresses the plaintext before encryption; erlang-jose implements the "DEF" codec in src/jwe/jose_jwe_zip.erl using raw DEFLATE (zlib:inflateInit/2 with window bits -15, i.e. RFC 1951 without the zlib wrapper). The root cause is CWE-409 (improper handling of highly compressed data / data amplification, also tracked as CWE-400 uncontrolled resource consumption): uncompress/2 calls zlib:inflate/2 on the whole stream, which returns the complete inflated output in one allocation, so a ~1000:1 ratio on highly repetitive input turns a few kilobytes into hundreds of megabytes. The from_map/1 codec selection only chooses the decompression algorithm and does nothing to bound output, and decompression is invoked as part of normal decryption, so the victim never gets a decision point before the allocation. Because the common asymmetric key-management modes (RSA-OAEP, ECDH-ES) let anyone encrypt to the recipient's public key, the attacker needs no authentication or shared secret; the CVSS v3.1 assessment (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H) reflects a network-delivered, unauthenticated, availability-only impact, whereas the CNA record carries a CVSS v4.0 score of 6.9 whose vector uses AV:L. The upstream PoC demonstrates the mechanism end-to-end: a 348,334-byte RSA-OAEP/A128GCM token with zip: "DEF" decrypts to 268,435,456 bytes of zeros (about 771x amplification) with a measured memory delta of roughly 459.88 MB. The 1.11.13 fix replaces the single-shot inflate with incremental zlib:safeInflate/2 and aborts once zip_size_maximum is exceeded.
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
Token is delivered remotely and decrypted automatically, needing only the recipient's public key, so AV:N/AC:L/PR:N/UI:N; impact is availability-only (A:H), contradicting the input's AV:L.
Primary rating from Vendor (EEF).
CVSS VectorVendor: EEF
DescriptionCVE.org
Improper Handling of Highly Compressed Data (Data Amplification) vulnerability in potatosalad jose (erlang-jose) allows a remote attacker to exhaust a node's memory with a small crafted JWE token.
The jose_jwe_zip:uncompress/2 function in src/jwe/jose_jwe_zip.erl decompresses the DEFLATE-compressed plaintext of a JWE that carries the optional zip: DEF header by calling zlib:inflate/2 on the entire attacker-controlled stream, with no bound on the output size or the inflation ratio. Raw DEFLATE reaches ratios around 1000:1 on highly repetitive input, so a few-kilobyte token inflates to hundreds of megabytes or gigabytes in a single call.
Decompression runs automatically during decryption through jose_jwe:block_decrypt/2 (JOSE.JWE.block_decrypt/2 in Elixir), before the recipient can inspect or reject the payload. With the common asymmetric key-management algorithms (RSA-OAEP, ECDH-ES) an attacker needs only the recipient's public key to craft such a token, so no authentication or secret material is required. A single small token can exhaust the node's memory and crash the BEAM, denying service to all users.
This issue affects jose: from 1.0.0 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
CPU-exhaustion denial of service in the erlang-jose library (versions 1.7.7 through 1.11.12) lets remote attackers who c
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-110306
NVD
CVE.org
EPSS
GitHub
Exploit-DB