Skip to main content

ZenHive MPP EUVDEUVD-2026-80254

| CVE-2026-89186 MEDIUM
Use of Cache Containing Sensitive Information (CWE-524)
2026-09-16 EEF GHSA-4h6w-pvrh-g28p
6.3
CVSS 4.0 · Vendor: EEF
View

Attack ChainAIDerived

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

  1. Access
    Identify paid endpoint served via CDN
  2. Delivery
    Wait for a paying client to populate cache
  3. Exploit
    Request same URL unauthenticated
  4. Execution
    Receive cached paid 200 + Payment-Receipt
  5. Impact
    Obtain paid content and receipt without paying

Vulnerability Assessment

Weakness
CWE
ASVS 5.0
V3 - Web Frontend Security Cache-Control for sensitive pages
Exploitation Conditions

Exploitation requires all of the following, none of which are the library's default: (1) a mounting application that sets its own Cache-Control on the MPP-gated paid resource with a shareable directive (e.g. public, max-age=3600), overriding the library's Cache-Control: private via Plug.Conn.put_resp_header/3; and (2) a shared HTTP cache - a CDN or reverse proxy - in the response path that will store and replay the paid 200 along with its Payment-Receipt header. A related weaker condition needs no cache: because no register_before_send/2 callback strips it, a downstream non-2xx response still carries a Payment-Receipt, issuing a receipt for a response that delivered no resource. Limiting factors: the library's own default (Cache-Control: private on success, no-store on 402) is safe, so the vulnerable state only exists when the protected application misconfigures caching; without a shared cache the primary leak does not occur.

Impact

This is a genuine but modest-severity flaw whose real-world risk is tightly bounded by preconditions. The vendor CVSS 4.0 vector (6.3, AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:N/VA:N/SC:L) already signals limited impact: only low confidentiality to the vulnerable system and to a subsequent system (the shared cache), with no integrity or availability effect. Critically, the vector carries AT:P (attack requirements present), which correctly captures that exploitation is not universal against defaults - it depends on a mounting application overriding the library's Cache-Control: private with a cacheable directive AND a CDN/reverse proxy being present in the response path. No EPSS score, KEV listing, or public POC was provided; per the precision rules this is 'no public exploit identified at time of analysis.' There is no SSVC decision data supplied. Note a nuance: the CVSS marks AC:L, but the description makes clear a specific application-side misconfiguration is required, so real-world attack complexity is higher than AC:L implies - the network vector is low-complexity to send, but the vulnerable state must first be created by the deploying app. Net: a real correctness/logic weakness worth patching, not an urgent widely-exploitable priority.

Exploit ScenarioDerived

A developer mounts MPP.Plug to gate a premium API endpoint, and the endpoint's own controller (or an upstream layer) sets Cache-Control: public, max-age=3600 on the paid 200 response, silently overwriting the library's private directive. A CDN or reverse proxy in front of the app then stores that paid response together with its Payment-Receipt header and serves it verbatim to subsequent clients who never paid. No public exploit code is identified; the 'attack' is simply an unpaid client requesting the same cached URL.

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

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

Alert me

AnalysisAIv1 – Sep 16, 2026

ZenHive mpp (MPP.Plug payment middleware for Elixir/Phoenix) versions 0.1.0 through 0.16.1 can allow a shared HTTP cache - a CDN or reverse proxy - to store a paid 200 response together with its Payment-Receipt header and replay both to clients that never paid, because the library's own Cache-Control: private is silently replaced when the mounting application sets its own cache directive on the same connection. An unauthenticated remote client that reaches such a cache can therefore obtain paid content and a valid receipt for free, and a related weaker case has a downstream non-2xx response still carrying a Payment-Receipt for a resource that was never delivered (CWE-524). The real-world risk is tightly bounded: the library's default behavior (private on success, no-store on 402) is safe, so the leak requires an application-level caching misconfiguration plus a shared cache in the response path, and no public exploit code was identified at time of analysis.

RemediationAI

Vendor-released patch: 0.16.2 - upgrade the mpp dependency to 0.16.2 or later, as indicated by the affected range ('from 0.1.0 before 0.16.2') and the advisory at https://github.com/ZenHive/mpp/security/advisories/GHSA-82qh-vrvm-gqvc, whose fixes are captured in upstream commits https://github.com/ZenHive/mpp/commit/2fd91a5ecbd0b0ad2a4ac202b79659e8126dbc0b (patch) and https://github.com/ZenHive/mpp/commit/2d4d1d94aae7790ae0623063961adbeef171fa71. If upgrading immediately is not possible, apply compensating controls at the application and edge layers: (1) remove any application-set Cache-Control directive on MPP-gated paid routes, or at minimum stop emitting shareable directives such as public/max-age there - the side effect is increased origin load and lower cache hit rates for those routes, which is preferable to leaking paid content; (2) explicitly strip or overwrite the Payment-Receipt header (and re-assert Cache-Control: private) in a custom register_before_send/2 callback or a terminal plug placed after MPP.Plug in every paid pipeline, so receipts are never attached to cached or non-2xx responses - this duplicates logic the library should own and must be audited whenever routes change; (3) configure the CDN or reverse proxy to bypass caching entirely for MPP-gated paths (cache-bypass rules, Vary: Authorization/Payment handling, or surrogate-key purging) - this sacrifices edge caching performance for those endpoints but closes the primary leak; (4) ensure no Payment-Receipt header is emitted on error responses, e.g. by scrubbing it on non-2xx status codes. Note that the library's default configuration (Cache-Control: private on success, no-store on 402) is already safe, so any mitigation should be verified by asserting the final response headers rather than assuming application code preserves them.

Affected VersionsENISA

mpp 0.1.0 <0.16.2
mpp 2d4d1d94aae7790ae0623063961adbeef171fa71 <2fd91a5ecbd0b0ad2a4ac202b79659e8126dbc0b

Affected Packages

euvd mpp fix: 0.16.2

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

MPP.Plug is a mountable Plug middleware implementing the MPP 402 payment handshake in Elixir: on init/1 it validates options into an MPP.Plug.Config struct (secret_key, realm, method, charge/request, expires_in, opaque), and on call/2 it either returns 402 with a WWW-Authenticate challenge, or, for a valid credential, passes the request through after setting receipt data in conn.assigns[:mpp_receipt] and adding a Payment-Receipt response header. The defect is CWE-524 (Use of Cache Containing Sensitive Information): the library sets payment-receipt and cache-control: private on the connection before invoking the wrapped application, and registers no register_before_send/2 callback to re-assert those headers at response time. Because Plug.Conn.put_resp_header/3 replaces an existing header rather than appending it, any application code that writes its own Cache-Control (for example "public, max-age=3600") on the paid resource overwrites the library's private directive, so the guarantee the library advertises is defeatable by the very application it is protecting. The same missing before-send hook means a non-2xx downstream response keeps the Payment-Receipt header, effectively issuing a receipt for a response that delivered no resource. The affected component is the plug.ex implementation added in the Task 8 'Plug middleware' work on Phase 1 of the project's roadmap, so all releases from 0.1.0 up to (but not including) 0.16.2 carry the flawed ordering. Per the assessed vector (AV:N/AC:H/PR:N/UI:N/S:C/C:L/I:N/A:N), exploitation is unauthenticated and network-reachable but has high attack complexity and limited confidentiality impact in a changed security scope - no integrity or availability impact - which matches the requirement for a specific, non-default deployment configuration rather than a straightforward remote exploit.

Know when Mpp 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 6.3 MEDIUM
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:N/VA:N/SC:L/SI:N/SA:N
vuln.today AI 4.0 MEDIUM

Network-reachable but AC:H because a specific app-side Cache-Control override plus a shared cache must both be present; S:C as a separate cache component is affected; only low confidentiality, no integrity/availability.

3.1 AV:N/AC:H/PR:N/UI:N/S:C/C:L/I:N/A:N
4.0 AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:N/VA:N/SC:L/SI:N/SA:N

Primary rating from Vendor (EEF).

CVSS VectorVendor: EEF

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
Present
Privileges Required
None
User Interaction
None
Vulnerable system: Confidentiality
Low
Vulnerable system: Integrity
None
Vulnerable system: Availability
None
Subsequent system: Confidentiality
Low
Subsequent system: Integrity
None
Subsequent system: Availability
None

DescriptionCVE.org

Use of Cache Containing Sensitive Information in ZenHive mpp allows a shared HTTP cache to store a paid response and serve it to clients that never paid.

MPP.Plug.verify_credential in lib/mpp/plug.ex sets payment-receipt and cache-control: private on the connection before the wrapped application runs, and registers no register_before_send/2 callback. Plug.Conn.put_resp_header/3 replaces an existing header, so a mounting application that sets its own cache-control on the paid resource (for example public, max-age=3600) silently overrides the private the library relies on, and a CDN or reverse proxy can then store the paid 200 together with its Payment-Receipt and serve both to unpaid clients. The library-level guarantee is therefore defeatable by the application it protects. For the same reason a downstream non-2xx response still carried Payment-Receipt, issuing a receipt for a response that delivered no resource.

This issue affects mpp: from 0.1.0 before 0.16.2.

Threat Intelligence Overview

EPSS Score
0.4%
Top 67% exploitable
Prevalence
Rare
Young niche Elixir/Plug payment-handshake library, minimal production footprint
Data Quality
7 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GitHub VulDB

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.4%
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
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

32
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +32
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 Mpp

View all
CVE-2026-82750 HIGH POC
8.3 Sep 06

Missing validation of the EIP-7702 aa_authorization_list field in ZenHive mpp's Tempo payment sponsorship module allows

CVE-2026-82751 HIGH POC
8.3 Sep 06

Gas-cost inflation and unauthorized access key provisioning in ZenHive mpp (versions 0.2.0 through 0.15.x) allows any un

CVE-2026-67581 HIGH
8.7 Aug 19

Replay of settled EVM blockchain transaction hashes against ZenHive mpp versions 0.3.0-0.6.2 allows unauthenticated remo

CVE-2026-73541 HIGH
8.3 Aug 19

Concurrent sponsored-payment flooding in ZenHive mpp (versions 0.2.0 through 0.12.0) allows an unauthenticated remote cl

CVE-2026-59694 HIGH
8.3 Jul 17

Economic resource exhaustion in the ZenHive mpp Elixir library (versions 0.2.0 through 0.5.x) lets an unauthenticated re

CVE-2026-59695 HIGH
8.3 Jul 17

Fee-payer wallet draining in ZenHive mpp (Elixir) 0.2.0-0.5.x lets an unauthenticated remote client empty the sponsor's

CVE-2026-73136 HIGH
8.2 Aug 19

Capture-replay authentication bypass in ZenHive mpp versions 0.6.1-0.6.3 allows unauthenticated network attackers to cla

CVE-2026-59252 HIGH
8.2 Jul 17

Wallet-draining denial of service in ZenHive mpp (Elixir library) versions 0.2.0 through 0.5.x affects deployments confi

CVE-2026-87119 HIGH
8.2 Sep 22

Replay of a captured Tempo subscription credential in ZenHive mpp 0.14.0 through 0.16.1 lets an attacker who already hol

CVE-2026-89420 HIGH
7.1 Sep 22

ZenHive mpp versions 0.14.0 through 0.16.1 fail to charge clients that hold an open payment channel, allowing an authent

CVE-2026-88255 MEDIUM
6.3 Sep 16

Duplicate-submission gate bypass in the Tempo payment method of ZenHive mpp (versions 0.2.0 through 0.16.1) lets an unau

CVE-2026-73829 MEDIUM
6.3 Aug 19

Payment-replay protection in ZenHive mpp's Tempo hash-credential path is defeated by a TOCTOU race condition, allowing a

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy