Skip to content
Heist/ feed
HighFix available

`@bsv/wallet-toolbox` / `-client` / `-mobile` don't verify storage-supplied recipient output scripts against caller-requested outputs in createAction

Type: advisorySource: OSV1 source record

Reported by @echennells (Eric Chennells). Migrated from public issue #191 to a private advisory. **Affected:** `@bsv/wallet-toolbox` / `-client` / `-mobile`. Verified in `2.1.21` and `2.1.21-parity-fix.2`; the relevant code is the same at current HEAD **Summary:** When `createAction` runs against a remote `StorageClient`, the storage server returns the outputs to build. `buildSignableTransaction` takes each non-change output's `lockingScript` from the storage response and signs it, without comparing it to the `lockingScript` the caller supplied in `args.outputs`. `WalletPermissionsManager.createAction` parses the built transaction and has `args.outputs` available, but uses the tx only for `inputs` and `getFee()`; it does not inspect `tx.outputs`. A storage provider that returns a different recipient script than requested will therefore have that script signed and broadcast, while the calling app and UI still show the originally requested recipient. **Relevant code:** - `signer/methods/buildSignableTransaction.js` — non-change output `lockingScript = asBsvSdkScript(out.lockingScript)`, sourced from the storage response; `args.outputs` is not consulted. - `WalletPermissionsManager.js` `createAction` — parses the built tx, derives spend from `args.outputs` satoshis + `tx.getFee()`, reads `tx.inputs`; does not read `tx.outputs`. - `signer/methods/signAction.js`, `completeSignedTransaction.js` — sign the as-built tx; no output comparison. **Context:** Remote storage is a supported

Announced Group revision 1
Original source ↗

GHSA-36f9-7rg5-cpf8

Primary source · Revision 1

Imported from structured advisory data. Source references identify upstream records or fields; verify affected versions and your deployed configuration.

Security context

Source reference: osv:GHSA-36f9-7rg5-cpf8

@bsv/wallet-toolbox

Source reference: /affected/0/package/name

Affected versions
Not stated in this record
Fixed versions
2.4.0

Source reference: /affected/0/ranges

Prerequisites
Not stated in this record

@bsv/wallet-toolbox-client

Source reference: /affected/1/package/name

Affected versions
Not stated in this record
Fixed versions
2.4.0

Source reference: /affected/1/ranges

Prerequisites
Not stated in this record

@bsv/wallet-toolbox-mobile

Source reference: /affected/2/package/name

Affected versions
Not stated in this record
Fixed versions
2.4.0

Source reference: /affected/2/ranges

Prerequisites
Not stated in this record

Structured affected-version data

Original package identities and version rules from this source.

[
  {
    "ranges": [
      {
        "type": "SEMVER",
        "events": [
          {
            "introduced": "1.1.47"
          },
          {
            "fixed": "2.4.0"
          }
        ]
      }
    ],
    "package": {
      "name": "@bsv/wallet-toolbox",
      "purl": "pkg:npm/%40bsv/wallet-toolbox",
      "ecosystem": "npm"
    },
    "database_specific": {
      "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-36f9-7rg5-cpf8/GHSA-36f9-7rg5-cpf8.json"
    }
  },
  {
    "ranges": [
      {
        "type": "SEMVER",
        "events": [
          {
            "introduced": "1.1.47"
          },
          {
            "fixed": "2.4.0"
          }
        ]
      }
    ],
    "package": {
      "name": "@bsv/wallet-toolbox-client",
      "purl": "pkg:npm/%40bsv/wallet-toolbox-client",
      "ecosystem": "npm"
    },
    "database_specific": {
      "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-36f9-7rg5-cpf8/GHSA-36f9-7rg5-cpf8.json"
    }
  },
  {
    "ranges": [
      {
        "type": "SEMVER",
        "events": [
          {
            "introduced": "1.3.21"
          },
          {
            "fixed": "2.4.0"
          }
        ]
      }
    ],
    "package": {
      "name": "@bsv/wallet-toolbox-mobile",
      "purl": "pkg:npm/%40bsv/wallet-toolbox-mobile",
      "ecosystem": "npm"
    },
    "database_specific": {
      "source": "https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/09/GHSA-36f9-7rg5-cpf8/GHSA-36f9-7rg5-cpf8.json"
    }
  }
]
Related CVEs
CVE-2026-56744

Source reference: /aliases

Publisher severity

high

Source reference: /database_specific/severity

Linked CVE context

These ratings describe the referenced vulnerabilities and products. They are not a severity rating for every application using this dependency.

CVE-2026-56744 · High

@bsv/wallet-toolbox, @bsv/wallet-toolbox-client, @bsv/wallet-toolbox-mobile

Event
#14228 · Revision 1
Added to Heist Feed
Publisher date
Read the original announcement