CVE-2026-87119: mpp Tempo subscription key authorization is not bound to the issuing challenge, allowing a captured activation credential to be replayed
Authentication Bypass by Capture-replay in ZenHive mpp allows an attacker holding a captured subscription activation credential to charge the payer repeatedly.
The payer signs a Tempo KeyAuthorization over the chain id, key type, key id, expiry, limits and scopes only, with nothing tying it to the challenge that prompted it. MPP.Methods.Tempo.KeyAuthorization.verify/3 in lib/mpp/methods/tempo/keyauthorization.ex pins each of those signed fields against the subscription request, and the access key it pins is a static per-endpoint server key, so one signed authorization verifies against every challenge the server issues for the same subscription terms. MPP.Methods.Tempo.Subscription.activate/4 deduplicates activations by challenge id, so presenting the captured credential under a fresh challenge produces a different dedup key, claimactivation succeeds, and the subscription transaction is built and broadcast again. Each replay charges the payer's wallet a new first-period settlement and re-authorizes the server key, bounded only by the subscription expiry and the chain's own semantics for re-installing an existing key.
This issue affects mpp: from 0.14.0 before 0.16.2.
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
mppto a version that resolves this vulnerability.Fixed in 0.16.2
Event History
Frequently Asked Questions
Which deployments are affected?
Deployments using mpp versions 0.14.0 through versions before 0.16.2 are affected. The vulnerable behavior is in Tempo subscription activation handling.
What does an attacker need to exploit this?
An attacker needs a captured subscription activation credential, specifically a payer-signed Tempo KeyAuthorization for the relevant subscription terms. Because the authorization is not bound to the issuing challenge, it can be submitted with fresh challenges while it remains valid.
How can replaying the credential cause additional charges?
A fresh challenge produces a different activation deduplication key, allowing activation to succeed again and a new subscription transaction to be built and broadcast. Each successful replay can charge the payer a new first-period settlement and re-authorize the server key, until subscription expiry or chain behavior prevents further re-installation.