Cake Wallet / Privacy / Tor
Cake Wallet's Tor-Only Fiat API Can Leak Onion Hostnames
Cake Wallet's Tor-only fiat API can send onion names to system DNS. Review the affected code, Android test evidence, external Tor limits and patch status.

The reported Cake Wallet DNS leak involves price requests with Fiat API set to Tor only and the app's own Tor connection switched off. In that configuration, the price service's .onion hostname can reach the system DNS resolver. PR #3822 proposes correcting the routing, but it remains open with changes requested as of November 9, 2026.
The latest stable GitHub release, Cake Wallet v6.5.3, still contains the affected call. Its source also lacks the separate Trocador guard merged into the development branch through PR #3803. A development-branch merge can precede inclusion in a stable release.
Android test results and their limits
Seth for Privacy compared two builds on an Android 14 emulator with the app's Tor connection off. After setting the Fiat API to Tor only, the test spent 90 seconds on the dashboard. Changing the fiat currency and opening charts triggered further price requests. The control was a local v6.5.3-rc build at commit d803aecf9.
The author reports 98 DNS queries for Cake's price onion hostname during roughly four minutes in Tor-only mode, compared with zero for patch build 1e6111a. The earlier eight-query result came from a shorter capture.
Our review covers the PR and source code, without an independent Android run or packet-capture recount. The contributor's counting command filters UDP traffic to port 53, so a zero result covers that filter rather than every possible network path.
The price client's DNS path
The v6.5.3 price client has two entry points: getLatestPrice for current rates and getPrices for chart history. Both select the onion URI when their torOnly argument is true. They then pass it to the shared _getJson function.
_getJson then supplies the onion URI as clearnetUri. That argument tells the proxy wrapper which address it may use through its ordinary HTTP client when the Tor client isn't running.
The wrapper checks CakeTor.instance!.started to choose between a SOCKS-backed connection and an ordinary HTTP client. If the value is false, it sends clearnetUri through the ordinary client and uses the system's hostname resolver even for an onion address.
The price request includes currency identifiers and chart intervals as HTTP parameters. The reported DNS query asks the resolver for the hostname. It does not include those parameters or the HTTP response body.
Why ordinary DNS is the wrong destination
The onion-domain standard, RFC 7686, reserves .onion for Tor services. Applications should use an appropriate Tor interface or fail, and ordinary name-resolution libraries must not send these names to DNS. A public DNS lookup cannot discover an onion service through the normal domain-name hierarchy.
An observer who sees Cake's distinctive price hostname can infer likely use of that service and the timing of attempts. The resolver sees the queries it receives. DNS transport encryption can limit what other network observers see. A failed lookup can disclose the name even though no connection to the onion service follows.
The report doesn't show a failure of Tor or Monero's cryptography, or disclosure of wallet keys, seeds, balances, payment contents or Monero addresses.
The routes differ at the wallet's next hop:
Expected: Cake Wallet -> Tor -> onion price service
Reported: Cake Wallet -> system DNS -> onion-name query
Ordinary DNS does not complete the onion-service connection.

The proposed fix stops the request when Tor is off
The patch checks whether the hostname is Cake's configured onion price host. If so, it passes the address as onionUri and leaves clearnetUri empty. Otherwise, normal price requests keep their existing routing.
For these onion-only requests, the wrapper throws an exception if its Tor client isn't running. Failing closed means ending the price fetch before an ordinary HTTP request can begin. The active Tor client connects to the onion endpoint.
The PR changes one production function without adding an automated test file. GitHub's successful checks include unit tests. Those checks don't independently reproduce the DNS measurement. Reviewers questioned the change's effect on external Tor users, and the latest review requests changes.
Why external Tor users may lose price fetching
A system-level Tor setup, such as Orbot VPN mode, may handle onion lookups below the app. On those devices, asking the system resolver for an onion address need not send the name to a public DNS service. The external configuration determines the route.
PR #3822 would require Cake's own Tor instance for Tor-only fiat prices. Without it, the patched request fails before reaching the system resolver, removing price fetching for users who rely on an external Tor connection alone. The review discussion questions whether this behavior matches the purpose of the setting.
Opening Tor Browser does not configure the connections made by a separate wallet app. Our wallet connection guide covers the distinction between wallet connections and the services around them.
The Trocador fix is narrower
PR #3803 prevents an onion probe during ordinary Trocador exchange requests when built-in Tor is off. It returns the clearnet API URI first, avoiding the unnecessary lookup before fallback. A maintainer approved and merged that change on November 4.
The guard comes after the early return for exchange Tor-only mode. That mode still hands an onion URI to callers using clearnetUri. PR #3822 identifies this separate path as unresolved.
Cake published v6.5.3 on November 5, a day after the merge. Its tagged Trocador source still lacks the guard, confirming that the later release date alone cannot establish inclusion.
This is separate from the Cake Wallet iOS PIN-bypass fix, which concerns local access controls rather than price-request routing.
Affected versions and precautions
The contributor tested an Android emulator and local release-candidate build. Stable v6.5.3 contains the relevant price-client and proxy-wrapper code, but our review did not include packaged stable apps, iOS, desktop or external-Tor tests. The full affected-version range remains unknown.
For this price path, check that Cake's built-in Tor connection is running. The wrapper then uses its Tor client. Selecting the Fiat API mode alone does not start that connection. This precaution follows the code, without cross-device testing or a guarantee about other wallet requests.
If this metadata exposure is unacceptable, avoid triggering price fetches in the reported configuration while awaiting a reviewed release. Do not treat the proposal's CI APK as a stable security update. Follow the official releases and confirm that the stable release includes the relevant change before relying on it.
The reviewed sources contain no evidence of active exploitation. Independent capture confirmation and the final decision on external Tor support remain outstanding. Report other findings through the private channels on Cake's security page.