CK
← All projectsCoinkite

COLDCARD firmware

Open-source firmware for COLDCARD Bitcoin signing devices.

BitcoinHardware walletsActive incident
Repository coverage

468 commits in the local evidence base

Every captured commit receives deterministic security triage and a separate communication-quality score. Security candidates and broader second-pass signals receive full-patch Ollama analysis.

137security candidates209second-pass queue413AI analyses
59commits · 30 days
184commits · 60 days
253commits · 180 days
386commits · 365 days
Backfill bands
Aug 5 → Feb 6148 seen2 candidatesComplete
Feb 6 → Jun 684 seen8 candidatesComplete
Jun 6 → Jul 649 seen4 candidatesComplete
Jul 6 → Aug 525 seen4 candidatesComplete
Commit communication

Does the history explain itself?

Message quality measures whether a commit identifies its scope, purpose, rationale, testing, and supporting references. It does not change the security-severity score.

36/100 average clarity
10Strong · 80–100
45Adequate · 60–79
195Thin · 40–59
218Opaque · 0–39
42security candidates with opaque commit messaging
Read the scoring rubric →
Developer activity

Who is changing the project?

Public Git author strings; identities are not independently verified.

DeveloperCommitsCandidatesAnalyzedHigh riskMessage avg.
scgbckbone2551112271643
Peter D. Gray17020162818
Dmitry Monakhov212173
@Bibo-dochex923042
kdmukai111050
doc-hex111073
Piotr Duszynski111073
tadeubas606051
copilot-swe-agent[bot]504072
Danilo500079
hitechhayekian301081
Copilot300074
Analysis record

Published AI watches

Last scanned 49 minutes ago

Moderate 59 AI analysisMessage 28 · Opaque
CK CoinkiteCOLDCARD firmware BitcoinHardware wallets

Harden PSBTv2 parsing

This commit tightens how COLDCARD reads PSBTv2 (Partially Signed Bitcoin Transaction version 2) files. It now rejects several malformed or ambiguous encodings that could previously be accepted: extra key data attached to fields that should…

PSBT parser hardeningrejection of non-canonical compact-size encodingsenforcement of singleton key-data emptiness
5e0dbd0eby scgbckbone+90−113 files
Vendor flagged security relevance
Low 34 AI analysisMessage 45 · Thin
CK CoinkiteCOLDCARD firmware BitcoinHardware wallets

PSBTv2 per input required lock time calculation

This commit adds support in the COLDCARD firmware for a newer Bitcoin transaction format feature (PSBTv2) that lets each input specify its own required lock time. Before this change, the device did not correctly compute the final transacti…

PSBTv2 per-input locktime parsing and validation addedBIP-370 required locktime computation implementedIncompatible height/time locktime requirements rejected with assertion
2ea2e791by scgbckbone+191−336 files
No security note in commit
Low 46 AI analysisMessage 91 · Strong
CK CoinkiteCOLDCARD firmware BitcoinHardware wallets

Add regression test for non-object JSON message-sign input

This commit only adds a new automated test to the COLDCARD firmware test suite. The test checks that when a user tries to sign a text file containing valid JSON that is not a JSON object (for example, a plain number, string, null, or list)…

Regression test for input validation of JSON message-signingTest comment explicitly references avoiding a device crash on malformed JSON inputTest requested during review of pull request #808, suggesting prior related code change
adb7baa8by copilot-swe-agent[bot]+32−01 file
No security note in commit
Moderate 56 AI analysisMessage 50 · Thin
CK CoinkiteCOLDCARD firmware BitcoinHardware wallets

hygiene: duress wallet activate - wipe before getting slot data

This commit is a defensive hygiene fix in the COLDCARD hardware wallet's 'trick PIN' duress-wallet feature. It moves a memory-wipe routine so that it runs before the device looks up the duress wallet slot. The change reduces the window in …

secret-handling order-of-operations changeDelta Mode coercer/wipe scenarioduress wallet secret loading
aa645247by scgbckbone+3−31 file
Vendor flagged security relevance
Low 41 AI analysisMessage 45 · Thin
CK CoinkiteCOLDCARD firmware BitcoinHardware wallets

OVC clear stale outputs from new_outputs

This firmware update fixes a cleanup issue in the COLDCARD wallet's transaction signing code. Before finalizing a new Bitcoin transaction, the device now clears out leftover 'change output' records that may have been captured during a prev…

State not reset between signing attemptsStale change-output metadata reused in transaction finalizationOVC (Output Value Check) validation may be affected by leftover data
62163ccdby scgbckbone+3−01 file
No security note in commit
Informational 15 AI analysisMessage 65 · Adequate
CK CoinkiteCOLDCARD firmware BitcoinHardware wallets

Drop ValueError message string to save flash space

This commit removes a human-readable error message from a ValueError exception to reduce the amount of flash storage used by the firmware. It is a minor code cleanup and does not change the security behavior of the code. The function still…

dc89513cby copilot-swe-agent[bot]+1−11 file
No security note in commit
Low 49 AI analysisMessage 60 · Adequate
CK CoinkiteCOLDCARD firmware BitcoinHardware wallets

Add changelog entry for msgsign JSON crash fix

This commit only adds a changelog note saying a previous fix stopped the COLDCARD hardware wallet from crashing when a message-signing request was valid JSON but not a JSON object (for example, a number or string instead of a dictionary). …

Device crash on malformed message-signing inputInput vector includes NFC, QR, and SD card JSON filesValid JSON but wrong type (non-object) bypasses simple format checks
07afee0dby copilot-swe-agent[bot]+3−01 file
Vendor flagged security relevance
Informational 23 AI analysisMessage 65 · Adequate
CK CoinkiteCOLDCARD firmware BitcoinHardware wallets

Fix uncaught AttributeError on non-object JSON in parse_msg_sign_request

This commit fixes a bug where the COLDCARD firmware's message-signing feature would crash with an uncaught error if a user supplied valid JSON that wasn't a structured object (for example, a plain number, string, list, or null). The fix ch…

uncaught exception in message parsing pathinput validation gap on JSON typepotential denial-of-service via malformed request
d55ddbceby copilot-swe-agent[bot]+3−01 file
No security note in commit
Informational 15 AI analysisMessage 28 · Opaque
CK CoinkiteCOLDCARD firmware BitcoinHardware wallets

Signed for mk release.

This commit only updates the release signature file (signatures.txt) for the COLDCARD firmware. It adds two new file hashes for a v5.6.2-mk release and refreshes the PGP signature covering the file. There are no code changes, no bug fixes,…

e6d01c36by Peter D. Gray+10−81 file
No security note in commit
Informational 15 AI analysisMessage 28 · Opaque
CK CoinkiteCOLDCARD firmware BitcoinHardware wallets

Signed for q1 release.

This commit only updates a release signature file. It refreshes SHA-256 hashes for changelog files and adds hashes for two new firmware release files, then re-signs the file with a PGP signature. There are no code changes, no bug fixes, an…

a310e1ddby Peter D. Gray+16−141 file
No security note in commit
Informational 15 AI analysisMessage 28 · Opaque
CK CoinkiteCOLDCARD firmware BitcoinHardware wallets

update block height

This commit simply updates a stored Bitcoin blockchain height number from 965,337 to 965,338. It is a routine, automatically generated data refresh with no code logic changes and no apparent security relevance.

3caf599eby Peter D. Gray+2−21 file
No security note in commit
Informational 15 AI analysisMessage 38 · Opaque
CK CoinkiteCOLDCARD firmware BitcoinHardware wallets

new policy w blank lines

This commit only edits the project's internal release notes file. It replaces a detailed list of upcoming changes with placeholder 'tbd' entries and adds a note asking contributors to leave blank lines between additions. There are no code …

3d8f90f1by Peter D. Gray+9−561 file
No security note in commit
Moderate 58 AI analysisMessage 28 · Opaque
CK CoinkiteCOLDCARD firmware BitcoinHardware wallets

update for new release

This commit is a release-notes-only update for the COLDCARD hardware wallet firmware. It moves many security-relevant bug fixes and hardening items from the current changelog into the historical release notes for versions 5.6.1 and 1.5.1Q,…

USB protocol encryption upgrade (ncry v3) with direction-separated keys and replay protectionPSBT tampering detection: re-verify staged bytes before signing after Virtual Disk overwriteFirmware update integrity: abort if staged image overwritten, reject images extending past world-checksum region
ea2b89bfby Peter D. Gray+272−1124 files
Vendor flagged security relevance
Informational 15 AI analysisMessage 28 · Opaque
CK CoinkiteCOLDCARD firmware BitcoinHardware wallets

update block height

This commit simply updates a stored Bitcoin blockchain height number from 963,314 to 965,337, along with its timestamp. It is an automatic, routine data refresh with no code logic changes and no apparent security relevance.

15deb2f6by Peter D. Gray+2−21 file
No security note in commit
Moderate 59 AI analysisMessage 73 · Adequate
CK CoinkiteCOLDCARD firmware BitcoinHardware wallets

bugfix: report staged firmware modification at upgrade approval

This commit fixes a bug in the COLDCARD firmware upgrade process. Previously, if someone tampered with the staged firmware after the user saw the approval prompt but before they confirmed, the device would crash with a bare internal error …

Tamper-detection failure path hardened: assert replaced with user-facing failure storyDefense-in-depth assertion added to PIN-changing flowTest coverage added for tamper-abort message
ef73cf58by scgbckbone+6−64 files
No security note in commit
Informational 2 AI analysisMessage 45 · Thin
CK CoinkiteCOLDCARD firmware BitcoinHardware wallets

bump ckcc to latest master

This commit only updates a linked external code library (a Git submodule called ckcc-protocol) to a newer version. The actual code changes inside that library are not shown in the commit diff, and no security-related information was provid…

ec1c9417by scgbckbone+1−11 file
No security note in commit
Informational 15 AI analysisMessage 0 · Opaque
CK CoinkiteCOLDCARD firmware BitcoinHardware wallets

tweaks

This commit only edits the draft release changelog file. It rewords two upcoming feature descriptions and fixes line wrapping for another entry. No source code, firmware logic, or security behavior was changed.

e166ffddby Peter D. Gray+8−41 file
No security note in commit
Moderate 62 AI analysisMessage 45 · Thin
CK CoinkiteCOLDCARD firmware BitcoinHardware wallets

bugfix: reject non-ASCII BIP-39 passphrases

This update fixes a bug where COLDCARD wallets would accept BIP-39 passphrases containing non-ASCII characters (like accented letters or emojis) or non-printable characters. Because different wallet software normalizes such characters diff…

Behavioral fix that prevents silent derivation of incompatible wallet seedsInput validation added for BIP-39 passphrase across USB, UI, saved-passphrase restore, and note/password lanesRejection of non-printable ASCII and non-ASCII Unicode characters
c1a67660by scgbckbone+155−147 files
Vendor flagged security relevance
High 74 AI analysisMessage 60 · Adequate
CK CoinkiteCOLDCARD firmware BitcoinHardware wallets

bugfix: capture single-sig segwit change

This commit fixes two related security bugs in the COLDCARD hardware wallet's protection against a known 'BIP-143 amount swap' attack. First, the wallet was recording the claimed amount of a segwit input to its secure cache as soon as a tr…

Fixes deferred persistence of UTXO amount cache until after successful signingFixes missing capture of single-sig segwit change outputs (p2wpkh and p2sh-p2wpkh)Prevents cache poisoning by cancelled/malicious PSBT previews
8979a8a5by scgbckbone+322−806 files
Vendor flagged security relevance
Moderate 66 AI analysisMessage 45 · Thin
CK CoinkiteCOLDCARD firmware BitcoinHardware wallets

bugfix: Reject duplicate singleton PSBT keys

This update fixes a bug in how the COLDCARD wallet reads PSBT files (the standard format for passing Bitcoin transactions between devices). Previously, if a PSBT contained the same special 'singleton' key twice in the same section, the dev…

PSBT parser now rejects duplicate singleton keysNew test cases for duplicate keys in global/input/output mapsChangelog labels the change as a bugfix
cb6df8daby scgbckbone+30−13 files
No security note in commit
Repository ledger

Explore captured commits

Expand any commit for its author, full message, clarity score, changed files, triage signals, analysis, and source link.

Security candidateHarden PSBTv2 parsingby scgbckbone · 5e0dbd0e · Sep 11, 2026 · 3 filesMessage 28 · OpaqueModerate 59Details
Commit message · scgbckbone

Harden PSBTv2 parsing

28/100 · OpaqueMessage clarity
✓ Subject identifies a change! No meaningful explanatory body! Opaque security-relevant change
Why it was queued
signing boundarydefensive validationsigning or wallet path
AI analysis · Moderate 59/100

This commit tightens how COLDCARD reads PSBTv2 (Partially Signed Bitcoin Transaction version 2) files. It now rejects several malformed or ambiguous encodings that could previously be accepted: extra key data attached to fields that should have none, badly encoded input/output counts, and PSBTv2 files that are missing the required global version field. These are defensive hardening fixes rather than a single obvious exploit, but they close paths where a malicious or malformed PSBT could confuse the wallet's transaction parser.

Security candidatePSBTv2 per input required lock time calculationby scgbckbone · 2ea2e791 · Sep 6, 2026 · 6 filesMessage 45 · ThinLow 34Details
Commit message · scgbckbone

PSBTv2 per input required lock time calculation

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
signing boundarysigning or wallet path
AI analysis · Low 34/100

This commit adds support in the COLDCARD firmware for a newer Bitcoin transaction format feature (PSBTv2) that lets each input specify its own required lock time. Before this change, the device did not correctly compute the final transaction lock time from these per-input requirements, which could cause it to sign transactions with the wrong lock time or reject valid ones. The patch implements the BIP-370 rule: if any input requires a lock time, the transaction's final lock time must be the most restrictive (maximum) of those requirements, overriding any fallback. This is a correctness/feature fix rather than a remote exploit, but incorrect lock-time handling could in theory let a malicious co-signer or wallet software trick a user into signing a transaction that becomes spendable earlier or later than expected.

Security candidatehygiene: duress wallet activate - wipe before getting slot databy scgbckbone · aa645247 · Sep 4, 2026 · 1 fileMessage 50 · ThinModerate 56Details
Commit message · scgbckbone

hygiene: duress wallet activate - wipe before getting slot data

50/100 · ThinMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
access controlauthentication path
AI analysis · Moderate 56/100

This commit is a defensive hygiene fix in the COLDCARD hardware wallet's 'trick PIN' duress-wallet feature. It moves a memory-wipe routine so that it runs before the device looks up the duress wallet slot. The change reduces the window in which sensitive wallet data could remain in memory if the device is in Delta Mode (a limited, coerced-access mode). There is no direct evidence in the commit that an actual leak was exploited; it reads as a precautionary hardening change.

Security candidatebugfix: report staged firmware modification at upgrade approvalby scgbckbone · ef73cf58 · Sep 3, 2026 · 4 filesMessage 73 · AdequateModerate 59Details
Commit message · scgbckbone

bugfix: report staged firmware modification at upgrade approval

- FirmwareUpgradeRequest: fail with "Firmware modified" story instead of
bare assert when PSRAM write counter moved after staging
- main_pin_changer: assert no temporary wallet is active (menu already
hides the item; defense in depth)
- test_upgrades: assert tamper abort shows the failure message
- test_ccc: drop stale CCCFeature.last_fail_reason resets

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
authentication path
AI analysis · Moderate 59/100

This commit fixes a bug in the COLDCARD firmware upgrade process. Previously, if someone tampered with the staged firmware after the user saw the approval prompt but before they confirmed, the device would crash with a bare internal error (assert). Now it cleanly aborts and tells the user 'Firmware modified'. The commit also adds a small extra safety check in the main PIN change flow to ensure no temporary wallet is active, and updates tests accordingly.

Security candidatebugfix: reject non-ASCII BIP-39 passphrasesby scgbckbone · c1a67660 · Sep 2, 2026 · 7 filesMessage 45 · ThinModerate 62Details
Commit message · scgbckbone

bugfix: reject non-ASCII BIP-39 passphrases

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
access controlcryptography-sensitive pathseed or entropy path
AI analysis · Moderate 62/100

This update fixes a bug where COLDCARD wallets would accept BIP-39 passphrases containing non-ASCII characters (like accented letters or emojis) or non-printable characters. Because different wallet software normalizes such characters differently, the same passphrase could silently produce a different wallet address on COLDCARD than on another app. The fix now rejects those passphrases outright, preventing users from accidentally creating funds they later cannot access or reconcile with other wallets.

Security candidatebugfix: capture single-sig segwit changeby scgbckbone · 8979a8a5 · Sep 2, 2026 · 6 filesMessage 60 · AdequateHigh 74Details
Commit message · scgbckbone

bugfix: capture single-sig segwit change
bugfix: defer OVC persistence until signing
enhancement: improve OVC implementation and size 30 -> 128

60/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body
Why it was queued
signing boundarycryptography-sensitive pathsigning or wallet pathauthentication path
AI analysis · High 74/100

This commit fixes two related security bugs in the COLDCARD hardware wallet's protection against a known 'BIP-143 amount swap' attack. First, the wallet was recording the claimed amount of a segwit input to its secure cache as soon as a transaction was previewed, even if the user later cancelled without signing. A malicious co-signer could therefore 'poison' the cache with a wrong amount and later prevent the owner from spending that coin. Second, single-signature segwit change outputs created by transactions the user signed were not being added to the cache, so an attacker could later trick the wallet into signing a spend that understated the change amount. The patch defers cache writes until after a signature is actually produced, and captures single-sig segwit change amounts at finalize time. It also expands the cache size from 30 to 128 entries.

Security candidatebugfix: Reject duplicate singleton PSBT keysby scgbckbone · cb6df8da · Sep 2, 2026 · 3 filesMessage 45 · ThinModerate 66Details
Commit message · scgbckbone

bugfix: Reject duplicate singleton PSBT keys

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
signing boundarysigning or wallet path
AI analysis · Moderate 66/100

This update fixes a bug in how the COLDCARD wallet reads PSBT files (the standard format for passing Bitcoin transactions between devices). Previously, if a PSBT contained the same special 'singleton' key twice in the same section, the device might silently use the second value. Now it immediately rejects the file. Duplicate singleton keys could let a malicious transaction tool trick the wallet into using one value while a human reviewer sees another, potentially causing the wrong amount or destination to be signed.

Security candidateWipe on duress-secret view/activate in Delta Modeby scgbckbone · 3ad73025 · Sep 1, 2026 · 3 filesMessage 68 · AdequateHigh 76Details
Commit message · scgbckbone

Wipe on duress-secret view/activate in Delta Mode

In Delta Mode, the Trick PINs menu allowed a coercer to (a) press (6) to read
a duress wallet's full seed words / XPRV off screen, and (b) Activate Wallet to
load the duress secret as the active temporary seed -- all without a wipe. Every
other secret-revealing flow calls wipe_if_deltamode(); these two paths were
missed. The master seed itself is safe (hardened derivation), but the duress
wallet's funds and the user's deniability were exposed.

Keep menu browsing working (Delta Mode should look like normal operation), but
call wipe_if_deltamode() before the (6) viewer reads the slot and before
Activate Wallet applies the secret.

Add test_deltamode_duress_secret_view_wipes: browsing the menu works in delta
mode, but viewing the duress secret and activating the wallet each trigger a
wipe. Verified to fail pre-patch (no wipe) and pass with the fix.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
access controldefensive validationauthentication path
AI analysis · High 76/100

This commit fixes a security bug in the COLDCARD hardware wallet's 'Delta Mode' duress feature. Delta Mode is designed to make the device look normal while silently protecting secrets. Previously, a coercer could force someone to open the Trick PINs menu and either view the full seed words of a duress wallet, or activate that wallet, without triggering a wipe. This exposed the duress wallet's funds and weakened the user's deniability. The fix makes both actions trigger a secure wipe when in Delta Mode, matching how other secret-revealing flows already behaved. Browsing the menu still works so Delta Mode remains plausible.

Security candidateReject out-of-range txn version on PSBTv2 pathby scgbckbone · e81b64bb · Sep 1, 2026 · 3 filesMessage 68 · AdequateModerate 64Details
Commit message · scgbckbone

Reject out-of-range txn version on PSBTv2 path

The `bad txn version` check (`txn_version in {0,1,2,3}`) lives in
parse_txn(), which only runs for PSBTv0. On the PSBTv2 path read_psbt()
skips parse_txn(), so PSBT_GLOBAL_TX_VERSION was used unvalidated: a v2
PSBT with nVersion 4 (or a negative value) could be approved and signed,
producing a transaction the network will not relay.

validate() already enforces PoR-specific versions (0 only for BIP-322,
{0,2} for PoR txns) but had no upper bound for ordinary transactions. Add
the matching non-PoR bound (txn_version in {1,2,3}) so both v0 and v2
reject out-of-range versions while the BIP-322 PoR path is unchanged.

Add test_psbt_v2_bad_txn_version (versions 4, -1, 100 rejected on v2).
Verified to fail pre-patch (v2 reaches 'OK TO SEND?') and pass with the
fix; full test_bip322.py suite still passes.

68/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context
Why it was queued
secret or key materialsigning boundarydefensive validationsigning or wallet path
AI analysis · Moderate 64/100

This fix closes a gap where COLDCARD would approve and sign a Bitcoin transaction with an invalid version number if the transaction was packaged in the newer PSBTv2 format. For PSBTv0, such bad versions were already rejected, but the PSBTv2 code path skipped that check. The result could be a signed transaction that the Bitcoin network refuses to relay, potentially trapping funds or breaking wallet workflows. The patch adds the same version-number sanity check to the shared validation routine so both PSBT versions are protected.

Security candidateUse one PSRAM write counterby scgbckbone · 2469c0f1 · Sep 1, 2026 · 6 filesMessage 45 · ThinModerate 58Details
Commit message · scgbckbone

Use one PSRAM write counter

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
signing or wallet pathauthentication path
AI analysis · Moderate 58/100

This commit simplifies how the COLDCARD firmware tracks writes to its external PSRAM memory chip. Previously, the firmware kept two separate counters: one for transaction (TXN) data and one for firmware upgrade images. The change merges them into a single counter that increments on any PSRAM write. The goal is to make it harder for an attacker to silently modify data after the user has reviewed it, by detecting any later write to PSRAM. It is a defensive hardening change rather than a fix for a known active attack, and the commit message does not describe a specific vulnerability.

Security candidateMerge pull request #773 from scgbckbone/bugfix/bip322-por-foreign-inputs-publicby doc-hex · 84d185de · Sep 1, 2026 · 3 filesMessage 73 · AdequateModerate 64Details
Commit message · doc-hex

Merge pull request #773 from scgbckbone/bugfix/bip322-por-foreign-inputs-public

bugfix: reject foreign inputs from BIP322 proofs of reserves

73/100 · AdequateMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides an explanatory body✓ Links an issue, advisory, or supporting reference
Why it was queued
secret or key materialcryptography-sensitive pathsigning or wallet pathmerge-commit duplicate discount
AI analysis · Moderate 64/100

This update fixes a bug in COLDCARD's handling of BIP-322 Proof of Reserves (POR). A maliciously crafted proof could include a foreign (not owned by the device) Bitcoin input disguised to look like the device's own input using a fake key path and a partial signature. Before the fix, the device might have accepted such a foreign input in a POR, potentially allowing someone to falsely inflate or manipulate a proof of reserves. After the fix, the device rejects any POR that contains inputs it is not actually going to sign, beyond the required first input.

Security candidatetesting: stabilize simulator multiprocess runsby scgbckbone · 9091ce62 · Sep 1, 2026 · 10 filesMessage 55 · ThinInformational 15Details
Commit message · scgbckbone

testing: stabilize simulator multiprocess runs

55/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Mentions testing or verification! No meaningful explanatory body
Why it was queued
cryptography-sensitive pathsigning or wallet path
AI analysis · Informational 15/100

This commit only changes test scripts and test infrastructure for the COLDCARD firmware simulator. It adjusts timeouts, adds helper functions for waiting on screen text, fixes test flakiness, and tweaks how tests are split across parallel jobs. There are no changes to the actual firmware code that runs on the device, so this cannot affect real users or introduce a security vulnerability in the product itself.

Security candidateHarden BIP322 POR foreign-input checkby scgbckbone · 8dba7380 · Sep 1, 2026 · 3 filesMessage 83 · StrongHigh 76Details
Commit message · scgbckbone

Harden BIP322 POR foreign-input check

Gate on required_key instead of num_our_keys: keypath metadata is
attacker-controlled, and the zero-xfp placeholder is rewritten to our
fingerprint on the fly, so a foreign input carrying a forged keypath
plus a partial signature looked both 'ours' and already-signed, and
was never rejected nor signed - while the SIGHASH_ALL signature over
input zero still committed to its prevout.

required_key is only set after the input's pubkey/scripts validate
against our seed or WIF store, so gating on it fails closed for all
three variants: no keypaths, forged keypaths, and presigned inputs.

Add regression test with a foreign UTXO (different seed) carrying a
zero-xfp keypath and a garbage partial signature.

83/100 · StrongMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification✓ Names security-relevant behavior explicitly
Why it was queued
explicit security languagesecret or key materialsigning boundarydefensive validationfuzzing or regression evidencecryptography-sensitive pathsigning or wallet path
AI analysis · High 76/100

This commit fixes a bug in COLDCARD's BIP-322 Proof of Reserves (POR) feature. POR lets a wallet prove it controls certain bitcoins without moving them. The bug allowed an attacker to include someone else's unspent coin in the proof by disguising it with fake key-path metadata and a bogus partial signature. The device would then treat that foreign input as already signed and belonging to the wallet, making the proof falsely claim control of funds the wallet does not actually own. The fix checks that the device can actually derive the required signing key for each input, rather than relying on attacker-controlled key-path data.

Security candidatetest: cover seedless temporary backup restoresby scgbckbone · f062289b · Aug 31, 2026 · 1 fileMessage 47 · ThinInformational 12Details
Commit message · scgbckbone

test: cover seedless temporary backup restores

47/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Uses a recognizable type or scope✓ Mentions testing or verification! No meaningful explanatory body! Contains work-in-progress language
Why it was queued
seed or entropy path
AI analysis · Informational 12/100

This commit only adds a new automated test for the COLDCARD hardware wallet. It checks that a backup file can be restored as a temporary seed while the device is in a 'seedless' state. There is no change to the actual wallet firmware code, only to the test suite, so it does not introduce or fix a security vulnerability by itself.

Security candidatebugfix: guard low-level master secret writesby scgbckbone · 30a05819 · Aug 31, 2026 · 2 filesMessage 45 · ThinModerate 63Details
Commit message · scgbckbone

bugfix: guard low-level master secret writes

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
seed or entropy path
AI analysis · Moderate 63/100

This commit adds safety checks to prevent the COLDCARD wallet from overwriting or restoring the main master secret while a temporary seed is active. Without these guards, a low-level restore or seed-setting operation could potentially replace the real wallet seed while the device is operating under a temporary seed, leading to confusion or loss of funds. The fix adds explicit assertions that block these operations when a temporary seed is in use.

Security candidatebugfix: recognize temporary secrets in teleport and Seed XORby scgbckbone · 8594d6be · Aug 31, 2026 · 2 filesMessage 30 · OpaqueModerate 59Details
Commit message · scgbckbone

bugfix: recognize temporary secrets in teleport and Seed XOR

30/100 · OpaqueMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body! Contains work-in-progress language! Opaque security-relevant change
Why it was queued
seed or entropy path
AI analysis · Moderate 59/100

This commit fixes a bug in the COLDCARD hardware wallet where two seed-management features (teleport and Seed XOR) did not properly recognize temporary/ephemeral wallets. Previously, the code only checked whether the secure element (SE) held a permanent seed. If a user was operating from a temporary seed while the SE was blank, the device treated the wallet as empty. In teleport, this could cause an incoming seed to overwrite the current temporary seed as the master seed. In Seed XOR, it could cause the reconstructed seed to be saved as the master seed or fail to warn that the result would be temporary. The fix makes both features check whether any secret—stored or temporary—is active.

Security candidatebugfix: keep CKCC backup restores temporaryby scgbckbone · 10456538 · Aug 31, 2026 · 1 fileMessage 25 · OpaqueLow 44Details
Commit message · scgbckbone

bugfix: keep CKCC backup restores temporary

25/100 · OpaqueMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body! Contains work-in-progress language! Opaque security-relevant change
Why it was queued
authentication path
AI analysis · Low 44/100

This commit fixes a logic bug in how COLDCARD decides whether to restore a backup as a temporary wallet or as the device's main wallet. Previously, the code checked whether the master secret was blank using an older method. The fix changes that check to use a more accurate function that detects whether any secrets are active. The risk is that a backup could be restored to the wrong place—permanently overwriting the main wallet when the user expected a temporary restore, or failing to create a temporary wallet when one was intended. The commit message calls this a bugfix but does not describe it as a security issue.

Security candidateKeep TRNG words together on Qby scgbckbone · 23e7e70c · Aug 31, 2026 · 2 filesMessage 45 · ThinInformational 19Details
Commit message · scgbckbone

Keep TRNG words together on Q

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
entropy or randomnessseed or entropy path
AI analysis · Informational 19/100

This commit fixes a display layout problem on the COLDCARD Q hardware wallet. When showing 24 special 'TRNG words' on the Q's screen, the list was being split across two screens in a confusing way, so a user might not see all words together. The change adds a hint telling the user to scroll, and adjusts the text so the 24-word grid starts cleanly on a new screen. It is a usability fix for viewing sensitive seed material, not a fix for a code-execution or theft vulnerability.

Security candidateAdd seed mix verifierby scgbckbone · 27535c89 · Aug 31, 2026 · 2 filesMessage 28 · OpaqueInformational 15Details
Commit message · scgbckbone

Add seed mix verifier

28/100 · OpaqueMessage clarity
✓ Subject identifies a change! No meaningful explanatory body! Opaque security-relevant change
Why it was queued
seed or entropy path
AI analysis · Informational 15/100

This commit adds a new standalone Python helper script and its tests. The script lets a user independently verify how COLDCARD mixes its built-in random words with dice rolls or coin flips to create a seed. It does not change any firmware code, wallet behavior, or cryptographic logic in the device itself. There is no indication this is a security fix or that it addresses any vulnerability.

Security candidatebugfix: hide main PIN change for temporary walletsby scgbckbone · efe407a9 · Aug 28, 2026 · 3 filesMessage 30 · OpaqueLow 38Details
Commit message · scgbckbone

bugfix: hide main PIN change for temporary wallets

30/100 · OpaqueMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component! No meaningful explanatory body! Contains work-in-progress language! Opaque security-relevant change
Why it was queued
access controlauthentication path
AI analysis · Low 38/100

This update fixes a user-interface bug where the 'Change Main PIN' option remained visible while using a temporary wallet or a BIP-39 passphrase wallet. Changing the main PIN from a temporary wallet could confuse users or lead to unexpected wallet state, so the option is now hidden in those modes. It is a straightforward menu fix rather than a cryptographic flaw.

Security candidateReject foreign BIP322 reserve inputsby scgbckbone · 803bd04d · Aug 27, 2026 · 3 filesMessage 45 · ThinModerate 62Details
Commit message · scgbckbone

Reject foreign BIP322 reserve inputs

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
secret or key materialcryptography-sensitive pathsigning or wallet path
AI analysis · Moderate 62/100

This update fixes a bug in the COLDCARD hardware wallet's handling of BIP-322 Proof of Reserves (PoR) transactions. Previously, the wallet could be presented with a PoR PSBT containing extra 'foreign' inputs that it did not control, and it would not clearly reject the transaction. This could allow a malicious or malformed PoR request to include unrelated inputs, potentially misleading the user or weakening the proof. The fix now rejects any BIP-322 PoR PSBT that contains inputs not belonging to the wallet.

Security candidatebugfix: use write counter for firmware approvalby scgbckbone · 11fcadc6 · Aug 27, 2026 · 5 filesMessage 45 · ThinHigh 74Details
Commit message · scgbckbone

bugfix: use write counter for firmware approval

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
authentication path
AI analysis · High 74/100

This update fixes a security bug in the COLDCARD hardware wallet's firmware upgrade process. Previously, an attacker could potentially swap the staged firmware image while the user was still reviewing the upgrade approval screen. The device now uses a write counter to detect if the staged firmware image was overwritten after it was shown to the user, and aborts the upgrade if so. The change log credits Huzaifa Jawaid for the finding.

Security candidatebugfix: restrict HSM BIP322 WIF signingby scgbckbone · fb2f6da7 · Aug 27, 2026 · 3 filesMessage 45 · ThinModerate 62Details
Commit message · scgbckbone

bugfix: restrict HSM BIP322 WIF signing

45/100 · ThinMessage clarity
✓ Descriptive subject✓ Names a concrete action or component! No meaningful explanatory body
Why it was queued
secret or key materialsigning boundary
AI analysis · Moderate 62/100

This commit fixes a bug in the COLDCARD HSM (High-Security Mode) where signing BIP-322 messages using private keys stored in the device's WIF Store could bypass the message-signing policy. Previously, such signatures may have been allowed even when the policy only permitted specific derivation paths. The fix now requires the HSM policy to explicitly allow 'any' path before WIF Store keys can be used for BIP-322 signing. This is a security-hardening bugfix for a niche but sensitive code path.

Security candidatebugfix: bind firmware upgrade approval to staged imageby scgbckbone · 1d01d533 · Aug 26, 2026 · 2 filesMessage 83 · StrongHigh 76Details
Commit message · scgbckbone

bugfix: bind firmware upgrade approval to staged image

FirmwareUpgradeRequest renders the consent screen from a header
snapshot captured at upload time, but hands the flash operation a
live PSRAM window. A second upload is permitted while the approval
is displayed (check_busy allow-lists FirmwareUpgradeRequest), and a
raw image upload without the legacy trailer never re-enters
authorize_upgrade — so the staged bytes can be replaced after review
without any error.

Record a digest of the staged image at approval time and re-verify
immediately before pa.firmware_upgrade(), failing closed on mismatch.
Mirrors the staged-bytes guard ApproveTransaction already has.

Add a regression test that uploads image A, gets the approval screen,
uploads image B as a raw image (no trailer), approves, and asserts
the upgrade aborts.

83/100 · StrongMessage clarity
✓ Specific, descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
fuzzing or regression evidenceauthentication path
AI analysis · High 76/100

This commit fixes a security bug in the COLDCARD hardware wallet's firmware update process. Previously, while the user was looking at the approval screen for one firmware file, a second file could be silently uploaded and replace the first one. If the user approved, the second (unreviewed) firmware would be installed instead of the one they saw on screen. The fix records a fingerprint of the staged firmware at approval time and checks it again right before flashing, aborting if anything changed.

Security candidatebugfix: vdisk import bumps txn write countby scgbckbone · 39fa3547 · Aug 26, 2026 · 3 filesMessage 78 · AdequateModerate 67Details
Commit message · scgbckbone

bugfix: vdisk import bumps txn write count

The C VirtDisk importer memcpy's into the PSRAM TXN staging regions without going through PSRAMWrapper.write_at(), so txn_write_count is not bumped and the pre-signing re-hash takes its fast path over possibly-clobbered bytes.

Bump the counter and revoke any PSRAM lease before copy_file, so post-review tampering through the virtual disk is caught and stale staged bytes cannot be downloaded.

Make the simulator model copy_file as a direct PSRAM write, then exercise the real VirtDisk event path during a pending PSBT approval and verify signing aborts.

78/100 · AdequateMessage clarity
✓ Descriptive subject✓ Names a concrete action or component✓ Provides detailed explanatory context✓ Mentions testing or verification
Why it was queued
signing boundary
AI analysis · Moderate 67/100

This commit fixes a bug in the COLDCARD hardware wallet's virtual disk (VirtDisk) feature. When a user imported a file via the virtual disk, the firmware's fast C importer copied data directly into a sensitive memory area used to stage pending Bitcoin transactions. Because it bypassed the normal tracking mechanism, the wallet did not realize the transaction data had been touched. An attacker or malicious program with virtual disk access could therefore overwrite a transaction you were about to approve, and the wallet might sign the altered version instead of the one you reviewed on screen. The fix records the write, revokes any pending download lease, and adds a test proving the wallet now aborts signing when this happens.