Transaction Recipient Substitution Vulnerability in @bsv/wallet-toolbox
A vulnerability (CVE-2026-56744) in @bsv/wallet-toolbox and related packages allows a compromised or malicious storage provider to silently substitute transaction recipient scripts, causing funds to be sent to attacker-controlled addresses.
CVE search metadata
CVE search record: CVE-2026-56744. KEV: no. Product: @bsv/wallet-toolbox (< 2.4.0), @bsv/wallet-toolbox-client (< 2.4.0), @bsv/wallet-toolbox-mobile (< 2.4.0). Brief: Transaction Recipient Substitution Vulnerability in @bsv/wallet-toolbox. Brief link: https://feed.craftedsignal.io/briefs/2026-09-bsv-wallet-toolbox-vulnerability/
A critical integrity vulnerability (CVE-2026-56744) exists in the @bsv/wallet-toolbox, @bsv/wallet-toolbox-client, and @bsv/wallet-toolbox-mobile packages. The flaw stems from an insufficient validation process during transaction construction within the createAction workflow. When using a remote StorageClient, the wallet fetches transaction outputs from the storage server; however, the buildSignableTransaction method fails to compare the returned lockingScript against the outputs originally requested by the application. Consequently, a malicious storage provider can substitute the intended recipient's script with one under their control. The wallet signs this modified transaction, and the UI provides no indication of the swap. This vulnerability impacts all versions of these packages between 1.x and 2.3.x. The attack is specific to the storage operator or entities with access to the storage infrastructure, as the storage server's identity is verified via mutual authentication.
Attack Chain
- Attacker establishes or compromises a remote storage server used by the target wallet client.
- Victim initiates a payment request within the wallet application specifying a legitimate recipient.
- The wallet client sends a request to the storage server to build the transaction.
- The malicious storage server intercepts the request and generates a transaction response containing an attacker-controlled
lockingScriptinstead of the one requested by the caller. - The wallet client's
buildSignableTransactionfunction retrieves the attacker-providedlockingScriptfrom the storage response. - The client fails to perform a validation check against the original requested outputs and proceeds to sign the modified transaction.
- The wallet broadcasts the signed transaction, transferring funds to the attacker-controlled address while maintaining the original intended address in the UI.
Impact
Successful exploitation results in the unauthorized transfer of funds to attacker-controlled addresses. Because the wallet UI continues to display the original intended recipient, the fraud remains hidden from the victim during and after the transaction process. The vulnerability affects all users relying on remote storage configurations, particularly those using the default storage.babbage.systems infrastructure if the operator is compromised or malicious.
Recommendation
- Upgrade all instances of
@bsv/wallet-toolbox,@bsv/wallet-toolbox-client, and@bsv/wallet-toolbox-mobileto version 2.4.0 or higher immediately to address CVE-2026-56744. - Review application logs for any unexpected changes in destination addresses returned by the storage provider if historical incident investigation is required.
- Implement strict validation checks in client-side transaction signing logic to ensure that signed outputs strictly match the application-requested outputs before signing.
Immediate actions
Upgrade affected npm packages to version 2.4.0 or later.
Mitigations
Upgrade @bsv/wallet-toolbox, @bsv/wallet-toolbox-client, and @bsv/wallet-toolbox-mobile to version 2.4.0.
CVE-2026-56744
Indicators of compromise
1
domain
| Type | Value |
|---|---|
| domain | storage.babbage.systems |