GHSA-VC9J-9WPH-QGHJ
Vulnerability from github – Published: 2026-09-22 20:34 – Updated: 2026-09-22 20:34Details
When the server acts as the fee_payer, mppx 0.6.27 copies the client-supplied EIP-2930 access list verbatim into the cosigned fee-payer transaction. The TypeScript SDK's fee-payer cosigning path accepts any access_list the client includes in the 0x78 FeePayerEnvelope without inspecting its length or contents.
Access list gas is charged intrinsically — before any opcode executes — regardless of whether the listed addresses are ever touched.
An attacker submits a valid transferWithMemo alongside fabricated address-only access list entries. The server validates calldata and gas parameters but never inspects access_list length. It cosigns and broadcasts a transaction that costs the fee-payer wallet N × 2,400 extra gas per request with no corresponding work performed on-chain.
At the default of 180 entries and 100 Gwei max_fee_per_gas, this inflates the fee-payer cost from the normal ~51,287 gas to ~483,287 gas — a 9.4× multiplier — while staying within the FeePayerPolicy cap of 500K gas, the Node.js 16 KB header limit, and the Moderato RPC's eth_call simulation budget (verified empirically at 180 entries).
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:
unzip mppx_typescript_PoC.zip
cd mppx_typescript
docker build -t mppx-typescript-access-list .
docker run --rm mppx-typescript-access-list
There are more details in mppx_typescript/README.md
Impact
A malicious client can force the server to pay ~9.4x the normal transaction fee. This dramatically increases operational costs and completely destroys the profit margin on low-cost items.
{
"affected": [
{
"package": {
"ecosystem": "npm",
"name": "mppx"
},
"ranges": [
{
"events": [
{
"introduced": "0"
},
{
"fixed": "0.8.2"
}
],
"type": "ECOSYSTEM"
}
]
}
],
"aliases": [
"CVE-2026-63628"
],
"database_specific": {
"cwe_ids": [
"CWE-20"
],
"github_reviewed": true,
"github_reviewed_at": "2026-09-22T20:34:19Z",
"nvd_published_at": null,
"severity": "MODERATE"
},
"details": "### Details\nWhen the server acts as the fee_payer, `mppx` 0.6.27 copies the client-supplied EIP-2930 access list verbatim into the cosigned fee-payer transaction. The TypeScript SDK\u0027s fee-payer cosigning path accepts any `access_list` the client includes in the 0x78 `FeePayerEnvelope` without inspecting its length or contents.\n\nAccess list gas is charged **intrinsically** \u2014 before any opcode executes \u2014 regardless of whether the listed addresses are ever touched.\n\nAn attacker submits a valid `transferWithMemo` alongside fabricated address-only access list entries. The server validates calldata and gas parameters but never inspects `access_list` length. It cosigns and broadcasts a transaction that costs the fee-payer wallet `N \u00d7 2,400` extra gas per request with no corresponding work performed on-chain.\n\nAt the default of 180 entries and 100 Gwei `max_fee_per_gas`, this inflates the fee-payer cost from the normal ~51,287 gas to ~483,287 gas \u2014 a **9.4\u00d7 multiplier** \u2014 while staying within the `FeePayerPolicy` cap of 500K gas, the Node.js 16 KB header limit, and the Moderato RPC\u0027s `eth_call` simulation budget (verified empirically at 180 entries).\n\n### PoC\nThe PoC is provided below. It is configured to reproduce the attack on Tempo Moderate testnet within a Docker environment. Download the PoC and run:\n```bash\nunzip mppx_typescript_PoC.zip\ncd mppx_typescript\ndocker build -t mppx-typescript-access-list .\ndocker run --rm mppx-typescript-access-list\n``` \nThere are more details in `mppx_typescript/README.md`\n\n### Impact\nA malicious client can force the server to pay ~**9.4x** the normal transaction fee. This dramatically increases operational costs and completely destroys the profit margin on low-cost items.",
"id": "GHSA-vc9j-9wph-qghj",
"modified": "2026-09-22T20:34:19Z",
"published": "2026-09-22T20:34:19Z",
"references": [
{
"type": "WEB",
"url": "https://github.com/wevm/mppx/security/advisories/GHSA-vc9j-9wph-qghj"
},
{
"type": "WEB",
"url": "https://github.com/wevm/mppx/pull/602"
},
{
"type": "WEB",
"url": "https://github.com/wevm/mppx/commit/24ddcca719ae282977d8747309ed1275ea282b25"
},
{
"type": "PACKAGE",
"url": "https://github.com/wevm/mppx"
},
{
"type": "WEB",
"url": "https://github.com/wevm/mppx/releases/tag/mppx@0.8.2"
}
],
"schema_version": "1.4.0",
"severity": [],
"summary": "mppx: Gas Draining with access list"
}
Sightings
| Author | Source | Type | Date | Other |
|---|
Nomenclature
- Seen: The vulnerability was mentioned, discussed, or observed by the user.
- Confirmed: The vulnerability has been validated from an analyst's perspective.
- Published Proof of Concept: A public proof of concept is available for this vulnerability.
- Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
- Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
- Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
- Not confirmed: The user expressed doubt about the validity of the vulnerability.
- Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.
The approach is described in our paper Mapping CVEs to MITRE ATT&CK Techniques: A Curated Gold-Set Classifier and the Limits of LLM-Assisted Label Expansion.
Browse all ATT&CK techniques and the vulnerabilities related to each.
Related by attack behaviour
Vulnerabilities whose description is nearest to this one in the vector space of the CIRCL/vulnerability-attack-technique-biencoder model. This is a similarity search over the bi-encoder space (plain cosine), not a classification, and it has no measured accuracy.