The Sponsor Approved the Payment Budget. The Same Signature Paid for a New Delegation and Access Key.
Two vulnerabilities disclosed the same day in ZenHive's mpp, the Machine Payment Protocol implementation used for AI agent and machine to machine commerce, show a fee payer sponsor validating a transaction's gas, fee and access list before co signing it, then co signing and broadcasting a complete transaction whose other fields it never inspected. One let a client attach EIP 7702 account delegations the sponsor ended up funding. The other let a client attach a key authorization the sponsor ended up funding. Both were fixed in the same release.
Event analysed: . This analysis was published on 6 September 2026.
No, and two vulnerabilities disclosed against ZenHive's mpp on 4 September 2026 and formally published by the CVE Program on 6 September 2026 as CVE 2026 82750 and CVE 2026 82751 show exactly what happens when a system built as though the answer were yes. mpp implements the Machine Payment Protocol, a fee payer sponsorship arrangement in which a server pays a client's gas so the client does not need its own funded account, an opt in deployment choice rather than something every mpp installation runs. When a server sponsors a Tempo payment, MPP.Methods.Tempo.FeePayerPolicy.measure and validate bound the client signed transaction's gas limit, its maximum fee per gas, its validity window and its access list before the sponsor co signs and broadcasts it. Neither function reads two further fields the same transaction envelope can carry. CVE 2026 82750 is the EIP 7702 authorization list the policy never inspects: each signed delegation entry in it is charged as intrinsic gas the sponsor pays, and each one also persistently upgrades the client's own account to delegated, smart contract style code, so a client submitting seven delegations moved the reporter's measured sponsored cost from about 46,575 gas to about 1,884,087 gas, roughly forty times higher, while also acquiring seven persistent delegations the sponsor's policy never evaluated. CVE 2026 82751 is the optional key_authorization field the same policy never inspects: a client attaching a signed key authorization, one key plus three token spending limits in the reporter's own reproduction, moved the sponsored cost from about 46,587 gas to about 1,808,700 gas, roughly thirty nine times higher, while the client kept a persistent access key, scoped by whatever limits it attached, that it paid nothing to provision and that may authorize further transactions afterward. Both carry a current CVSS 4.0 base score of 8.3, rated High, against mpp versions 0.2.0 up to but not including 0.16.1, and both are fixed in 0.16.1, the package's current published release. The shared fix, commit 0482572b47e1ffe1537ab80ab613d47b92833c2d, adds an authorization list check that rejects any non empty EIP 7702 authorization list for a sponsored transaction and fails closed on a malformed one, and a key authorization check that rejects the field by default unless a sponsor has explicitly pinned an expected, independently verified authorization to compare it against exactly. Read together, the two disclosures are not a gas accounting bug. They are the same signature semantic coverage failure occurring twice in one policy: a fee payer sponsor's own co signature legally covers every field of the transaction it broadcasts, but the policy decision that produced that co signature evaluated only a bounded subset of those fields, leaving two separate, persistent authority bearing fields to ride along on a signature meant to approve a payment.
A fee payer sponsorship arrangement exists so a client does not need its own funded account to transact. A server, the sponsor, agrees in advance to pay the gas for transactions that meet its own policy, then co signs and broadcasts whatever the client submits, provided that policy passes. The idea only works if the policy actually bounds what the sponsor ends up paying for and, more importantly, what the sponsor's own signature ends up authorizing. Two vulnerabilities disclosed against ZenHive's mpp, an Elixir implementation of the Machine Payment Protocol built for AI agent and machine to machine commerce, show a policy that bounded the payment and left the authorization unbounded.
One policy, two fields it never read
Both vulnerabilities sit in the same function pair, MPP.Methods.Tempo.FeePayerPolicy.measure and validate, which a server calls when it sponsors a Tempo transaction. Both advisories agree on what that policy does check: the transaction's gas limit, capped at 2,000,000 by the reporter's own description; its maximum fee per gas, capped at 100 Gwei; an expiring nonce and a bounded validity window; and an access list the policy requires to be empty. What it does not check is where the two disclosures diverge, and each names a different field in the same signed transaction envelope.
GHSA 5qrp r24c w6jr, published 4 September 2026 and assigned CVE 2026 82750, states that the policy never reads the transaction's EIP 7702 authorization list, described in independently corroborated technical accounts of the advisory under the field name tempo_authorization_list, while a separate independently corroborated account of the underlying CVE record describes the same field as aa_authorization_list. This record states both names rather than resolving the discrepancy, since it could not independently read either the advisory's own source text or the CVE record directly to settle which name is current, historical or specific to one description of the same field. Whichever name is correct, the mechanism is the same: EIP 7702 lets an Ethereum style account attach signed authorizations delegating its own code to a smart contract, a persistent change to what the account is, not a one time instruction. Every entry in the list is charged as fixed intrinsic gas before the sponsored payment call itself runs, so a client attaching delegations from throwaway authority keys makes the sponsor pay for each one. The reporter's own reproduction, at a default of seven entries, moved the transaction's cost from about 46,575 gas to about 1,884,087 gas, a multiplier the advisory states at roughly forty times, while remaining inside every bound the policy actually checks. The persistent effect, not the multiplier, is the part this record treats as the more important fact: each of those seven signed delegations survives the transaction and upgrades the client's own account to delegated, smart contract style code, funded entirely by a sponsor whose policy never asked whether any delegation was present at all.
GHSA rpwj vrf7 4x36, published the same day and assigned CVE 2026 82751, names a second, independent gap in the identical policy: an optional key_authorization field the transaction envelope can carry, which the policy also never inspects. A client attaching a signed key authorization causes the sponsor to pay the intrinsic gas and storage cost of provisioning a new access key on the client's own account, again while staying inside every field the policy does check. The reporter's own reproduction, one key plus three token spending limits, moved the cost from about 46,587 gas to about 1,808,700 gas, a multiplier the advisory states at roughly thirty nine times. The persistent effect here is a live, scoped access key the client acquired at no cost to itself, an access key that, subject to whatever limits were attached to it, may authorize further transactions on the client's account after this one settles.
Why this is not a gas accounting bug
It would be easy to read both advisories as instances of one underlying complaint, a fee payer that does not bound its own costs tightly enough, and mpp's own disclosure history gives that reading some surface plausibility: the same repository has published several earlier advisories about gas draining specifically, including one from 2 August 2026 addressing aggregate exposure across concurrent sponsored requests, a related but distinct issue this record does not fold into either CVE here. Reading these two disclosures the same way would miss what actually failed. The reported cost multipliers, roughly forty times and roughly thirty nine times, are a consequence of the failure, not its substance. A policy that bounded gas more tightly, say by capping the number of authorization list entries or key authorizations rather than by ignoring the fields outright, would still face the same underlying question: once any such entry is permitted at all, has anyone decided that the sponsor's payment authority extends to funding it, distinct from the sponsor's decision to fund the payment itself. The advisories' own reported fix answers that question by rejecting the fields outright, or by requiring a sponsor to name an exact authorization it expects in advance, not by raising a limit.
Budget authority is not effect authority
Moona Intelligence's own reading of both disclosures rests on a distinction the fee payer policy's own design silently erased. A fee payer sponsor holds financial sponsorship authority, the authority to decide which payments it will fund and up to what cost. It does not automatically hold delegation authority, the authority to decide whether a client's account may be upgraded to delegated code, or credential provisioning authority, the authority to decide whether a new access key may be provisioned on a client's account. Those are three separate capabilities, and a single co signature covering a single transaction envelope does not keep them separate on its own. Once a transaction format allows more than one effect bearing field inside one signed object, a policy that evaluates only the fields it was originally written to check is not thereby limiting what its own signature authorizes. It is only limiting what it noticed.
Both fixes, read against the same source this record independently reviewed, close the gap the same way rather than by tightening a limit. The merged commit, 0482572b47e1ffe1537ab80ab613d47b92833c2d, adds a check_authorization_list function that rejects any non empty EIP 7702 authorization list for a sponsored transaction outright and fails closed on a malformed authorization list representation, so an unparseable field blocks the transaction rather than passing silently. It adds a matching check_key_authorization function that rejects a key authorization by default, and adds a policy level expected_key_authorization field a sponsor may explicitly pin, in which case the function compares the transaction's own key authorization against that pinned value byte for byte rather than merely checking that some value is present. Both checks run inside the same validate path that produces the sponsor's co signature, and the repository's own added tests assert that measure, which estimates the sponsored cost, and validate, which decides whether to sign, apply the identical field level policy rather than one checking more than the other. The corrective, in other words, is not a lower gas ceiling. It is making every field the co signature will cover a field the policy actually decided about, either by refusing it outright or by binding it to an exact, independently verified value.
The Authority Provenance ledger
Client principal. Whoever constructed and signed the client side of the sponsored transaction, including its EIP 7702 authorization list or key_authorization field where either is present. Unnamed in either advisory; mpp's own stated purpose is HTTP 402 payment middleware for AI agents and machine to machine commerce, so this record treats the client as potentially an autonomous agent without asserting that every reported reproduction was one.
Sponsor principal. The server operating MPP.Methods.Tempo.FeePayerPolicy under a Tempo fee payer sponsorship configuration, an opt in deployment choice a server must have enabled for either vulnerability to apply. A deployment that does not sponsor Tempo payments does not run this policy path at all.
Transaction identity. The specific, client signed 0x76 envelope the sponsor co signs and broadcasts, carrying gas, fee, validity, access list, and optionally an EIP 7702 authorization list and a key_authorization field, all inside one signed object.
Primary payment effect. The transfer or call the sponsor's policy was written to evaluate: whether the requested gas, fee, validity window and access list fall inside the sponsor's configured bounds.
Budget. The gas limit, maximum fee per gas and validity window the policy actually checks before co signing, unchanged by either vulnerability.
EIP 7702 authorization list. Before the fix, unchecked. Each signed entry persistently delegates the client's own account to smart contract style code and is charged to the sponsor as intrinsic gas, subject to CVE 2026 82750.
Key authorization. Before the fix, unchecked. A signed key_authorization field persistently provisions a new access key on the client's account, funded by the sponsor's intrinsic gas payment, subject to CVE 2026 82751.
Signature. The sponsor's own co signature, which legally covers the complete transaction object it signs and broadcasts, including the authorization list and key authorization fields, whether or not its own policy evaluated either one.
Persistent effect. A delegated account, or a live access key with whatever scope was attached to it, both of which continue to exist and to be usable after the sponsored payment itself has settled, independent of anything the payment's own budget check evaluated.
What remains unknown
Neither advisory, on the material this record could independently verify, states that either vulnerability has been actively exploited, and this record does not claim otherwise. Neither states that every mpp deployment is affected regardless of configuration: fee payer sponsorship of Tempo payments is an opt in choice a server must enable. This record could not independently verify, from a primary CVE Program or NVD record directly, every metadata field search aggregated reporting attributes to the formal CVE entries, including a CWE 1284 classification distinct from the CWE 20 classification the GHSA advisories themselves state, and records both rather than resolving the discrepancy. Whether mpp's maintainers have published any narrowing advisory after 4 September 2026 addressing either mechanism specifically was not found by this record as of publication. Version 0.16.1, independently confirmed as mpp's current published release, is treated here as the current fixed version for both CVEs absent evidence of a later regression or narrowing advisory.
Where this sits next to what Moona Intelligence has already written
This is not the same failure this desk has already documented in agent payment authorization evidence, where the open question was whether a payment's own authorization decision could be evidenced afterward. Here the authorization decision itself was incomplete: two fields with independent, persistent authority consequences sat inside the same signed object as the payment and were never evaluated at all. It is closer in shape to this desk's reading of authority propagating across a chain of agents, in that both concern how far one authorization decision actually reaches once a system boundary or a compound object is involved, though propagation across agents and completeness within one signed transaction are distinct mechanisms this record keeps separate rather than merging.
Sources
This analysis interprets third-party reporting, research and announcements. Moona is not the original reporter of the underlying events.
Protocol evidence
This record does not assess these architectures. The connection runs through the Risk Registry requirement each one bears on, and these published authority architectures are what the evidence says about that requirement.
Protocol evidence related through AEW-030 Budget authorization treated as effect authorization
- Supports requirement
ChainIT Authority Protocol and Agent Subject Profile for pre execution authority validation
ChainIT
Requirement ChainIT states access to an organization or a Pactvera does not automatically authorize every action
ChainIT's own stated principle that access to an organization or a Pactvera does not automatically authorize every action is exactly the principle both ZenHive CVEs validate from the opposite direction: a sponsor's own access to co sign and pay for a transaction did not, on ChainIT's own stated doctrine, automatically authorize funding a persistent EIP 7702 delegation or a persistent key authorization riding inside the same signed object. This dataset treats both formally assigned CVEs as independent, real world evidence supporting the continued need for ChainIT's own stated requirement, distinct from any claim that ChainIT's own architecture implements or enforces it.
This record is the cited evidence for this relationship.
- Missing requirement
Agent Authorization Envelope (AAE)
L. K. Kroehl, CryptoKRI GmbH, individual submission to the IETF
Requirement MANDATE defines permitted purpose, action patterns and delegation rules
AAE's own reported MANDATE block defines a permitted purpose and allowed action patterns, distinct from CONSTRAINTS, which bounds a mandate with concrete numeric limits such as a spending ceiling. ZenHive's own fee payer policy implemented only a CONSTRAINTS style budget check, gas, fee, validity and access list, and named no MANDATE style action pattern distinguishing a plain payment from a payment that also carries an EIP 7702 authorization list or a key authorization entry. Had an equivalent MANDATE block been evaluated alongside the budget, either additional field would have needed its own permitted action pattern rather than merely fitting inside a cost ceiling. Recorded as a requirement this dataset's evaluated protocols name in the abstract but that ZenHive's own fee payer policy did not implement, not as a bypass of AAE itself, which this record does not treat as deployed here.
This record is the cited evidence for this relationship.
- Missing requirement
ChainIT Authority Protocol and Agent Subject Profile for pre execution authority validation
ChainIT
Requirement A canonical transaction digest is described binding payer, payee, destination, amount, currency or asset and payment rail to approval and execution
ChainIT's own reported canonical transaction digest binds payer, payee, destination, amount, currency and payment rail to one approval, but its own reported field list, as corroborated here, names payment fields rather than every effect bearing field a signed transaction envelope can carry. Nothing corroborated for ChainIT's own material states that its digest, or an equivalent binding, covers a persistent authority bearing field such as an EIP 7702 authorization list or a key authorization entry riding alongside a payment inside one signed object. Both ZenHive CVEs demonstrate exactly the gap this property does not yet close: a bounded payment field set was evaluated correctly while a further, independently effect bearing field in the same object was not evaluated at all. Recorded as a requirement this dataset's evaluated protocols do not yet extend to a fee payer's own multi field envelope, not as a bypass of a requirement ChainIT does state.
This record is the cited evidence for this relationship.
