Gameguru Mania Updated:10:41 AM CEST Aug,04
AR Wallet

Playbonus.ca
CONTACT
Please e-mail us if you have news.

(c) 1998-2026 Gameguru Mania
Privacy Policy statement
SEARCH:
 GAMEGURU MANIA - ARTICLES:                                        << back to the main page
How the Coldcard Bug Was Born and Exploited
(Radoslav Krehlik) 09:54 AM CEST - Aug,04 2026

The case of ColdCard wallet worked because the implementation was broken (radically reduced entropy). It wasn't the cryptography that failed, it was a software engineering bug Brute-force remains mathematically impossible

In 2020, after a competing device used Coldcard's then-GPL code, Coinkite switched to a more restrictive MIT + Commons Clause license.  On March 1, 2021, a large “First pass w/ libNgU” commit removed remaining GPL code and, in the process, disabled the hardware random number generator. 

Firmware fell back to a weak software RNG (Yasmarang), sharply reducing entropy for new wallet seeds on affected devices.  The flaw remained undetected for years until attackers began sweeping vulnerable addresses in late July 2026, moving well over 1,000 BTC. 

Weak random number generation is not a new problem. RNG vulnerabilities have previously been found in:

bip3x Python library
bitaddress.org
BitcoinSpinner
Blockchain.com Android wallet
Blockchain.com web wallet
brainwallet.org browser generator
Cake Wallet
CoinPunk
COLDCARD Mk2 – Mk5 & Q
Ethereum presale wallet generator
Libbitcoin Explorer (bx seed)
Mycelium Bitcoin Wallet
PHPCoinAddress
Profanity
QuickCoin
Schildbach Bitcoin Wallet for Android
Trust Wallet browser extension
Trust Wallet for iOS

A detailed timeline is circulating that reconstructs how the Coldcard seed vulnerability was introduced and later exploited:

-->? July 2020

- Foundation Devices releases Passport by copying the Coldcard firmware (then under free GPL license)

- NVK publicly regrets choosing the GPL: "now we have a clone"

-->? Late 2020 early 2021

- Coinkite changes the license

- Switch to MIT + Commons Clause: you can read the code, but you no longer have the right to use it to make a competing product

- Goal: kill commercial copies

-->? March 1, 2021

- Massive commit of 120 files "First pass w/ libNgU"

- We remove the last GPL-licensed code sections

- It's exactly in this commit that the bug is introduced

- The hardware random number generator (TRNG) is bypassed

- The firmware silently switches to a predictable software generator (Yasmarang)

- Result: instead of 128 bits of entropy, we drop to about 40 bits on Coldcard Mk3... That's weak. Very weak

-->? 2021 to 2026

- The bug remains "invisible" for 5 years

- The new restrictive license has sharply reduced the number of people motivated to deeply audit the code

- Fewer eyes = the bug survives!

-->? The arrival of AI changes the game

- Coinkite itself runs its firmware through "one of the best AI models" a few weeks before the attack, and the model finds nothing!

- The attacker certainly used an LLM (or several) to scan old versions of the open-source code and spotted the subtle bug that even Coinkite's AI had missed ?

-->? April-May 2026

- The biggest addresses that will be drained in July receive tiny amounts of bitcoin (dust)

- This isn't random. It's target marking

- The attacker already had the list of vulnerable seeds at least three months earlier

-->? July 30, 2026

- Between 01:10 and 01:51 UTC, over 1080 BTC leaves 1,196 addresses

- Three days later, the total exceeds 1367 BTC from 4,585 addresses

- The funds are consolidated to a few addresses... and almost nothing moves afterward

- Recognizable transaction signatures: fixed fees at 30 sat/vB, no change output, batched sends

-->? The attacker's only real mistake

- During the operation, he used a paid account with a major blockchain data provider

- The logs match down to the second

- The provider wasn't complicit, but it has logs and probably KYC... That's the best lead for the authorities

-->? Why July 30?

- The stock of vulnerable seeds with dormant funds was at its maximum

- We were just days from the start of the critical BIP-110 window (the anti-Ordinals soft fork)

- The entire hardcore community's attention (exactly the Coldcard audience) was already saturated!

-- Who's responsible for what?

- Coinkite: changed the license to protect itself commercially, and introduced the bug in the same move

- The attacker: showed rare patience, prepared his strike for months (or even years), and executed it almost perfectly

- The community: trusted "open-source" and a hardware wallet without ever really checking how the randomness was generated!

-- The lesson:

- Dice rolls + passphrase are not optional

- "Open-source" doesn't mean "audited"

- A license that's too restrictive can kill audits

- AI radically changes the power dynamic: a subtle bug can stay hidden for 5 years... until a model finds it in one night or faster!

- An attacker with time almost always beats a community that's too trusting!

So here's what I'd recommend to developers: use AI, have your source code reviewed, and then have an experienced software engineer go over the whole thing again—in other words, a senior engineer plus AI. In my opinion, that's the ideal combination right now.  It scares me a little to think how many similar products with bugs are out there on the market (and it's not necessarily just crypto wallets). Everyone is just looking for a quick way to make money (a trend in the U.S.), but the actual hard work of design and programming is really starting to be noticeably lacking here. I was a programmer throughout the 1990s, so trust me, I know what I'm talking about.

Written by Radoslav Krehlik - [email protected]


last 10 comments:

 Add your comment (free registration required)