
Cloud Vulnerability DB
A community-led vulnerabilities database
CVE-2026-56744 is a transaction output tampering vulnerability in the BSV blockchain wallet toolbox npm packages (@bsv/wallet-toolbox, @bsv/wallet-toolbox-client, and @bsv/wallet-toolbox-mobile) that allows a malicious or compromised remote storage provider to redirect cryptocurrency payments without the user's knowledge. The flaw was reported by Eric Chennells and disclosed on September 24, 2026. Affected versions are @bsv/wallet-toolbox and @bsv/wallet-toolbox-client from 1.1.47 through 2.3.3, and @bsv/wallet-toolbox-mobile from 1.3.21 through 2.3.3. It carries a CVSS v4.0 base score of 8.7 (High) (GitHub Advisory).
The root cause is improper validation of consistency within input (CWE-1288): the buildSignableTransaction function in signer/methods/buildSignableTransaction.js takes each non-change output's lockingScript directly from the StorageCreateActionResult response without comparing it to the lockingScript supplied by the caller in args.outputs. Additionally, WalletPermissionsManager.createAction parses the built transaction but only reads inputs and fee data — it never inspects tx.outputs. This means a storage provider operating as a StorageClient (the default remote configuration, e.g., storage.babbage.systems) can substitute a recipient script or inject an additional output funded by reducing change, and the wallet will sign and broadcast the manipulated transaction. The attacker must be the storage operator or someone who has compromised it; a passive network MITM is insufficient because StorageServer.processAction validates the signed raw transaction against what storage stored (GitHub Advisory, Fix Commit).
A malicious or compromised storage provider can silently redirect BSV cryptocurrency funds to an attacker-controlled address while the application's user interface continues to display the originally intended recipient, providing no visible indication of the substitution. The integrity of every transaction created via a remote StorageClient is at risk, with direct financial loss to users. There is no confidentiality or availability impact; the vulnerability is purely an integrity issue affecting transaction outputs (GitHub Advisory).
No public proof-of-concept exploit code has been observed, and there is no evidence of in-the-wild exploitation at the time of disclosure (GitHub Advisory). However, the maintainers confirmed the attack is practical: they ran a modified storage server returning a substituted recipient output and pointed an unmodified yours-wallet build at it, successfully redirecting a payment without any wallet-side indication. The vulnerability requires no privileges or user interaction and is exploitable over the network. The EPSS score is approximately 0.30%, and it is not listed in the CISA KEV catalog (GitHub Advisory).
StorageClient endpoint or compromising an existing one such as storage.babbage.systems). Passive network interception is insufficient.createAction call: When a victim wallet application calls createAction with a payment to a legitimate recipient, the storage server receives the request including the caller's intended args.outputs (recipient locking scripts and satoshi amounts).StorageCreateActionResult where either (a) a caller-specified output's lockingScript is replaced with an attacker-controlled script, or (b) an additional output paying the attacker is injected (funded by reducing the change output), while the caller's outputs appear intact.buildSignableTransaction builds the transaction using the storage-supplied scripts without verification. The wallet signs and broadcasts the transaction, sending funds to the attacker's address.WalletPermissionsManager.createAction never inspects tx.outputs — the substitution is invisible to the user (GitHub Advisory, Fix Commit).StorageClient endpoint.createAction calls completing successfully while blockchain explorers reveal the transaction outputs do not match the intended recipients; any WERR_INVALID_PARAMETER errors related to output.lockingScript or storage outputs in updated (patched) versions may indicate attempted exploitation.All three packages are patched in version 2.4.0, which adds verifyRequestedOutputsUnchanged() to hard-fail if storage omits, reclassifies, rescripts, or re-values any caller-specified output, and adds verifyUnrequestedOutputsAreChangeOrCommission() to reject any injected outputs beyond the caller's that are not client-derived change or a single commission output bounded by MAX_STORAGE_COMMISSION_SATOSHIS (500,000 satoshis). Applications unable to upgrade immediately should avoid remote StorageClient providers, use local storage instead, or independently verify every transaction output's locking script and value against the original request before signing (GitHub Advisory, Release Commit).
Source: This report was generated using AI
Free Vulnerability Assessment
Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.
Get a personalized demo
"Best User Experience I have ever seen, provides full visibility to cloud workloads."
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
"We know that if Wiz identifies something as critical, it actually is."