bugfix: block BIP-85 derivation in Delta Mode
What changed, and why it matters
This commit fixes a bug in the COLDCARD hardware wallet where using the BIP-85 feature while in Delta Mode could expose or operate on the real master seed instead of the expected temporary/delta seed. The fix forces the wallet to wipe the seed before performing BIP-85 derivation in Delta Mode, matching how other sensitive operations are already blocked. This is a security bugfix for a local, post-authentication edge case.
Treat as a security fix and include in release notes. Users relying on Delta Mode should update once the release containing this commit is available. No immediate external action (CVE, advisory) is required unless the vendor chooses to disclose one.
Security signals we found
Delta Mode bypass/partial enforcement
Seed material exposure risk in BIP-85 derivation path
Security bugfix explicitly described in changelog
Consistency fix aligning BIP-85 with other Delta Mode blocks
Evidence from the diff
In shared/drv_entro.py, the bip85_derive() function previously opened stash.SensitiveValues() without enforcing Delta Mode restrictions. In Delta Mode, COLDCARD operates with a derived/temporary seed and is supposed to prevent operations that could touch or reveal the primary seed. By adding enforce_delta=True to SensitiveValues(), the function now triggers the same seed-wipe behavior used elsewhere before BIP-85 derivation can proceed. The changelog entry confirms this is an intentional security bugfix: ‘Wipe seed before BIP-85 derivation in Delta Mode.’
Changed components
shared/drv_entro.pyBIP-85 derivation featureDelta Mode seed handlingstash.SensitiveValuesInspect captured patch +2 / −1
### releases/Next-ChangeLog.md
@@ -34,6 +34,7 @@ This lists the new changes that have not yet been published in a normal release.
- Bugfix: Wipe seed in Delta Mode when saved BIP-39 passphrases are listed, instead of revealing them.
- Bugfix: Block Key Teleport’s secret picker and CCC key-C import from Seed
Vault in Delta Mode.
+- Bugfix: Wipe seed before BIP-85 derivation in Delta Mode.
- Bugfix: BIP-322 message signing now rejects non-ASCII and other unsupported
message text before approval. Thanks to @KirillCherikov for reporting.
- Bugfix: Prevent duplicate WIF Store entries after restarting
### shared/drv_entro.py
@@ -86,7 +86,7 @@ def bip85_derive(picked, index):
else:
raise ValueError(picked)
- with stash.SensitiveValues() as sv:
+ with stash.SensitiveValues(enforce_delta=True) as sv:
node = sv.derive_path(path)
entropy = ngu.hmac.hmac_sha512(b'bip-entropy-from-k', node.privkey())
Why this scored 60/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.