AI-generated analysisPublished automatically and not human-verified. Validated context appears in community notes below.
← Watch feed
Moderate 63 Bitcoin

Count an unresolved output cosigner set as a mismatch

Public commit record

What the developer wrote

Authored by kdmukai

83/100 · Strong
Count an unresolved output cosigner set as a mismatch

The cosigner comparison skipped any output whose cosigners failed to
resolve, so the different-quorum case it exists for never fired on a
real psbt: coordinators write only the spending wallet's xpubs, and a
foreign cosigner's key then resolves against nothing. Once the inputs'
cosigners resolve, an output that differs or fails to resolve is
counted as a spend.

Keys now match xpubs by derivation alone rather than requiring the
claimed fingerprint to match first. The fingerprint is a label the
coordinator wrote; requiring it let one mislabeled cosigner turn
genuine change into a spend, and a key an xpub really derives is
proof enough on its own.

The different-quorum test now uses the wallet's own xpubs, the shape
every xpub-writing coordinator produces, and a second test keeps the
four-xpub variant.
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
The short version

What changed, and why it matters

This commit fixes a bug in SeedSigner's PSBT parser that could misclassify a payment to a different multisig wallet as 'change' (money going back to the user's own wallet). The bug occurred when the output's cosigner list could not be resolved, because the comparison was skipped entirely. The fix now counts an unresolved or mismatched cosigner set as a spend instead of change. It also changes how keys are matched to xpubs: instead of first requiring the coordinator-provided fingerprint to match, it now trusts a matching derivation path and a proven derived key. This prevents a mislabeled fingerprint from turning a real change output into what looks like a spend.

Recommended action

Review and merge this defensive fix. Verify that the new matching logic (derivation path only, no fingerprint pre-check) does not weaken security in any scenario where a coordinator could supply a colliding derivation path. Consider whether additional tests are needed for single-sig or edge-case fingerprint behavior.

Security signals we found

01

Change-vs-spend misclassification in multisig PSBT parsing

02

Cosigner resolution failure previously skipped instead of treated as mismatch

03

Fingerprint matching removed in favor of derivation-path + derived-key verification

04

Defensive hardening against buggy or maliciously edited PSBTs

05

Test coverage expanded for different-quorum scenarios

Risk score

Why this scored 63/100

Our methodology →
Potential impact 22/30
Exploitability 12/25
Stealth signal 10/15
Affected reach 8/15
Confidence 7/10
Evidence quality 4/5
Human-validated context

Community notes

Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.

No validated notes yet.

The AI analysis stands alone for now. Submit a note if you can add evidence or important context.