Your RSA-2048 keys break in 2030. Find every one of them before attackers do.
📦 npm
Not in CISA KEV

mppx: Gas Draining with access listGHSA-vc9j-9wph-qghj

Fix: wevm/mppx#602

GHSA-vc9j-9wph-qghj is a Improper Input Validation vulnerability in mppx. A fix is available for mppx — see the affected versions and patch details below.

Also known asCVE-2026-63628
Published
Updated
Affected
1 pkg
Patched
1 / 1
Exploits
None indexed
Exploitation data as of Oct 23, 2026 · OSV.dev, NVD, FIRST.org (EPSS)

Exploitation Status

Proof-of-concept exploit code exists

  • CISA’s SSVC triage found public proof-of-concept exploit code for this CVE, though no confirmed active exploitation.
  • CISA assesses this as automatable — exploitation doesn’t require manual, per-target effort, which raises the odds of mass scanning and opportunistic attacks.

Exploitation and automatability from CISA’s SSVC triage for GHSA-vc9j-9wph-qghj.

EPSS Exploitation Probability

via FIRST.org ↗
0.4%probability of exploitation in next 30 days
Lower Risk0.00%
Lower risk than most CVEs31th percentile — riskier than 31% of all scored CVEsHighest risk
0.00%0.29%0.59%0.88%0.4%0.4%Oct 26Oct 26

Probability of exploitation in the next 30 days, from FIRST.org EPSS.

Real-World Exposure

1 pkg affected

How broadly this vulnerability is actually deployed: weekly install volume shows current usage, and reverse-dependency count shows how many other packages break if it stays unpatched.

137other npm packages depend on this — each one inherits the vulnerability until it's patched upstream
mppxnpm
160Kdownloads / week

Description

Details

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 Packages

1 total 1 fixed
EcosystemPackageVulnerable rangeFix
📦npmmppxall versions0.8.2npm install mppx@0.8.2

Detection & mitigation playbook

Open-source dependency
  1. Detect

    Scan your dependency tree (package-lock.json, pnpm-lock.yaml, requirements.txt, go.sum, etc.) for mppx, including transitive dependencies — a direct dependency you never call can still pull in a vulnerable version.

  2. Fix

    Update mppx to 0.8.2 or later, then make sure no transitive (indirect) dependency still pins the vulnerable range — O3 confirms GHSA-vc9j-9wph-qghj is resolved across your whole dependency graph.

  3. Workarounds

    If you can't upgrade right away: gate or disable the affected feature, validate untrusted input at the boundary, and avoid passing attacker-controlled data into the vulnerable path. O3's runtime protection blocks exploitation in production as an interim safeguard until the upgrade lands.

Frequently Asked Questions

### Details 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
O3 Security · Impact-Aware SCA

Is GHSA-vc9j-9wph-qghj in your dependencies?

Find it across npm, including transitive dependencies.

mppx: Gas Draining with access list