Bitcoin Core Merges Fix for Signing Flaw That Could Redirect Funds Without Exposing Keys
Key Takeaways
- •Bitcoin Core merged a fix on Sept. 25 that prevents signing PSBTs in cases where the SIGHASH_SINGLE missing-output edge case could leave a signature valid after the recipient has been changed.
- •The flaw does not expose private keys, but for legacy inputs a signature over a fixed hash value could potentially be reused against other unspent outputs controlled by the same key under matching structural conditions.
- •SegWit v0 signatures still commit to the specific coin being spent and its amount, yet the destination output can remain unbound, creating an authorization problem for wallets and signing devices.
- •The new check was moved into Bitcoin Core's shared signature-creation logic, extending the existing raw-transaction rejection to the PSBT path, including the walletprocesspsbt command, while allowing valid inputs in the same PSBT to proceed.
- •As of Oct. 4, no production release or confirmed backport contained the safeguard, prompting wallet providers and hardware-signing integrations to review their own handling of SIGHASH_SINGLE requests rather than wait for a Bitcoin Core release.

Bitcoin Core has added a safeguard against signing transactions that may not cryptographically bind funds to the payment destination a user approved. The change, merged into the project's master development branch on Sept. 25, targets a narrow flaw in partially signed Bitcoin transactions, or PSBTs, that could produce a valid signature without protecting the intended output. Bitcoin Optech highlighted the update on Oct. 2.
The issue does not expose a user's private key. Instead, it creates a different risk: under specific conditions, a signature can remain valid even after a transaction's recipient has been changed.
How the SIGHASH_SINGLE weakness works
Every Bitcoin signature carries a sighash flag that sets which parts of a transaction the signature commits to. SIGHASH_SINGLE is one of these signing modes, designed to commit an input to the output occupying the corresponding position in a transaction. When no output exists at that position, the protection breaks down differently depending on the type of bitcoin being spent.
For legacy inputs, the missing-output case can produce a signature over a fixed hash value. Bitcoin Core developers said such a signature may then be reusable against other unspent outputs controlled by the same key when the same structural conditions are present.
SegWit v0 transactions retain stronger protections, because the signature still commits to the specific coin being spent and its amount. The destination output, however, can remain unbound. That creates an authorization problem for wallets and signing devices: software could present one payment to the user while producing a signature that does not cryptographically guarantee that the approved recipient remains unchanged.
Bitcoin Core blocks the risky signing request
Bitcoin Core already rejected the edge case through its raw-transaction signing interface, but its PSBT path — including the walletprocesspsbt command — could still sign it. The new code moves the check into Bitcoin Core's shared signature-creation logic, so the same rejection now applies across Bitcoin Core's signing paths, preventing affected legacy and SegWit v0 inputs from being signed while allowing other valid inputs in the same PSBT to proceed.
PSBTs are commonly used to coordinate transactions between software wallets, hardware devices, and offline signers. They allow transaction builders to pass information to a separate signer without giving that system control of the private keys. The fix therefore reinforces a boundary that wallet developers must enforce independently of key security: a valid cryptographic signature must commit to the transaction details the user actually authorized.
Bitcoin Improvement Proposal 174, which defines PSBTs, already instructs signers to reject unacceptable signing modes and recommends SIGHASH_ALL when no alternative is specified. The Bitcoin Core change explicitly prevents this missing-output configuration from reaching the signing stage.
No production release containing the fix yet
Users do not yet have a confirmed production release containing the safeguard. The Sept. 25 change was merged into Bitcoin Core's development branch, and the project's published release listings had not identified a fixed version or confirmed backport as of Oct. 4. A backport would carry the same safeguard into an already released version; until one appears in the listings, the protection exists only in the development codebase.
That leaves wallet providers and hardware-signing integrations with a immediate decision: review their own handling of SIGHASH_SINGLE requests rather than waiting for a Bitcoin Core release to enforce the same protection downstream.
The original report was published on CryptoSlate.