Skip to content

fix: filter account data updates by Snap ownership - #10057

Open
gantunesr wants to merge 21 commits into
mainfrom
gar/fix/snap-account-event-publish
Open

gantunesr wants to merge 21 commits into
mainfrom
gar/fix/snap-account-event-publish

Conversation

@gantunesr

@gantunesr gantunesr commented Sep 1, 2026

Copy link
Copy Markdown
Member

Explanation

References

Fixes https://consensyssoftware.atlassian.net/browse/MUL-2196

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
Changes the Snap sandbox boundary for account balance, transaction, and asset notifications; incorrect ownership filtering or stale cache could hide legitimate updates or allow forged data until fixed.

Overview
SnapAccountService no longer republishes balance, transaction, and asset-list notifications verbatim from a Snap. It keeps a lazy account → owning Snap map from AccountsController (initial getState, then accountsAdded / accountsRemoved) and strips entries for accounts the sender does not own before emitting SnapAccountService:*Updated events. Updates with no owned accounts are dropped (fail closed).

This closes a trust gap where one Snap could report data for another Snap’s accounts or arbitrary IDs. The hot path stays synchronous (map lookup only, no keyring round-trip). Integrators must wire the new AccountsController messenger action and events and take the documented breaking dependency on @metamask/accounts-controller.

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

ccharly
ccharly previously approved these changes Sep 4, 2026

@ccharly ccharly left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

LGTM, left 2 very small nits, nothing too important

Comment thread packages/snap-account-service/CHANGELOG.md Outdated
Comment thread packages/snap-account-service/src/SnapAccountService.test.ts Outdated
Comment thread packages/snap-account-service/src/SnapAccountService.ts
@gantunesr gantunesr changed the title fix: fix: filter account data updates by Snap ownership Sep 8, 2026
@socket-security

socket-security Bot commented Sep 10, 2026

Copy link
Copy Markdown

No dependency changes detected. Learn more about Socket for GitHub.

👍 No dependency changes detected in pull request

@gantunesr
gantunesr marked this pull request as ready for review September 10, 2026 15:59
@gantunesr
gantunesr requested review from a team as code owners September 10, 2026 15:59
@ccharly

ccharly commented Sep 11, 2026

Copy link
Copy Markdown
Contributor

@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@10.0.0-preview-09a5567a0
@metamask-previews/accounts-controller@40.0.0-preview-09a5567a0
@metamask-previews/address-book-controller@8.0.0-preview-09a5567a0
@metamask-previews/ai-controllers@2.0.0-preview-09a5567a0
@metamask-previews/analytics-controller@3.0.0-preview-09a5567a0
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-09a5567a0
@metamask-previews/announcement-controller@9.0.0-preview-09a5567a0
@metamask-previews/app-metadata-controller@3.0.0-preview-09a5567a0
@metamask-previews/approval-controller@10.0.0-preview-09a5567a0
@metamask-previews/assets-controller@16.0.0-preview-09a5567a0
@metamask-previews/assets-controllers@112.0.0-preview-09a5567a0
@metamask-previews/authenticated-user-storage@4.0.0-preview-09a5567a0
@metamask-previews/base-controller@10.0.0-preview-09a5567a0
@metamask-previews/base-data-service@2.0.0-preview-09a5567a0
@metamask-previews/bitcoin-regtest-up@2.0.0-preview-09a5567a0
@metamask-previews/bridge-controller@81.0.0-preview-09a5567a0
@metamask-previews/bridge-status-controller@76.0.0-preview-09a5567a0
@metamask-previews/build-utils@4.0.0-preview-09a5567a0
@metamask-previews/chain-agnostic-permission@2.0.0-preview-09a5567a0
@metamask-previews/chomp-api-service@5.0.0-preview-09a5567a0
@metamask-previews/claims-controller@1.0.0-preview-09a5567a0
@metamask-previews/client-controller@2.0.0-preview-09a5567a0
@metamask-previews/client-utils@3.0.0-preview-09a5567a0
@metamask-previews/compliance-controller@3.0.0-preview-09a5567a0
@metamask-previews/composable-controller@13.0.0-preview-09a5567a0
@metamask-previews/config-registry-controller@4.0.0-preview-09a5567a0
@metamask-previews/connectivity-controller@1.0.0-preview-09a5567a0
@metamask-previews/controller-utils@13.0.0-preview-09a5567a0
@metamask-previews/core-backend@10.0.0-preview-09a5567a0
@metamask-previews/cryptography@0.0.0-preview-09a5567a0
@metamask-previews/delegation-controller@4.0.0-preview-09a5567a0
@metamask-previews/earn-controller@13.0.0-preview-09a5567a0
@metamask-previews/eip-5792-middleware@4.0.0-preview-09a5567a0
@metamask-previews/eip-7702-internal-rpc-middleware@1.0.0-preview-09a5567a0
@metamask-previews/eip1193-permission-middleware@3.0.0-preview-09a5567a0
@metamask-previews/eth-block-tracker@16.0.0-preview-09a5567a0
@metamask-previews/eth-json-rpc-middleware@25.0.0-preview-09a5567a0
@metamask-previews/eth-json-rpc-provider@7.0.0-preview-09a5567a0
@metamask-previews/foundryup@2.0.0-preview-09a5567a0
@metamask-previews/gas-fee-controller@27.0.0-preview-09a5567a0
@metamask-previews/gator-permissions-controller@6.0.0-preview-09a5567a0
@metamask-previews/geolocation-controller@2.0.0-preview-09a5567a0
@metamask-previews/java-tron-up@2.0.0-preview-09a5567a0
@metamask-previews/json-rpc-engine@11.0.0-preview-09a5567a0
@metamask-previews/json-rpc-middleware-stream@9.0.0-preview-09a5567a0
@metamask-previews/keyring-controller@28.0.0-preview-09a5567a0
@metamask-previews/kyc-controller@0.2.0-preview-09a5567a0
@metamask-previews/local-node-utils@2.0.0-preview-09a5567a0
@metamask-previews/logging-controller@10.0.0-preview-09a5567a0
@metamask-previews/message-manager@15.0.0-preview-09a5567a0
@metamask-previews/messenger@3.0.0-preview-09a5567a0
@metamask-previews/messenger-cli@1.0.0-preview-09a5567a0
@metamask-previews/money-account-api-data-service@1.0.0-preview-09a5567a0
@metamask-previews/money-account-balance-service@3.0.0-preview-09a5567a0
@metamask-previews/money-account-controller@2.0.0-preview-09a5567a0
@metamask-previews/money-account-upgrade-controller@5.0.0-preview-09a5567a0
@metamask-previews/money-account-utils@2.0.0-preview-09a5567a0
@metamask-previews/multichain-account-service@14.0.0-preview-09a5567a0
@metamask-previews/multichain-api-middleware@5.0.0-preview-09a5567a0
@metamask-previews/multichain-network-controller@4.0.0-preview-09a5567a0
@metamask-previews/multichain-transactions-controller@8.0.0-preview-09a5567a0
@metamask-previews/name-controller@10.0.0-preview-09a5567a0
@metamask-previews/network-connection-banner-controller@1.0.0-preview-09a5567a0
@metamask-previews/network-controller@37.0.0-preview-09a5567a0
@metamask-previews/network-enablement-controller@7.0.0-preview-09a5567a0
@metamask-previews/notification-services-controller@28.0.0-preview-09a5567a0
@metamask-previews/passkey-controller@4.0.0-preview-09a5567a0
@metamask-previews/permission-controller@14.0.0-preview-09a5567a0
@metamask-previews/permission-log-controller@6.0.0-preview-09a5567a0
@metamask-previews/perps-controller@17.0.0-preview-09a5567a0
@metamask-previews/phishing-controller@18.0.0-preview-09a5567a0
@metamask-previews/platform-api-docs@0.2.0-preview-09a5567a0
@metamask-previews/polling-controller@17.0.0-preview-09a5567a0
@metamask-previews/preferences-controller@24.0.0-preview-09a5567a0
@metamask-previews/profile-metrics-controller@5.0.0-preview-09a5567a0
@metamask-previews/profile-sync-controller@31.0.0-preview-09a5567a0
@metamask-previews/ramps-controller@21.0.0-preview-09a5567a0
@metamask-previews/rate-limit-controller@8.0.0-preview-09a5567a0
@metamask-previews/react-data-query@2.0.0-preview-09a5567a0
@metamask-previews/remote-feature-flag-controller@7.0.0-preview-09a5567a0
@metamask-previews/sample-controllers@6.0.0-preview-09a5567a0
@metamask-previews/seedless-onboarding-controller@11.0.0-preview-09a5567a0
@metamask-previews/selected-network-controller@27.0.0-preview-09a5567a0
@metamask-previews/sentinel-api-service@2.0.0-preview-09a5567a0
@metamask-previews/shield-controller@7.0.0-preview-09a5567a0
@metamask-previews/signature-controller@40.0.0-preview-09a5567a0
@metamask-previews/smart-transactions-controller@27.0.0-preview-09a5567a0
@metamask-previews/snap-account-service@3.0.0-preview-09a5567a0
@metamask-previews/social-controllers@3.0.0-preview-09a5567a0
@metamask-previews/solana-test-validator-up@2.0.0-preview-09a5567a0
@metamask-previews/stellar-quickstart-up@0.0.0-preview-09a5567a0
@metamask-previews/storage-service@2.0.0-preview-09a5567a0
@metamask-previews/subscription-controller@9.0.0-preview-09a5567a0
@metamask-previews/transaction-controller@70.0.0-preview-09a5567a0
@metamask-previews/transaction-pay-controller@28.0.0-preview-09a5567a0
@metamask-previews/user-operation-controller@42.0.0-preview-09a5567a0
@metamask-previews/wallet@13.0.0-preview-09a5567a0
@metamask-previews/wallet-cli@0.0.0-preview-09a5567a0

@ccharly

ccharly commented Sep 14, 2026

Copy link
Copy Markdown
Contributor

@metamaskbot publish-preview

1 similar comment
@ccharly

ccharly commented Sep 17, 2026

Copy link
Copy Markdown
Contributor

@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@10.0.1-preview-5c7968943
@metamask-previews/accounts-controller@40.0.0-preview-5c7968943
@metamask-previews/address-book-controller@8.0.0-preview-5c7968943
@metamask-previews/ai-controllers@2.0.0-preview-5c7968943
@metamask-previews/analytics-controller@3.0.0-preview-5c7968943
@metamask-previews/analytics-data-regulation-controller@0.0.0-preview-5c7968943
@metamask-previews/announcement-controller@9.0.0-preview-5c7968943
@metamask-previews/app-metadata-controller@3.0.0-preview-5c7968943
@metamask-previews/approval-controller@10.0.0-preview-5c7968943
@metamask-previews/assets-controller@16.0.0-preview-5c7968943
@metamask-previews/assets-controllers@112.0.1-preview-5c7968943
@metamask-previews/authenticated-user-storage@4.0.0-preview-5c7968943
@metamask-previews/base-controller@10.0.0-preview-5c7968943
@metamask-previews/base-data-service@2.0.0-preview-5c7968943
@metamask-previews/bitcoin-regtest-up@2.0.0-preview-5c7968943
@metamask-previews/bridge-controller@81.1.0-preview-5c7968943
@metamask-previews/bridge-status-controller@76.2.0-preview-5c7968943
@metamask-previews/build-utils@4.0.0-preview-5c7968943
@metamask-previews/chain-agnostic-permission@2.0.0-preview-5c7968943
@metamask-previews/chomp-api-service@5.0.0-preview-5c7968943
@metamask-previews/claims-controller@1.0.1-preview-5c7968943
@metamask-previews/client-controller@2.0.0-preview-5c7968943
@metamask-previews/client-utils@3.0.0-preview-5c7968943
@metamask-previews/compliance-controller@3.0.0-preview-5c7968943
@metamask-previews/composable-controller@13.0.0-preview-5c7968943
@metamask-previews/config-registry-controller@4.0.0-preview-5c7968943
@metamask-previews/connectivity-controller@1.0.0-preview-5c7968943
@metamask-previews/controller-utils@13.0.0-preview-5c7968943
@metamask-previews/core-backend@10.0.1-preview-5c7968943
@metamask-previews/cryptography@0.0.0-preview-5c7968943
@metamask-previews/delegation-controller@4.0.0-preview-5c7968943
@metamask-previews/earn-controller@13.0.0-preview-5c7968943
@metamask-previews/eip-5792-middleware@4.0.0-preview-5c7968943
@metamask-previews/eip-7702-internal-rpc-middleware@1.0.0-preview-5c7968943
@metamask-previews/eip1193-permission-middleware@3.0.0-preview-5c7968943
@metamask-previews/eth-block-tracker@16.0.0-preview-5c7968943
@metamask-previews/eth-json-rpc-middleware@25.0.0-preview-5c7968943
@metamask-previews/eth-json-rpc-provider@7.0.0-preview-5c7968943
@metamask-previews/foundryup@2.0.0-preview-5c7968943
@metamask-previews/gas-fee-controller@27.0.0-preview-5c7968943
@metamask-previews/gator-permissions-controller@6.0.0-preview-5c7968943
@metamask-previews/geolocation-controller@2.0.0-preview-5c7968943
@metamask-previews/java-tron-up@2.0.0-preview-5c7968943
@metamask-previews/json-rpc-engine@11.0.0-preview-5c7968943
@metamask-previews/json-rpc-middleware-stream@9.0.0-preview-5c7968943
@metamask-previews/keyring-controller@28.0.0-preview-5c7968943
@metamask-previews/kyc-controller@0.3.0-preview-5c7968943
@metamask-previews/local-node-utils@2.0.0-preview-5c7968943
@metamask-previews/logging-controller@10.0.0-preview-5c7968943
@metamask-previews/message-manager@15.0.0-preview-5c7968943
@metamask-previews/messenger@3.0.0-preview-5c7968943
@metamask-previews/messenger-cli@1.0.0-preview-5c7968943
@metamask-previews/money-account-api-data-service@1.0.0-preview-5c7968943
@metamask-previews/money-account-balance-service@3.0.0-preview-5c7968943
@metamask-previews/money-account-controller@2.0.0-preview-5c7968943
@metamask-previews/money-account-upgrade-controller@5.0.0-preview-5c7968943
@metamask-previews/money-account-utils@2.0.0-preview-5c7968943
@metamask-previews/multichain-account-service@14.0.0-preview-5c7968943
@metamask-previews/multichain-api-middleware@5.0.0-preview-5c7968943
@metamask-previews/multichain-network-controller@4.0.0-preview-5c7968943
@metamask-previews/multichain-transactions-controller@8.0.0-preview-5c7968943
@metamask-previews/name-controller@10.0.0-preview-5c7968943
@metamask-previews/network-connection-banner-controller@1.0.0-preview-5c7968943
@metamask-previews/network-controller@37.0.0-preview-5c7968943
@metamask-previews/network-enablement-controller@7.0.0-preview-5c7968943
@metamask-previews/notification-services-controller@28.0.1-preview-5c7968943
@metamask-previews/passkey-controller@4.0.0-preview-5c7968943
@metamask-previews/permission-controller@14.0.0-preview-5c7968943
@metamask-previews/permission-log-controller@6.0.0-preview-5c7968943
@metamask-previews/perps-controller@17.1.0-preview-5c7968943
@metamask-previews/phishing-controller@18.0.0-preview-5c7968943
@metamask-previews/platform-api-docs@0.2.0-preview-5c7968943
@metamask-previews/polling-controller@17.0.0-preview-5c7968943
@metamask-previews/preferences-controller@24.0.0-preview-5c7968943
@metamask-previews/profile-metrics-controller@5.1.0-preview-5c7968943
@metamask-previews/profile-sync-controller@32.1.0-preview-5c7968943
@metamask-previews/ramps-controller@22.0.0-preview-5c7968943
@metamask-previews/rate-limit-controller@8.0.0-preview-5c7968943
@metamask-previews/react-data-query@2.0.0-preview-5c7968943
@metamask-previews/remote-feature-flag-controller@7.0.0-preview-5c7968943
@metamask-previews/sample-controllers@6.0.0-preview-5c7968943
@metamask-previews/seedless-onboarding-controller@11.0.0-preview-5c7968943
@metamask-previews/selected-network-controller@27.0.0-preview-5c7968943
@metamask-previews/sentinel-api-service@2.0.0-preview-5c7968943
@metamask-previews/shield-controller@7.0.1-preview-5c7968943
@metamask-previews/signature-controller@40.0.0-preview-5c7968943
@metamask-previews/smart-transactions-controller@27.0.1-preview-5c7968943
@metamask-previews/snap-account-service@3.0.0-preview-5c7968943
@metamask-previews/social-controllers@3.0.1-preview-5c7968943
@metamask-previews/solana-test-validator-up@2.0.0-preview-5c7968943
@metamask-previews/stellar-quickstart-up@0.0.0-preview-5c7968943
@metamask-previews/storage-service@2.0.0-preview-5c7968943
@metamask-previews/subscription-controller@9.0.1-preview-5c7968943
@metamask-previews/transaction-controller@70.0.0-preview-5c7968943
@metamask-previews/transaction-pay-controller@28.0.2-preview-5c7968943
@metamask-previews/user-operation-controller@42.0.0-preview-5c7968943
@metamask-previews/utils@12.0.0-preview-5c7968943
@metamask-previews/wallet@13.0.0-preview-5c7968943
@metamask-previews/wallet-cli@0.0.0-preview-5c7968943

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.

2 participants