Is Slush — A Sui wallet safe?
We analyzed Slush — A Sui wallet version 26.20.1's actual code and gave it a 68/100 trust score. Slush is a legitimate-looking wallet with broad website…
Bottom line
Slush is a legitimate-looking wallet with broad website reach, meaningful telemetry, and considerable code complexity.
What it can access
It runs on every website and exposes wallet connection and signing functions, with optional hardware-device and identity features.[Q1][Q2][Q5][Q16]
Security weaknesses
Website access is broad and the large bundled codebase is difficult to fully review, though origin checks and approval prompts limit misuse.[Q10][Q16][Q21]
Signs of misuse
It sends wallet and connected-app information, persistent identifiers, and telemetry to several services, but no private-key theft or unrelated browsing surveillance was found.[Q6][Q12][Q13][Q14]
Code findings
What access does this extension ask for, and does that access make sense for what it claims to do?
It runs a wallet bridge on every site and requests tabs, storage, identity, offscreen and unlimited-storage access. These are broadly consistent with its wallet, OAuth and approval-window features, but create meaningful authority.
Declares storage, tabs, alarms, unlimitedStorage, identity, offscreen and sidePanel permissions, plus a document-start content script on <all_urls>. — manifest.json:1
Which websites can it run on, and can it read or change what appears on those pages?
It injects a Sui wallet provider into every page so sites can request wallet operations. The small content bridge does not inspect page text, inputs or other page content.
Injects dapp-interface.js, forwards wallet request events to the extension and returns wallet responses to the page. — content-script.js:1
Registers the standard Sui wallet provider and exposes connection and signing methods to the page. — dapp-interface.js:1
Can it see sensitive information you type, such as passwords, payment details, messages, or form entries?
No evidence of this behavior was found in the reviewed package.
Only relays the wallet protocol's custom events; it contains no input, form, keypress or DOM-reading logic. — content-script.js:1
Transaction and personal-message requests are shown in origin-bound approval windows before signing. — background.js:1
Can it access private browser data such as cookies, signed-in sessions, browsing history, bookmarks, or downloads?
No evidence of this behavior was found in the reviewed package.
Does not request cookies, history, bookmarks or downloads permissions. — manifest.json:1
Stores wallet accounts, connected origins and pending approvals in extension-owned storage. — background.js:1
Can it access anything else on your device, such as files, location, camera, microphone, clipboard, or installed applications?
The wallet UI supports browser identity login, clipboard actions and user-selected Ledger hardware devices through HID or USB. Shared UI code also includes camera support for QR workflows; no hidden microphone, location or screen capture was found.
Uses Chrome identity web-auth flow for sign-in. — background.js:1
Contains clipboard operations, Ledger navigator.hid/navigator.usb integration and camera/QR modules in the compiled wallet interface. — expo/static/js/web/index-3fbe7c86559148e509f3e4386b8eb70c.js:1
Does it send information outside your browser? If so, what information is sent, where does it go, and why?
It sends public wallet addresses, balances, transaction details, signed transactions, OAuth data and feature telemetry to Slush, Sui RPC, Statsig, Sentry and feature-specific providers. No private-key or recovery-phrase transmission was found.
Calls Slush, Mysten/Sui RPC, OAuth, monitoring and integration endpoints for wallet operations, account state and telemetry. — background.js:1
Implements swap, on-ramp, token, hardware-wallet and account features backed by their named remote services. — expo/static/js/web/index-3fbe7c86559148e509f3e4386b8eb70c.js:1
Does it download or run code, settings, or instructions supplied by a remote server?
Statsig supplies remote feature flags and monitoring sample rates, while wallet, swap and on-ramp services return transaction or quote data. These responses influence behavior and proposed transactions, but are not executed as downloaded JavaScript.
Initializes Statsig from initialize.slush.app and reads remote gates and dynamic configuration, including Sentry sampling settings. — background.js:1
Extension CSP limits scripts to packaged self resources and permits broad outbound connections. — manifest.json:1
Can it take actions without a clear user request, such as opening pages, redirecting searches, downloading files, or sending requests?
First install opens the wallet interface, and background synchronization and telemetry run without a fresh click. Silent reconnection is limited to a site the user previously approved; new connections and all signatures require approval.
Opens index.html on first install, performs background wallet maintenance and allows silent connect only for an already connected origin. — background.js:1
Creates approval windows for new connections, transaction signing and personal-message signing. — background.js:1
Can it change important browser settings, including your proxy, search engine, homepage, privacy settings, or other extensions?
No evidence of this behavior was found in the reviewed package.
Requests no search, settings, proxy, privacy or declarative request permissions. — manifest.json:1
Is any important behavior difficult to inspect because the code is hidden, heavily obfuscated, dynamically generated, or supplied by third parties?
The package contains a 13.4 MB compiled interface, a 4.3 MB background bundle, WebAssembly and many third-party finance and cryptography libraries. The code is inspectable but too large for complete manual assurance.
Records the large Expo interface, background bundle, CanvasKit WebAssembly and other packaged assets. — inventory.json:1
Bundles a broad mobile/web UI platform and numerous wallet, swap, authentication, analytics and device dependencies. — expo/static/js/web/index-3fbe7c86559148e509f3e4386b8eb70c.js:1
Does it use eval(), new Function(), or string-based timers to turn text into executable code?
No evidence of this behavior was found in the reviewed package.
Contains Metro server-only fetchThenEvalAsync and fixed new Function fallback/capability checks; the browser path loads self-hosted bundle scripts instead. — expo/static/js/web/index-3fbe7c86559148e509f3e4386b8eb70c.js:1
Contains eval("require") only in a randomUUID fallback reached when browser crypto and globalThis are absent. — background.js:1
script-src is self with wasm-unsafe-eval, not unsafe-eval or a remote script origin. — manifest.json:1
Does it track the websites, pages, searches, or links you visit?
It does not record general browsing history, but product telemetry can identify which decentralized apps are connected and log their names or origins when wallet events occur.
Wallet connection telemetry includes application identity and requesting origin for wallet events. — background.js:1
The always-present content bridge does not report a URL merely because the user visits it. — content-script.js:1
Does it create a persistent ID or browser fingerprint to recognize you?
Statsig receives a persistent stable ID, preferences ID and current public wallet address with app, language, network and platform details. Sentry also identifies recurring error sessions; no separate advertising fingerprint was found.
Builds the Statsig user from the current address, preferences ID, stable ID, network, app version, language, channel and platform. — background.js:1
Configures Sentry error reporting with scrubbed contextual logs and session metadata. — background.js:1
Does it send cookies, session details, authentication data, or page contents elsewhere?
Public addresses, account state, transaction data, signed transactions, OAuth tokens and connected-app telemetry may leave the extension as required by wallet features. Private keys and recovery phrases remain in encrypted extension storage in the reviewed code.
Signs with locally stored account material, then sends public account and transaction data to wallet services and Sui RPC. — background.js:1
The logging filter blocks seed, mnemonic, private-key and passphrase terms and scrubs addresses, JWTs, base64-like strings and email from attached logs. — background.js:1
Does it record typing, form entries, clipboard contents, or screenshots?
The wallet UI can copy and paste wallet data and may use a camera for QR workflows. It does not monitor website typing, change forms, capture screenshots or record the screen in the reviewed paths.
Includes explicit clipboard and camera/QR functionality in user-facing wallet components. — expo/static/js/web/index-3fbe7c86559148e509f3e4386b8eb70c.js:1
Contains no key, input, form, clipboard or media-capture listeners. — content-script.js:1
Can a website or remote server send commands that make the extension take actions?
A website can ask Slush to connect accounts, sign transactions, sign and execute transactions, or sign personal messages. The background derives the true sender origin, checks its connected accounts and opens an approval window for signing.
Exposes the standard Sui wallet connect, transaction-signing and personal-message methods to websites. — dapp-interface.js:1
Separates untrusted dapp procedures from trusted extension procedures, binds connected accounts to origin and prompts before signing. — background.js:1
Does it alter links, referral codes, advertisements, shopping carts, or search results?
No evidence of this behavior was found in the reviewed package.
Only injects and relays the wallet provider; it contains no link, ad, search or shopping-page modification. — content-script.js:1
Financial offers and providers appear as explicit wallet-interface features. — expo/static/js/web/index-3fbe7c86559148e509f3e4386b8eb70c.js:1
Does it redirect or modify web traffic, request headers, downloads, or proxy settings?
No evidence of this behavior was found in the reviewed package.
Requests no webRequest, declarativeNetRequest, downloads or proxy permission. — manifest.json:1
Can it communicate with software on the computer or services running on localhost?
No evidence of this behavior was found in the reviewed package.
Declares no nativeMessaging permission. — manifest.json:1
Ledger integration calls navigator.hid or navigator.usb; localhost strings occur in bundled development or library defaults. — expo/static/js/web/index-3fbe7c86559148e509f3e4386b8eb70c.js:1
Does it decode, decrypt, or unpack hidden data and then execute or inject it?
No evidence of this behavior was found in the reviewed package.
Allows packaged WebAssembly through wasm-unsafe-eval while restricting scripts to self. — manifest.json:1
Lists canvaskit.wasm as a packaged 8 MB application asset. — inventory.json:1
Can ordinary websites access privileged extension features through messaging or exposed files?
Every ordinary website can reach the exposed wallet provider and request privileged wallet actions. It cannot call trusted internal procedures, and account access and approvals are scoped to the verified sender origin.
Exposes dapp-interface.js and runs its bridge on <all_urls>. — manifest.json:1
Rejects extension-only procedures from dapp origins, derives the sender origin from Chrome context and verifies it again before returning delayed approval results. — background.js:1
Does suspicious behavior activate only for certain users, websites, dates, or remote settings?
No evidence of this behavior was found in the reviewed package.
Uses Statsig feature gates and dynamic configuration for product behavior and monitoring settings without a discovered malicious activation condition. — background.js:1
Does it perform hidden resource-intensive work, such as cryptocurrency mining?
No evidence of this behavior was found in the reviewed package.
Background work covers wallet storage, network synchronization, signing, approvals and telemetry; no mining loop or worker farm was found. — background.js:1
Does it change form fields or where a form sends its information?
No evidence of this behavior was found in the reviewed package.
Contains no query for inputs or forms, value assignment, submit handling or action-attribute modification. — content-script.js:1