mppx: Gas Draining with padding
cve-program · CVE-2026-63627
Publishedmppx is a TypeScript interface for machine payments protocol. Prior to 0.8.2, FeePayerPolicy in src/tempo/internal/fee-payer.ts used decodeFunctionData to validate fee-sponsored calldata but did not reject trailing bytes. A client could append nonzero padding that increased intrinsic calldata gas while gas_limit and max_fee_per_gas remained within policy caps, causing the server fee_payer wallet to pay substantially more than the decoded transaction required. The tested 16 KB header limit bounded the demonstrated padding to about 5,500 bytes and produced approximately five times the normal transaction fee. This issue is fixed in version 0.8.2.
Read the publisher's advisoryeuvd · EUVD-2026-84805
Publishedmppx is a TypeScript interface for machine payments protocol. Prior to 0.8.2, FeePayerPolicy in src/tempo/internal/fee-payer.ts used decodeFunctionData to validate fee-sponsored calldata but did not reject trailing bytes. A client could append nonzero padding that increased intrinsic calldata gas while gas_limit and max_fee_per_gas remained within policy caps, causing the server fee_payer wallet to pay substantially more than the decoded transaction required. The tested 16 KB header limit bounded the demonstrated padding to about 5,500 bytes and produced approximately five times the normal transaction fee. This issue is fixed in version 0.8.2.
Read the publisher's advisorynvd · CVE-2026-63627
Publishedmppx is a TypeScript interface for machine payments protocol. Prior to 0.8.2, FeePayerPolicy in src/tempo/internal/fee-payer.ts used decodeFunctionData to validate fee-sponsored calldata but did not reject trailing bytes. A client could append nonzero padding that increased intrinsic calldata gas while gas_limit and max_fee_per_gas remained within policy caps, causing the server fee_payer wallet to pay substantially more than the decoded transaction required. The tested 16 KB header limit bounded the demonstrated padding to about 5,500 bytes and produced approximately five times the normal transaction fee. This issue is fixed in version 0.8.2.
Read the publisher's advisoryosv · GHSA-727h-3vm5-qwq6
Published### Details When the server acts as the fee_payer, `mppx` 0.6.27 validates calldata using viem's `decodeFunctionData`, which is lenient about trailing bytes. The `FeePayerPolicy` caps `gas_limit` (≤ 2 M) and `max_fee_per_gas` (≤ 100 Gwei) but does **not** check calldata length. Tempo uses legacy calldata gas pricing: **16 gas per non-zero byte**. Appending `N` bytes of `0x01` padding inflates actual gas used by `N × 16` while keeping `gas_limit` and `max_fee_per_gas` within policy caps. The server cosigns and broadcasts the padded transaction, draining its fee-payer wallet. **Vulnerable code path:** `FeePayerPolicy` in `fee-payer.ts` (mppx 0.6.27) enforces `maxGas = 2_000_000` and `maxFeePerGas = 100 Gwei` but has no `calldata.length` bound. The policy check passes because the inflated gas comes from intrinsic calldata cost, not the declared `gas_limit`. **Note:** In the experiment, a 16 KB `max_header_length` is enforced, which caps the maximum effective padding at roughly 5,500 bytes. The default padding in this PoC (5,500 bytes) is within that limit. ### PoC The PoC is provided below. It is configured to reproduce the attack on Tempo Moderate testnet within a Docker environment. Download the PoC and run: ```bash unzip mppx_typescript_PoC.zip cd mppx_typescript docker build -t mppx-padding . docker run --rm mppx-padding ``` There are more details in `mppx_typescript/README.md` ### Impact A malicious client can force the server to pay ~**5x** the normal transaction fee. This dramatically increases operational costs and completely destroys the profit margin on low-cost items. Please provide a way to share the PoC in .zip format to you. Thank you!
Read the publisher's advisoryAffected versions, risk and source history
Related advisories and sources
Publishers link these advisories through the identifiers shown below. A shared identifier or date alone does not tell you whether your software is affected or whether the advisories describe the same cause.
CVE-2026-63627 · CVE overview and exploitation status
cve-program · CVE-2026-63627
- https://github.com/wevm/mppx/security/advisories/GHSA-727h-3vm5-qwq6
- https://github.com/wevm/mppx/pull/602
- https://github.com/wevm/mppx/commit/24ddcca719ae282977d8747309ed1275ea282b25
- https://github.com/wevm/mppx/releases/tag/[email protected]
euvd · EUVD-2026-84805
- https://github.com/wevm/mppx/security/advisories/GHSA-727h-3vm5-qwq6
- https://github.com/wevm/mppx/pull/602
- https://github.com/wevm/mppx/commit/24ddcca719ae282977d8747309ed1275ea282b25
- https://github.com/wevm/mppx/releases/tag/[email protected]
nvd · CVE-2026-63627
- https://github.com/wevm/mppx/commit/24ddcca719ae282977d8747309ed1275ea282b25
- https://github.com/wevm/mppx/pull/602
- https://github.com/wevm/mppx/releases/tag/[email protected]
- https://github.com/wevm/mppx/security/advisories/GHSA-727h-3vm5-qwq6
osv · GHSA-727h-3vm5-qwq6
Related changes
Linked by CVE identifierNo related changes are available here.