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.