Skip to content

feat: validate eth_sendTransaction / eth_signTransaction params - #9482

Merged
OGPoyraz merged 23 commits into
mainfrom
ogp/CONF-1662
Aug 3, 2026
Merged

feat: validate eth_sendTransaction / eth_signTransaction params#9482
OGPoyraz merged 23 commits into
mainfrom
ogp/CONF-1662

Conversation

@OGPoyraz

@OGPoyraz OGPoyraz commented Jul 13, 2026

Copy link
Copy Markdown
Member

Explanation

Malicious dapps can send eth_sendTransaction with a valid-looking payload plus a deeply-nested junk field (e.g. test.b.b.b... ~1200 levels). Downstream normalization in @metamask/transaction-controller recurses into these params and throws RangeError: Maximum call stack size exceeded. When this crash happens inside the extension/mobile PPOM middleware it short-circuits the security-scan pipeline: the request never reaches the Security Alerts API, and the user sees the confirmation without a Blockaid scan.

The same class of attack was fixed for eth_signTypedData_v4 in #8526 by rejecting requests with extraneous top-level keys. This PR applies the equivalent guardrail to transaction methods.

Changes

  • New validateTransactionParams(params) in src/utils/validation.ts, exported from the package. Rejects with rpcErrors.invalidInput() when:
    • params is not a plain object, or
    • contains a top-level key outside the dapp-facing subset of TransactionParams (accessList, authorizationList, chainId, data, from, gas, gasLimit, gasPrice, maxFeePerGas, maxPriorityFeePerGas, nonce, to, type, value), or
    • nests beyond depth 10 anywhere inside the params tree (legitimate params, including accessList / authorizationList, are ≤4 levels deep).
  • Wired into the eth_sendTransaction and eth_signTransaction handlers in createWalletMiddleware, before validateAndNormalizeKeyholder.
  • Also exported from index.ts so extension/mobile PPOM middleware can gate params before their own normalizeTransactionParams call (which is where the WASM crash actually originates in clients).

Design notes

  • Reject vs. strip: matches feat: adding more validations for types sign v4 messages #8526 — reject the whole request with invalidInput. Stripping silently would hide the attack pattern from telemetry.
  • Allowlist scope: intentionally omits internal-only fields on TransactionParams (estimateGasError, estimatedBaseFee, estimateSuggested, estimateUsed, gasUsed) — dapps should not be able to inject those.
  • Depth of 10: ~2-3× headroom over legitimate use. Change if any real dapp turns out to nest deeper.

References

Checklist

  • I've updated the test suite for new or updated code as appropriate
  • I've updated documentation (JSDoc, Markdown, etc.) for new or updated code as appropriate
  • I've communicated my changes to consumers by updating changelogs for packages I've changed
  • I've introduced breaking changes in this PR and have prepared draft pull requests for clients and consumer packages to resolve them

Note

High Risk
Breaking RPC validation on security-critical transaction paths may reject previously accepted dapp payloads; changes directly target bypass of Blockaid/PPOM scanning.

Overview
BREAKING: eth_sendTransaction and eth_signTransaction now run new validateTransactionParams before address checks. Requests must match a fixed transaction field schema (no extra top-level keys, typed accessList / authorizationList, quantity fields as hex string or number) and stay under 200 KB serialized size or they fail with invalid params.

The helper is exported from the package so clients can reuse the same guard ahead of normalization/PPOM. This mirrors the earlier eth_signTypedData_v4 hardening and blocks junk nested fields and padded payloads that could crash downstream normalization and skip security scans.

Reviewed by Cursor Bugbot for commit a4e603a. Bugbot is set up for automated code reviews on this repo. Configure here.

} from './methods/wallet-get-supported-execution-permissions';
export * from './providerAsMiddleware';
export * from './retryOnEmpty';
export { validateTransactionParams } from './utils/validation';

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Extension/mobile PPOM middleware can gate params before their own normalizeTransactionParams call (which is where the WASM crash actually originates in clients).

@OGPoyraz
OGPoyraz marked this pull request as ready for review July 13, 2026 08:59
@OGPoyraz
OGPoyraz requested review from a team as code owners July 13, 2026 08:59
@OGPoyraz
OGPoyraz temporarily deployed to default-branch July 13, 2026 08:59 — with GitHub Actions Inactive
@OGPoyraz

Copy link
Copy Markdown
Member Author

@metamaskbot publish-preview

@github-actions

Copy link
Copy Markdown
Contributor

Preview builds have been published. Learn how to use preview builds in other projects.

Expand for full list of packages and versions.
@metamask-previews/account-tree-controller@7.5.5-preview-56569acf0
@metamask-previews/accounts-controller@39.0.5-preview-56569acf0
@metamask-previews/address-book-controller@7.1.2-preview-56569acf0
@metamask-previews/ai-controllers@0.8.0-preview-56569acf0
@metamask-previews/analytics-controller@1.2.1-preview-56569acf0
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-56569acf0
@metamask-previews/announcement-controller@8.1.0-preview-56569acf0
@metamask-previews/app-metadata-controller@2.0.1-preview-56569acf0
@metamask-previews/approval-controller@9.0.2-preview-56569acf0
@metamask-previews/assets-controller@10.2.1-preview-56569acf0
@metamask-previews/assets-controllers@109.4.1-preview-56569acf0
@metamask-previews/authenticated-user-storage@3.0.1-preview-56569acf0
@metamask-previews/base-controller@9.1.0-preview-56569acf0
@metamask-previews/base-data-service@0.1.3-preview-56569acf0
@metamask-previews/bitcoin-regtest-up@1.0.0-preview-56569acf0
@metamask-previews/bridge-controller@77.4.1-preview-56569acf0
@metamask-previews/bridge-status-controller@74.1.2-preview-56569acf0
@metamask-previews/build-utils@3.0.4-preview-56569acf0
@metamask-previews/chain-agnostic-permission@1.7.0-preview-56569acf0
@metamask-previews/chomp-api-service@3.1.0-preview-56569acf0
@metamask-previews/claims-controller@0.5.3-preview-56569acf0
@metamask-previews/client-controller@1.0.1-preview-56569acf0
@metamask-previews/client-utils@1.1.0-preview-56569acf0
@metamask-previews/compliance-controller@2.1.0-preview-56569acf0
@metamask-previews/composable-controller@12.0.1-preview-56569acf0
@metamask-previews/config-registry-controller@0.4.1-preview-56569acf0
@metamask-previews/connectivity-controller@0.3.0-preview-56569acf0
@metamask-previews/controller-utils@12.3.0-preview-56569acf0
@metamask-previews/core-backend@6.5.0-preview-56569acf0
@metamask-previews/delegation-controller@3.0.2-preview-56569acf0
@metamask-previews/earn-controller@12.2.2-preview-56569acf0
@metamask-previews/eip-5792-middleware@3.0.5-preview-56569acf0
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.1-preview-56569acf0
@metamask-previews/eip1193-permission-middleware@2.0.1-preview-56569acf0
@metamask-previews/ens-controller@19.1.5-preview-56569acf0
@metamask-previews/eth-block-tracker@15.0.1-preview-56569acf0
@metamask-previews/eth-json-rpc-middleware@23.1.3-preview-56569acf0
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-56569acf0
@metamask-previews/foundryup@1.0.1-preview-56569acf0
@metamask-previews/gas-fee-controller@26.2.4-preview-56569acf0
@metamask-previews/gator-permissions-controller@4.2.3-preview-56569acf0
@metamask-previews/geolocation-controller@0.1.3-preview-56569acf0
@metamask-previews/java-tron-up@1.0.0-preview-56569acf0
@metamask-previews/json-rpc-engine@10.5.0-preview-56569acf0
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-56569acf0
@metamask-previews/keyring-controller@27.1.0-preview-56569acf0
@metamask-previews/local-node-utils@1.0.0-preview-56569acf0
@metamask-previews/logging-controller@8.0.2-preview-56569acf0
@metamask-previews/message-manager@14.1.2-preview-56569acf0
@metamask-previews/messenger@2.0.0-preview-56569acf0
@metamask-previews/messenger-cli@0.2.0-preview-56569acf0
@metamask-previews/money-account-api-data-service@0.1.0-preview-56569acf0
@metamask-previews/money-account-balance-service@2.2.0-preview-56569acf0
@metamask-previews/money-account-controller@0.3.3-preview-56569acf0
@metamask-previews/money-account-upgrade-controller@2.2.1-preview-56569acf0
@metamask-previews/multichain-account-service@13.0.0-preview-56569acf0
@metamask-previews/multichain-api-middleware@4.0.1-preview-56569acf0
@metamask-previews/multichain-network-controller@3.2.1-preview-56569acf0
@metamask-previews/multichain-transactions-controller@7.1.1-preview-56569acf0
@metamask-previews/name-controller@9.1.2-preview-56569acf0
@metamask-previews/network-connection-banner-controller@0.1.0-preview-56569acf0
@metamask-previews/network-controller@34.0.0-preview-56569acf0
@metamask-previews/network-enablement-controller@5.5.0-preview-56569acf0
@metamask-previews/notification-services-controller@25.0.0-preview-56569acf0
@metamask-previews/passkey-controller@2.0.1-preview-56569acf0
@metamask-previews/permission-controller@13.1.1-preview-56569acf0
@metamask-previews/permission-log-controller@5.1.0-preview-56569acf0
@metamask-previews/perps-controller@9.2.1-preview-56569acf0
@metamask-previews/phishing-controller@17.2.1-preview-56569acf0
@metamask-previews/platform-api-docs@0.0.0-preview-56569acf0
@metamask-previews/polling-controller@16.0.8-preview-56569acf0
@metamask-previews/preferences-controller@23.1.0-preview-56569acf0
@metamask-previews/profile-metrics-controller@4.0.2-preview-56569acf0
@metamask-previews/profile-sync-controller@28.3.0-preview-56569acf0
@metamask-previews/ramps-controller@16.0.0-preview-56569acf0
@metamask-previews/rate-limit-controller@7.0.1-preview-56569acf0
@metamask-previews/react-data-query@0.2.1-preview-56569acf0
@metamask-previews/remote-feature-flag-controller@4.2.2-preview-56569acf0
@metamask-previews/sample-controllers@5.0.3-preview-56569acf0
@metamask-previews/seedless-onboarding-controller@10.0.3-preview-56569acf0
@metamask-previews/selected-network-controller@26.1.5-preview-56569acf0
@metamask-previews/shield-controller@5.1.3-preview-56569acf0
@metamask-previews/signature-controller@39.2.7-preview-56569acf0
@metamask-previews/smart-transactions-controller@25.0.1-preview-56569acf0
@metamask-previews/snap-account-service@2.0.0-preview-56569acf0
@metamask-previews/social-controllers@2.4.0-preview-56569acf0
@metamask-previews/solana-test-validator-up@1.0.0-preview-56569acf0
@metamask-previews/stellar-quickstart-up@0.0.0-preview-56569acf0
@metamask-previews/storage-service@1.0.2-preview-56569acf0
@metamask-previews/subscription-controller@6.2.1-preview-56569acf0
@metamask-previews/transaction-controller@69.0.0-preview-56569acf0
@metamask-previews/transaction-pay-controller@24.0.3-preview-56569acf0
@metamask-previews/user-operation-controller@41.2.7-preview-56569acf0
@metamask-previews/wallet@7.0.1-preview-56569acf0
@metamask-previews/wallet-cli@0.0.0-preview-56569acf0

@matthewwalsh0
matthewwalsh0 requested a review from jpuri July 13, 2026 14:10
jpuri
jpuri previously approved these changes Jul 13, 2026
Comment thread packages/eth-json-rpc-middleware/src/utils/validation.ts
@OGPoyraz

Copy link
Copy Markdown
Member Author

@metamaskbot publish-preview

@github-actions

Copy link
Copy Markdown
Contributor

Preview builds have been published. Learn how to use preview builds in other projects.

Expand for full list of packages and versions.
@metamask-previews/account-tree-controller@7.5.5-preview-f9a776109
@metamask-previews/accounts-controller@39.0.5-preview-f9a776109
@metamask-previews/address-book-controller@7.1.2-preview-f9a776109
@metamask-previews/ai-controllers@0.8.0-preview-f9a776109
@metamask-previews/analytics-controller@1.2.1-preview-f9a776109
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-f9a776109
@metamask-previews/announcement-controller@8.1.0-preview-f9a776109
@metamask-previews/app-metadata-controller@2.0.1-preview-f9a776109
@metamask-previews/approval-controller@9.0.2-preview-f9a776109
@metamask-previews/assets-controller@10.2.1-preview-f9a776109
@metamask-previews/assets-controllers@109.4.1-preview-f9a776109
@metamask-previews/authenticated-user-storage@3.0.1-preview-f9a776109
@metamask-previews/base-controller@9.1.0-preview-f9a776109
@metamask-previews/base-data-service@0.1.3-preview-f9a776109
@metamask-previews/bitcoin-regtest-up@1.0.0-preview-f9a776109
@metamask-previews/bridge-controller@77.4.1-preview-f9a776109
@metamask-previews/bridge-status-controller@74.1.2-preview-f9a776109
@metamask-previews/build-utils@3.0.4-preview-f9a776109
@metamask-previews/chain-agnostic-permission@1.7.0-preview-f9a776109
@metamask-previews/chomp-api-service@3.1.0-preview-f9a776109
@metamask-previews/claims-controller@0.5.3-preview-f9a776109
@metamask-previews/client-controller@1.0.1-preview-f9a776109
@metamask-previews/client-utils@1.1.0-preview-f9a776109
@metamask-previews/compliance-controller@2.1.0-preview-f9a776109
@metamask-previews/composable-controller@12.0.1-preview-f9a776109
@metamask-previews/config-registry-controller@0.4.1-preview-f9a776109
@metamask-previews/connectivity-controller@0.3.0-preview-f9a776109
@metamask-previews/controller-utils@12.3.0-preview-f9a776109
@metamask-previews/core-backend@6.5.0-preview-f9a776109
@metamask-previews/delegation-controller@3.0.2-preview-f9a776109
@metamask-previews/earn-controller@12.2.2-preview-f9a776109
@metamask-previews/eip-5792-middleware@3.0.5-preview-f9a776109
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.1-preview-f9a776109
@metamask-previews/eip1193-permission-middleware@2.0.1-preview-f9a776109
@metamask-previews/ens-controller@19.1.5-preview-f9a776109
@metamask-previews/eth-block-tracker@15.0.1-preview-f9a776109
@metamask-previews/eth-json-rpc-middleware@23.1.3-preview-f9a776109
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-f9a776109
@metamask-previews/foundryup@1.0.1-preview-f9a776109
@metamask-previews/gas-fee-controller@26.2.4-preview-f9a776109
@metamask-previews/gator-permissions-controller@4.2.3-preview-f9a776109
@metamask-previews/geolocation-controller@0.1.3-preview-f9a776109
@metamask-previews/java-tron-up@1.0.0-preview-f9a776109
@metamask-previews/json-rpc-engine@10.5.0-preview-f9a776109
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-f9a776109
@metamask-previews/keyring-controller@27.1.0-preview-f9a776109
@metamask-previews/local-node-utils@1.0.0-preview-f9a776109
@metamask-previews/logging-controller@8.0.2-preview-f9a776109
@metamask-previews/message-manager@14.1.2-preview-f9a776109
@metamask-previews/messenger@2.0.0-preview-f9a776109
@metamask-previews/messenger-cli@0.2.0-preview-f9a776109
@metamask-previews/money-account-api-data-service@0.1.0-preview-f9a776109
@metamask-previews/money-account-balance-service@2.2.0-preview-f9a776109
@metamask-previews/money-account-controller@0.3.3-preview-f9a776109
@metamask-previews/money-account-upgrade-controller@2.2.1-preview-f9a776109
@metamask-previews/multichain-account-service@13.0.0-preview-f9a776109
@metamask-previews/multichain-api-middleware@4.0.1-preview-f9a776109
@metamask-previews/multichain-network-controller@3.2.1-preview-f9a776109
@metamask-previews/multichain-transactions-controller@7.1.1-preview-f9a776109
@metamask-previews/name-controller@9.1.2-preview-f9a776109
@metamask-previews/network-connection-banner-controller@0.1.0-preview-f9a776109
@metamask-previews/network-controller@34.0.0-preview-f9a776109
@metamask-previews/network-enablement-controller@5.5.0-preview-f9a776109
@metamask-previews/notification-services-controller@25.0.0-preview-f9a776109
@metamask-previews/passkey-controller@2.0.1-preview-f9a776109
@metamask-previews/permission-controller@13.1.1-preview-f9a776109
@metamask-previews/permission-log-controller@5.1.0-preview-f9a776109
@metamask-previews/perps-controller@9.2.1-preview-f9a776109
@metamask-previews/phishing-controller@17.2.1-preview-f9a776109
@metamask-previews/platform-api-docs@0.0.0-preview-f9a776109
@metamask-previews/polling-controller@16.0.8-preview-f9a776109
@metamask-previews/preferences-controller@23.1.0-preview-f9a776109
@metamask-previews/profile-metrics-controller@4.0.2-preview-f9a776109
@metamask-previews/profile-sync-controller@28.3.0-preview-f9a776109
@metamask-previews/ramps-controller@16.0.0-preview-f9a776109
@metamask-previews/rate-limit-controller@7.0.1-preview-f9a776109
@metamask-previews/react-data-query@0.2.1-preview-f9a776109
@metamask-previews/remote-feature-flag-controller@4.2.2-preview-f9a776109
@metamask-previews/sample-controllers@5.0.3-preview-f9a776109
@metamask-previews/seedless-onboarding-controller@10.0.3-preview-f9a776109
@metamask-previews/selected-network-controller@26.1.5-preview-f9a776109
@metamask-previews/shield-controller@5.1.3-preview-f9a776109
@metamask-previews/signature-controller@39.2.7-preview-f9a776109
@metamask-previews/smart-transactions-controller@25.0.1-preview-f9a776109
@metamask-previews/snap-account-service@2.0.0-preview-f9a776109
@metamask-previews/social-controllers@2.4.0-preview-f9a776109
@metamask-previews/solana-test-validator-up@1.0.0-preview-f9a776109
@metamask-previews/stellar-quickstart-up@0.0.0-preview-f9a776109
@metamask-previews/storage-service@1.0.2-preview-f9a776109
@metamask-previews/subscription-controller@6.2.1-preview-f9a776109
@metamask-previews/transaction-controller@69.0.0-preview-f9a776109
@metamask-previews/transaction-pay-controller@24.0.3-preview-f9a776109
@metamask-previews/user-operation-controller@41.2.7-preview-f9a776109
@metamask-previews/wallet@7.0.1-preview-f9a776109
@metamask-previews/wallet-cli@0.0.0-preview-f9a776109

@OGPoyraz
OGPoyraz requested a review from jpuri July 14, 2026 12:42
jpuri
jpuri previously approved these changes Jul 14, 2026
Comment thread packages/eth-json-rpc-middleware/src/wallet.test.ts Outdated
Comment thread packages/eth-json-rpc-middleware/src/wallet.test.ts Outdated
Comment thread packages/eth-json-rpc-middleware/CHANGELOG.md Outdated
Comment thread packages/eth-json-rpc-middleware/src/utils/validation.test.ts
Comment thread packages/eth-json-rpc-middleware/src/utils/validation.test.ts Outdated
Comment thread packages/eth-json-rpc-middleware/src/utils/validation.ts Outdated
Comment thread packages/eth-json-rpc-middleware/src/utils/validation.ts
Comment thread packages/eth-json-rpc-middleware/src/utils/validation.ts
@OGPoyraz

Copy link
Copy Markdown
Member Author

@metamaskbot publish-preview

@github-actions

Copy link
Copy Markdown
Contributor

Preview builds have been published. Learn how to use preview builds in other projects.

Expand for full list of packages and versions.
@metamask-previews/account-tree-controller@7.5.5-preview-981855845
@metamask-previews/accounts-controller@39.0.5-preview-981855845
@metamask-previews/address-book-controller@7.1.2-preview-981855845
@metamask-previews/ai-controllers@0.8.0-preview-981855845
@metamask-previews/analytics-controller@1.2.1-preview-981855845
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-981855845
@metamask-previews/announcement-controller@8.1.0-preview-981855845
@metamask-previews/app-metadata-controller@2.0.1-preview-981855845
@metamask-previews/approval-controller@9.0.2-preview-981855845
@metamask-previews/assets-controller@10.2.1-preview-981855845
@metamask-previews/assets-controllers@109.4.1-preview-981855845
@metamask-previews/authenticated-user-storage@3.0.1-preview-981855845
@metamask-previews/base-controller@9.1.0-preview-981855845
@metamask-previews/base-data-service@0.1.3-preview-981855845
@metamask-previews/bitcoin-regtest-up@1.0.0-preview-981855845
@metamask-previews/bridge-controller@77.4.1-preview-981855845
@metamask-previews/bridge-status-controller@74.1.2-preview-981855845
@metamask-previews/build-utils@3.0.4-preview-981855845
@metamask-previews/chain-agnostic-permission@1.7.0-preview-981855845
@metamask-previews/chomp-api-service@3.1.0-preview-981855845
@metamask-previews/claims-controller@0.5.3-preview-981855845
@metamask-previews/client-controller@1.0.1-preview-981855845
@metamask-previews/client-utils@1.1.0-preview-981855845
@metamask-previews/compliance-controller@2.1.0-preview-981855845
@metamask-previews/composable-controller@12.0.1-preview-981855845
@metamask-previews/config-registry-controller@0.4.1-preview-981855845
@metamask-previews/connectivity-controller@0.3.0-preview-981855845
@metamask-previews/controller-utils@12.3.0-preview-981855845
@metamask-previews/core-backend@6.5.0-preview-981855845
@metamask-previews/delegation-controller@3.0.2-preview-981855845
@metamask-previews/earn-controller@12.2.2-preview-981855845
@metamask-previews/eip-5792-middleware@3.0.5-preview-981855845
@metamask-previews/eip-7702-internal-rpc-middleware@0.1.1-preview-981855845
@metamask-previews/eip1193-permission-middleware@2.0.1-preview-981855845
@metamask-previews/ens-controller@19.1.5-preview-981855845
@metamask-previews/eth-block-tracker@15.0.1-preview-981855845
@metamask-previews/eth-json-rpc-middleware@23.1.3-preview-981855845
@metamask-previews/eth-json-rpc-provider@6.0.1-preview-981855845
@metamask-previews/foundryup@1.0.1-preview-981855845
@metamask-previews/gas-fee-controller@26.2.4-preview-981855845
@metamask-previews/gator-permissions-controller@4.2.3-preview-981855845
@metamask-previews/geolocation-controller@0.1.3-preview-981855845
@metamask-previews/java-tron-up@1.0.0-preview-981855845
@metamask-previews/json-rpc-engine@10.5.0-preview-981855845
@metamask-previews/json-rpc-middleware-stream@8.0.8-preview-981855845
@metamask-previews/keyring-controller@27.1.0-preview-981855845
@metamask-previews/local-node-utils@1.0.0-preview-981855845
@metamask-previews/logging-controller@8.0.2-preview-981855845
@metamask-previews/message-manager@14.1.2-preview-981855845
@metamask-previews/messenger@2.0.0-preview-981855845
@metamask-previews/messenger-cli@0.2.0-preview-981855845
@metamask-previews/money-account-api-data-service@0.1.0-preview-981855845
@metamask-previews/money-account-balance-service@2.2.0-preview-981855845
@metamask-previews/money-account-controller@0.3.3-preview-981855845
@metamask-previews/money-account-upgrade-controller@2.2.1-preview-981855845
@metamask-previews/multichain-account-service@13.0.0-preview-981855845
@metamask-previews/multichain-api-middleware@4.0.1-preview-981855845
@metamask-previews/multichain-network-controller@3.2.1-preview-981855845
@metamask-previews/multichain-transactions-controller@7.1.1-preview-981855845
@metamask-previews/name-controller@9.1.2-preview-981855845
@metamask-previews/network-connection-banner-controller@0.1.0-preview-981855845
@metamask-previews/network-controller@34.0.0-preview-981855845
@metamask-previews/network-enablement-controller@5.5.0-preview-981855845
@metamask-previews/notification-services-controller@25.0.0-preview-981855845
@metamask-previews/passkey-controller@2.0.1-preview-981855845
@metamask-previews/permission-controller@13.1.1-preview-981855845
@metamask-previews/permission-log-controller@5.1.0-preview-981855845
@metamask-previews/perps-controller@9.2.1-preview-981855845
@metamask-previews/phishing-controller@17.2.1-preview-981855845
@metamask-previews/platform-api-docs@0.0.0-preview-981855845
@metamask-previews/polling-controller@16.0.8-preview-981855845
@metamask-previews/preferences-controller@23.1.0-preview-981855845
@metamask-previews/profile-metrics-controller@4.0.2-preview-981855845
@metamask-previews/profile-sync-controller@28.3.0-preview-981855845
@metamask-previews/ramps-controller@16.0.0-preview-981855845
@metamask-previews/rate-limit-controller@7.0.1-preview-981855845
@metamask-previews/react-data-query@0.2.1-preview-981855845
@metamask-previews/remote-feature-flag-controller@4.2.2-preview-981855845
@metamask-previews/sample-controllers@5.0.3-preview-981855845
@metamask-previews/seedless-onboarding-controller@10.0.3-preview-981855845
@metamask-previews/selected-network-controller@26.1.5-preview-981855845
@metamask-previews/shield-controller@5.1.3-preview-981855845
@metamask-previews/signature-controller@39.2.7-preview-981855845
@metamask-previews/smart-transactions-controller@25.0.1-preview-981855845
@metamask-previews/snap-account-service@2.0.0-preview-981855845
@metamask-previews/social-controllers@2.4.0-preview-981855845
@metamask-previews/solana-test-validator-up@1.0.0-preview-981855845
@metamask-previews/stellar-quickstart-up@0.0.0-preview-981855845
@metamask-previews/storage-service@1.0.2-preview-981855845
@metamask-previews/subscription-controller@6.2.1-preview-981855845
@metamask-previews/transaction-controller@69.0.0-preview-981855845
@metamask-previews/transaction-pay-controller@24.0.3-preview-981855845
@metamask-previews/user-operation-controller@41.2.7-preview-981855845
@metamask-previews/wallet@7.0.1-preview-981855845
@metamask-previews/wallet-cli@0.0.0-preview-981855845

@mcmire mcmire left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks good to me, but I would like another review from my team just to be safe.

*/
export function validateTransactionParams(params: unknown): void {
if (Array.isArray(params)) {
throw rpcErrors.invalidInput();

@FrederikBolding FrederikBolding Jul 15, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe we use invalidParams elsewhere when parameters have an unexpected shape

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In fact, we don't need this at all as we are validating vs TransactionParamsStruct so removed this.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also here, I wouldn't recommend we change any errors or messages at this stage if possible, since the validation we'd like to add is very limited.

Comment thread packages/eth-json-rpc-middleware/src/utils/validation.ts Outdated
Comment thread packages/eth-json-rpc-middleware/src/utils/validation.ts Outdated
Comment thread packages/eth-json-rpc-middleware/src/utils/validation.ts Outdated
Comment thread packages/eth-json-rpc-middleware/src/utils/validation.ts Outdated
Comment thread packages/eth-json-rpc-middleware/src/utils/validation.ts Outdated
Comment thread packages/eth-json-rpc-middleware/src/utils/validation.ts Outdated
@OGPoyraz
OGPoyraz added this pull request to the merge queue Aug 3, 2026
Merged via the queue into main with commit d62554e Aug 3, 2026
208 checks passed
@OGPoyraz
OGPoyraz deleted the ogp/CONF-1662 branch August 3, 2026 10:55
@OGPoyraz OGPoyraz mentioned this pull request Aug 3, 2026
4 tasks
pull Bot pushed a commit to Reality2byte/core that referenced this pull request Aug 3, 2026
## Explanation

Release `1169.0.0` with version bumps for:

- **`@metamask/eth-json-rpc-middleware`** `23.1.3` → `24.0.0` (major)
- **`@metamask/network-controller`** `35.0.0` → `35.0.1` (patch)

### `@metamask/eth-json-rpc-middleware@24.0.0`

**Breaking:** Add strict validation for `eth_sendTransaction` and
`eth_signTransaction` params
([MetaMask#9482](MetaMask#9482))
- Reject requests whose params do not match the transaction schema
(extraneous top-level keys, ill-typed fields such as non-hex
`to`/`data`, malformed `accessList` / `authorizationList` entries) or
exceed `MAX_TRANSACTION_PARAMS_SIZE_BYTES` when serialized
- Prevents downstream normalization / PPOM WASM from crashing on
deeply-nested junk fields or padded payloads and silently bypassing
security scans

Other changes:
- Bump `@metamask/utils` from `^11.9.0` to `^11.11.0`
([MetaMask#9074](MetaMask#9074))
- Bump `@metamask/json-rpc-engine` from `^10.2.4` to `^10.5.0`
([MetaMask#8661](MetaMask#8661),
[MetaMask#8746](MetaMask#8746),
[MetaMask#8753](MetaMask#8753))
- Bump `@metamask/message-manager` from `^14.1.1` to `^14.1.2`
([MetaMask#8755](MetaMask#8755))
- Drop `pify` dependency, which was no longer used in source
([MetaMask#9064](MetaMask#9064))

### `@metamask/network-controller@35.0.1`

- Bump `@metamask/eth-json-rpc-middleware` from `^23.1.3` to `^24.0.0`
([MetaMask#9758](MetaMask#9758))

## References

- [MetaMask#9482](MetaMask#9482) — feat: validate
`eth_sendTransaction` / `eth_signTransaction` params

## Checklist

- [ ] I've updated the test suite for new or updated code as appropriate
- [ ] I've updated documentation (JSDoc, Markdown, etc.) for new or
updated code as appropriate
- [x] I've communicated my changes to consumers by [updating changelogs
for packages I've
changed](https://github.com/MetaMask/core/tree/main/docs/processes/updating-changelogs.md)
- [ ] I've introduced [breaking
changes](https://github.com/MetaMask/core/tree/main/docs/processes/breaking-changes.md)
in this PR and have prepared draft pull requests for clients and
consumer packages to resolve them

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Medium Risk**
> The release propagates a major middleware bump that rejects previously
accepted malformed transaction RPC params; integrators on strict
validation paths should expect possible breakage for non-conformant
dapps, though this PR itself only changes versions and docs.
> 
> **Overview**
> This PR cuts **monorepo release `1169.0.0`** by versioning packages
and aligning dependents—no application source changes beyond manifests
and changelogs.
> 
> **`@metamask/eth-json-rpc-middleware@24.0.0`** is published with
changelog release notes for the existing **breaking** strict validation
on `eth_sendTransaction` / `eth_signTransaction` (schema, size limits,
rejection of malformed or oversized params).
> 
> **`@metamask/network-controller@35.0.1`** bumps its dependency on that
middleware from `^23.1.3` to `^24.0.0`. Root and many workspace packages
update `@metamask/network-controller` to `^35.0.1`, with matching
**Unreleased** changelog lines and **`yarn.lock`** resolution updates.
> 
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
455c03b. Bugbot is set up for automated
code reviews on this repo. Configure
[here](https://www.cursor.com/dashboard/bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: cryptodev-2s <109512101+cryptodev-2s@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants