Am I affected?

type your jose version to check

Description

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.

Weaknesses & attack patterns

Weakness

CWE-409 · Improper Handling of Highly Compressed Data (Data Amplification) in catalog → MITRE ↗

Attack patterns

CAPEC-130 · Excessive Allocation MITRE ↗

Affected — Hex / jose Hex.pm ↗ Repository ↗

≥ 1.0.0 < 1.11.13 affected
every other version: unaffected
cpe cpe:2.3:a:potatosalad:jose:*:*:*:*:*:*:*:*
version type semver
modules · source files · routines
modules jose_jwe_zip · jose_jwe · 'Elixir.JOSE.JWE'
source files src/jwe/jose_jwe_zip.erl · src/jwe/jose_jwe.erl · lib/jose/jwe.ex
routines jose_jwe_zip:uncompress/2 · jose_jwe:block_decrypt/2 · 'Elixir.JOSE.JWE':block_decrypt/2

Affected — GitHub / potatosalad/erlang-jose Repository ↗

≥ a7746ec < 857eb8e affected
every other version: unaffected
cpe cpe:2.3:a:potatosalad:jose:*:*:*:*:*:*:*:*
version type git
modules · source files · routines
modules jose_jwe_zip · jose_jwe · 'Elixir.JOSE.JWE'
source files src/jwe/jose_jwe_zip.erl · src/jwe/jose_jwe.erl · lib/jose/jwe.ex
routines jose_jwe_zip:uncompress/2 · jose_jwe:block_decrypt/2 · 'Elixir.JOSE.JWE':block_decrypt/2

Workarounds

Reject JWE tokens that carry a zip header before passing them to jose_jwe:block_decrypt/2. DEFLATE compression is rarely used in legitimate JWE traffic, so untrusted tokens whose protected header contains zip: DEF can be inspected and filtered out before decryption.

References

Credits

Peter Ullrich Reporter
Andrew Bennett Remediation developer
Jonatan Männchen / EEF Analyst

CVSS breakdown

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
« All CVEs