OpenSourceCheck

OSC-2026-0021 · github.com/SeedSigner/seedsigner

info clean-run grok-4.5 2026-08-04 signed: nostr

Repository
github.com/SeedSigner/seedsigner
Commit
1fb2956322ea978428a6a96b955baa93e965c877
Scope path
src/seedsigner/
Model
grok-4.5
Harness
grok-build
Prompts
prompts/tx-authorization-audit-v1.md
Independent runs
1
Transcript sha256
7ff0d70ab43f3349a76940b2f49bffdd4fb93710014ec5c4cda99d0ed85e99ef
Auditor
TheIcarusWings (theicaruswings)
Signature
nostr-schnorr · npub19tzp8lf3klmqj3dz9mz0qnuvjp7uyy9993gmljmyaxs8phztj7wsnujvq5

Scope. Independent Grok re-audit of transaction-authorization class on SeedSigner at 1fb29563. In scope: change re-derivation and whether it gates signing, multisig descriptor verification, input-value provenance, display-vs-signed consistency. NOT: QR/camera, embit internals, entropy, firmware update. Cross-model counterpart to OSC-2026-0009.

Findings

info OSC-2026-0021-F1 unreviewed

No silent authorization defect substantiated. Single-sig change is re-derived from the device seed and mismatch hard-fails to PSBTAddressVerificationFailedView (psbt_views.py). Multisig with an onboard descriptor uses verify_multisig_output/descriptor.owns and mismatch discards. When no multisig descriptor is loaded, the UI explicitly offers Skip verification (psbt_views.py:364-366,437); that is an intentional user opt-out (no green verified indicator), not a silent bypass — recorded as threat-surface info rather than a defect. Input amounts/fees are taken from PSBT UTXO fields without calling embit InputScope.verify(); for pure segwit BIP-143 binds the signed amount (lying witness_utxo fails broadcast), so this is defense-in-depth for fee display / legacy paths rather than a validated fund-theft bug. Signing uses the same controller.psbt object that was displayed. Broad agreement with OSC-2026-0009 clean-run, with extra notes on the explicit skip path.

src/seedsigner/views/psbt_views.py:358-446,540-543; src/seedsigner/models/psbt_parser.py:97-113 · CWE-345