A throwaway macOS VM ran the real wallet; every byte was captured and decrypted from the host, outside the guest. The full request log (flows.jsonl) holds decrypted bodies and stays private — tooling at github.com/austintgriffith/crops-lab.
run_id: 20260924-214902-sell-metamask-localnode action: sell-metamask-localnode guest_ip: 192.168.64.16 host_proxy: 192.168.64.1:8080 base_image: crops-warm action_rc: 0 gold_baked_at: 2026-08-21T02:54:20Z gold_base: ghcr.io/cirruslabs/macos-tahoe-base:latest gold_base_row: OCI ghcr.io/cirruslabs/macos-tahoe-base:latest 50 33 1 hour ago stopped gold_macos: 26.6.2 (25G83) gold_chrome: Google Chrome 151.0.7922.174 gold_node: v26.7.0 gold_playwright: 1.62.1 gold_quic_allowed: 0
[t=1790308210.552] rpc-edit: start -> http://192.168.68.54:8545 (then sell-metamask) [t=1790308210.682] rpc open-networks: clicked [t=1790308211.639] rpc manage-networks: clicked [t=1790308214.095] rpc eth-options: clicked [t=1790308215.128] rpc edit: clicked [t=1790308216.068] rpc rpc-dropdown: clicked [t=1790308217.032] rpc add-rpc: clicked [t=1790308219.521] rpc add-url: clicked [t=1790308220.468] rpc save: clicked [t=1790308226.735] rpc-edit: done — browser restarted; everything after this is on http://192.168.68.54:8545 sell-metamask: ext canglmpflkjehkfaioejbblmakepelcl · off-ramp quote for 0.01 ETH (capture only, never selling) [popup] new page: about:blank [popup] new page: chrome-extension://canglmpflkjehkfaioejbblmakepelcl/home.html fill unlock-pw: unlock-password click unlock: unlock-submit skip open-sell (not present) click open-asset: text:Ethereum skip asset-sell (not present) click open-ramp: text:Buy [popup] new page: https://app.metamask.io/buy?metamaskEntry=ext_buy_sell_button&chainId=1&metametr skip sell-toggle (not present) following ramp popup: https://app.metamask.io/buy?metamaskEntry=ext_buy_sell_button&chainId=1&metametricsId=0xc6e4cbee6ec6 skip get-quotes (not present) sell-metamask: reached the off-ramp provider/quote surface — STOPPING (no KYC, no bank, nothing signed)
# capture 20260924-214902-sell-metamask-localnode action: sell-metamask-localnode · guest 192.168.64.16 · proxy 192.168.64.1:8080 · action_rc 0 ## decrypted: 463 requests · 81 hosts | host | req | methods | secret headers present | |---|---:|---|---| | tron-mainnet.infura.io | 60 | GET/OPTIONS/POST | — | | app.metamask.io | 30 | GET | cookie | | sentry.io | 28 | POST | — | | solana-mainnet.infura.io | 18 | GET/OPTIONS/POST | — | | on-ramp-cache.api.cx.metamask.io | 17 | GET/OPTIONS | authorization | | bitcoin-mainnet.infura.io | 17 | GET | — | | app.launchdarkly.com | 16 | GET/OPTIONS | — | | api.segment.io | 15 | OPTIONS/POST | authorization | | 192.168.68.54 | 14 | POST | — | | user-storage.api.cx.metamask.io | 12 | GET | authorization | | price.api.cx.metamask.io | 12 | GET | authorization | | gas.api.cx.metamask.io | 12 | GET/OPTIONS | — | | accounts.api.cx.metamask.io | 10 | GET | authorization | | mainnet.infura.io | 9 | OPTIONS/POST | — | | authentication.api.cx.metamask.io | 9 | GET/OPTIONS/POST/PUT | authorization | | metamask.github.io | 7 | GET | — | | static.cx.metamask.io | 7 | GET | cookie | | android.clients.google.com | 7 | POST | authorization | | monad-mainnet.infura.io | 6 | POST | — | | subscription.api.cx.metamask.io | 6 | GET | authorization | | www.google.com | 5 | GET/POST | — | | cdn.contentful.com | 5 | GET/OPTIONS | authorization | | tokens.api.cx.metamask.io | 5 | GET | authorization | | cma.itunes.apple.com | 5 | POST | — | | api.merkl.xyz | 4 | GET | — | | polygon-mainnet.infura.io | 4 | POST | — | | base-mainnet.infura.io | 4 | POST | — | | linea-mainnet.infura.io | 4 | POST | — | | optimism-mainnet.infura.io | 4 | POST | — | | bsc-mainnet.infura.io | 4 | POST | — | | arbitrum-mainnet.infura.io | 4 | POST | — | | testnet-rpc.monad.xyz | 4 | POST | — | | linea-sepolia.infura.io | 4 | POST | — | | sepolia.infura.io | 4 | POST | — | | carrot.megaeth.com | 4 | POST | cookie | | notification.api.cx.metamask.io | 4 | POST | authorization | | pancake.apple.com | 4 | GET | — | | cdn.segment.com | 4 | GET | — | | px.ads.linkedin.com | 4 | GET/POST | cookie | | on-ramp.api.cx.metamask.io | 4 | GET/OPTIONS | authorization | | events.launchdarkly.com | 4 | OPTIONS/POST | — | | token.api.cx.metamask.io | 3 | GET | — | | client-config.api.cx.metamask.io | 3 | GET | — | | bag.itunes.apple.com | 3 | GET | — | | www.googletagmanager.com | 3 | GET | — | | o1377931.ingest.sentry.io | 3 | POST | — | | accounts.google.com | 2 | POST | — | | geolocation.api.cx.metamask.io | 2 | GET | — | | phishing-detection.api.cx.metamask.io | 2 | GET | — | | acl.execution.metamask.io | 2 | GET | — | | bridge.api.cx.metamask.io | 2 | GET | — | | oidc.api.cx.metamask.io | 2 | POST | — | | images.ctfassets.net | 2 | GET | — | | nft.api.cx.metamask.io | 2 | GET | — | | gateway.api.cx.metamask.io | 2 | GET | cookie | | www.google-analytics.com | 2 | POST | — | | js.hs-banner.com | 2 | GET | — | | snap.licdn.com | 2 | GET | — | | track.hubspot.com | 2 | GET | — | | example.com | 1 | GET | — | | clients2.google.com | 1 | GET | — | | chainid.network | 1 | GET | — | | client-side-detection.api.cx.metamask.io | 1 | GET | — | | rewards.api.cx.metamask.io | 1 | POST | — | | defiadapters.api.cx.metamask.io | 1 | GET | — | | device-config.pcms.apple.com | 1 | GET | — | | ad.doubleclick.net | 1 | POST | — | | js.hs-scripts.com | 1 | GET | — | | js.hsadspixel.net | 1 | GET | — | | js.hs-analytics.net | 1 | GET | — | | js.hubspot.com | 1 | GET | — | | fonts.googleapis.com | 1 | GET | — | | api.hubapi.com | 1 | GET | — | | cta-service-cms2.hubspot.com | 1 | GET | — | | staking.api.cx.metamask.io | 1 | GET | — | | www.linkedin.com | 1 | GET | cookie | | content-autofill.googleapis.com | 1 | GET | — | | perf-na1.hsforms.com | 1 | GET | — | | calendars.icloud.com | 1 | GET | — | | token.safebrowsing.apple | 1 | GET | — | | radarsubmissions.apple.com | 1 | POST | — | ## opaque: 0 SNIs offered, never decrypted (pinned or handshake failed) - none ## wire: 6836 proxied pkts · 5 BYPASS dst · 1 QUIC dst · 1486 Apple-OS pkts BYPASS/QUIC below exclude Apple 17.0.0.0/8 (macOS push/OCSP/update — not the browser under test). ### BYPASS — guest spoke TLS to these directly, not through the proxy - 199.232.67.6 (no DNS seen) · 98 pkts - 23.47.200.181 (?) · 50 pkts - 23.54.40.92 (no DNS seen) · 9 pkts - 23.37.97.92 (no DNS seen) · 8 pkts - 23.64.99.186 (no DNS seen) · 5 pkts ### QUIC LEAK — udp/443 left the guest - 199.232.65.64 (?) · 15 pkts ### other egress (non-443, non-DNS) - 23.11.33.159:80 (no DNS seen) · 18 pkts - 192.168.64.255:137 (no DNS seen) · 9 pkts - 104.18.38.233:80 (no DNS seen) · 6 pkts - 224.0.0.251:5353 (no DNS seen) · 4 pkts