A fresh security review of a major Monero wallet API expansion has identified eight low-severity issues, including several code paths that could corrupt spend-key state, erase recoverable Polyseed metadata or expose key images to an untrusted remote node if the new methods are eventually used by wallet clients.
The review was opened on October 3 against Monero pull request #9464, a long-running effort to make the project’s Wallet API feature-complete enough to replace direct use of the lower-level wallet2 interface in applications including the CLI wallet and wallet RPC server.
The change is substantial, touching 24 files with more than 5,000 added lines. The security review reported eight findings, all rated LOW, but stressed that several would have serious local consequences if called in the wrong circumstances.
The most important caveat is equally significant: the reviewer found no current code in the tree calling the newly added methods. The findings therefore relate to API code under development rather than evidence that released Monero wallets are presently exploitable.
As of October 4, the upstream pull request remains open and unmerged. Its head commit is still 1648b2244c73, the same snapshot examined in the October 3 security review, meaning a newer code revision has not yet replaced the reviewed implementation.
Three Findings Can Damage Key or Recovery State
Three of the eight findings stand out because their consequences could be difficult for a user to reverse without a wallet backup or recovery seed.
The first involves a new encryptKeys API method. According to the review, the method can pass a caller-supplied password into Monero’s key-encryption routine without first verifying that the password is correct.
If an API client supplied a mistyped password, the in-memory spend key could be encrypted under the wrong derived key. A later attempt to decrypt it with the correct password could leave unusable key material, and a subsequent wallet-file rewrite could persist that corrupted state.
The reviewer said recovery would then require the seed. There is no suggestion that an attacker would gain the key; the problem is effectively a self-lockout or key-state corruption scenario.
A related finding affects decryptKeys. The review says the new Wallet API tracks whether keys are encrypted differently from the underlying wallet2 code. That mismatch can allow another key-unlocking path to decrypt already-plaintext key material a second time, corrupting the spend key before it is potentially written back to disk.
The third issue involves setPolyseed, which handles Monero’s Polyseed recovery information. The review says an unnamed scope guard wipes temporary Polyseed storage immediately instead of waiting until the function exits. The function can consequently attempt to parse already-erased data and then store an empty key value.
The spend key itself would remain intact, but the wallet could lose its stored Polyseed mnemonic and birthday metadata after a later keys-file write.
An Untrusted Remote Node Could Receive Imported Key Images
Another finding carries more of a privacy consequence than a key-corruption risk.
The new vector overload of importKeyImages can, by default, ask the connected daemon whether imported key images are spent. The review found that unlike existing sibling methods, the new overload does not first require the daemon to be marked trusted.
Monero key images are fundamental to determining whether outputs have already been spent. In a view-only wallet, imported key images also help reconstruct an accurate spend state.
If they are sent to a hostile remote daemon, the operator can associate those key images with a particular wallet and identify the real input when the image later appears in a ring. The same daemon could also lie about whether outputs are spent, leaving the wallet displaying an inaccurate balance.
Monero’s own documentation warns that using third-party remote nodes comes with privacy and reliability trade-offs. The wallet architecture deliberately separates private keys from the node, but that does not mean every piece of wallet-derived metadata is harmless to expose.
The issue is particularly relevant as more self-custodial wallet infrastructure tries to hide complex backend interactions from ordinary users. A wallet can remain non-custodial while still relying on servers whose answers affect what the user sees.
The Remaining Findings Cover TLS, Daemon Trust and Concurrency
The review found five additional problems.
One could cause a user-specified certificate authority or fingerprint to fall back to automatic TLS handling under a particular setDaemon configuration, potentially weakening the protection a caller believed it had established against daemon impersonation.
Another new function, getOutsBin, does not verify that an untrusted daemon returns the same number of outputs that the wallet requested. A malicious or faulty daemon could therefore provide fewer, additional or reordered entries while the API still reports success.
Two findings involve concurrency. A change to pauseRefresh can deadlock if a wallet listener callback tries to construct or send a transaction while the refresh thread already holds the same mutex. Separately, a transaction-history refresh path can modify wallet pool state without taking the refresh lock, potentially allowing simultaneous modifications to shared containers.
The reviewer characterized the latter situation as undefined behavior that could lead to a crash or memory corruption if the new path were eventually called concurrently.
These kinds of implementation-layer failures are a different category from incidents such as the Payy bridge exploit, where funds were already exposed through production infrastructure. Here, the relevant code remains in an unmerged development branch.
The LOW Ratings Are About Reachability, Not Harmless Consequences
The most interesting part of the review is why all eight findings were rated LOW despite some fairly severe descriptions.
The answer is reachability.
A function that can corrupt a spend key sounds catastrophic in isolation. But software risk is not determined only by what a broken function could theoretically do. It also depends on whether anything can currently call it, whether an attacker controls the required inputs and whether the code ships to users at all.
In this case, the review explicitly says nothing in the current tree calls the new APIs.
That means describing Monero wallets as vulnerable today would be misleading.
The distinction resembles other recent crypto code findings where dangerous behavior was identified before evidence of exploitation emerged. Dave Finances has covered cases such as a Relay API information leak where production exposure produced measurable user losses, and fake-wallet attacks where malicious software directly targeted users. Development-stage findings should not be placed in the same category until there is an actual reachable path.
The Real Risk Arrives When the New API Gets Wired Into Wallet Clients
That does not make the review unimportant.
Pull request #9464 has a much larger architectural purpose than simply adding convenience functions. Its stated goal is to make the Wallet API sufficiently complete that existing Monero software can eventually stop reaching directly into wallet2.
That means today’s unused methods could become tomorrow’s standard integration points.
If the CLI wallet, GUI, RPC service or third-party applications begin calling these methods before the findings are addressed, bugs that are currently unreachable could move into normal wallet workflows.
This is precisely the stage when code review has the highest leverage.
Once an API becomes public and multiple wallets depend on it, changing behavior becomes more difficult. Application developers start relying on assumptions about encryption state, daemon trust, return values and concurrency. Fixing a bad interface later can require coordinating several clients rather than changing one unmerged pull request.
The risks are particularly sensitive in wallet software because mistakes can affect private-key material and recovery information rather than merely causing a broken interface.
That is also why malicious wallet distribution, such as the fake Zano wallet campaign, represents a very different threat model. In one case users are deliberately targeted with hostile software; in the Monero review, developers are identifying defects inside legitimate code before there is evidence those defects have reached users.
The Merge Point Matters More Than the Disclosure Date
The key thing to watch now is not whether more alarming language appears around issue #919.
It is what happens to pull request #9464.
As of October 4, the head commit remains the one reviewed on October 3. The pull request is open and has not been merged, meaning the project still has an opportunity to fix the findings before the new API becomes part of Monero’s main codebase.
Several fixes described by the reviewer are conceptually narrow: verify passwords before key encryption, track actual key-encryption state, correct the Polyseed scope guard, require a trusted daemon before checking imported key images, validate daemon response sizes and apply the appropriate locking around refresh operations.
The harder part is integration testing.
The review itself says the defects were identified through source-code analysis and that the code was not built or executed as part of that review. That makes follow-up tests important, particularly for the deadlock, race and key-state findings.
For users and investors, there is no evidence here of a Monero network compromise, stolen funds or a currently exploitable production wallet flaw.
The more useful conclusion is that a large wallet-API refactor has reached the stage where security review is finding dangerous edge cases before those interfaces are widely used.
If those problems are fixed before the API is wired into production callers, the review will have done exactly what a security review is supposed to do.
Disclaimer
This article is for informational and educational purposes only and does not constitute financial, investment, trading, or legal advice. Cryptocurrencies, memecoins, and prediction-market positions are highly speculative and involve significant risk, including the potential loss of all capital.
The analysis presented reflects the author’s opinion at the time of writing and is based on publicly available information, on-chain data, and market observations, which may change without notice. No representation or warranty is made regarding accuracy, completeness, or future performance.
Readers are solely responsible for their investment decisions and should conduct their own independent research and consult a qualified financial professional before engaging in any trading or betting activity. The author and publisher hold no responsibility for any financial losses incurred.
Johan Shamshad is a financial markets writer at Dave Finances covering cryptocurrencies, trading platforms, brokers, fintech, financial regulation, and developments across global markets. He previously worked at Gulf News, adding newsroom experience to his coverage of fast-moving financial and digital-asset markets.
His work focuses on identifying market-moving events, company developments, regulatory changes, product launches, and shifts in trading and financial infrastructure.
Johan contributes news and analysis designed to help readers understand not only what happened, but why a development matters and how it may affect the wider financial landscape.

