ctipilot.ch

COLDCARD hardware-RNG fallback wallet-seed theft (2026)

incident · incident:coldcard-rng-fallback-seed-theft-2026

Mass theft from Coinkite COLDCARD hardware wallets whose seeds were generated by firmware that routed key generation to MicroPython's software PRNG instead of the intended STM32 hardware TRNG. The defect entered during the March 2021 libNgU migration because the guarding preprocessor directive tested whether MICROPY_HW_ENABLE_RNG was defined rather than whether its value was non-zero, and the two implementations shared a function signature so the build succeeded. Coinkite estimates the resulting effective search space at about 40 bits on Mk2/Mk3 (firmware 4.0.1 through 4.1.9) and about 72 bits on Mk4, Mk5 and Q. Exploitation was confirmed under way by 2026-07-30, when Block Engineering published its root-cause analysis citing active exploitation; no cited source dates its start. Galaxy Research estimated 1,367.05 BTC drained across 4,585 addresses by 2026-08-01 over three waves, all funds unspent. Coinkite assumes but does not establish that an adversary found the defect using AI review of its public firmware source (Coinkite, 2026-07-30; Block Engineering, 2026-07-30; Galaxy Research via CryptoTimes, 2026-08-01).

Aliases: Coldcard entropy issue, Coldcard RNG hack

Coverage timeline
1
first 2026-08-02 → last 2026-08-02
Peak priority
notable
1 notable
Sources cited
3
3 hosts
Sections touched
1
trending-vulnerabilities
Co-occurring entities
0
no co-occurrence
ATT&CK techniques
2
pinned v19.1 · see below

Hunting pivots

ATT&CK techniques
Affected products
Coinkite COLDCARD Mk2Coinkite COLDCARD Mk3Coinkite COLDCARD Mk4Coinkite COLDCARD Mk5Coinkite COLDCARD Q

ATT&CK techniques

2 techniques observed across 1 entry — derived from entry metadata and body evidence, never asserted without a published entry behind it · pinned to MITRE ATT&CK v19.1 · compare on the matrix · Navigator layer (JSON)

Credential Access TA0006

T1110Brute Force×1

Adversaries may use brute force techniques to gain access to accounts when passwords are unknown or when password hashes are obtained. Without knowledge of the password for an account or set of accounts, an adversary may systematically guess the password using a repetitive or iterative mechanism. Brute forcing passwords can take place via interaction with a service that will check the validity of those credentials or offline against previously acquired credential data, such as password hashes.

Evidence: 2026-08-02/coldcard-rng-fallback-macro-guard-seed-theft · ATT&CK page ↗

Impact TA0040

T1657Financial Theft×1

Adversaries may steal monetary resources from targets through extortion, social engineering, technical theft, or other methods aimed at their own financial gain at the expense of the availability of these resources for victims. Financial theft is the ultimate objective of several popular campaign types including extortion by ransomware, business email compromise (BEC) and fraud, "pig butchering," bank hacking, and exploiting cryptocurrency networks.

Evidence: 2026-08-02/coldcard-rng-fallback-macro-guard-seed-theft · ATT&CK page ↗

Story timeline

  1. 2026-08-02COLDCARD: a preprocessor guard that tested whether a macro was defined rather than what it was set to routed key generation to a software PRNG for five years, and the keys are now being emptied
    trending-vulnerabilitiesA build-time macro check silently disabled a hardware TRNG in shipped firmware, and the vendor assumes an AI code review is what found it

Where this entity is cited

  • trending-vulnerabilities1

Source distribution

  • blog.coinkite.com1 (33%)
  • cryptotimes.io1 (33%)
  • engineering.block.xyz1 (33%)

explore in graph

Entries about COLDCARD hardware-RNG fallback wallet-seed theft (2026) (1)

2026-08-02 · view entry permalink →

NOTABLEexploitedNATOA1

COLDCARD: a preprocessor guard that tested whether a macro was defined rather than what it was set to routed key generation to a software PRNG for five years, and the keys are now being emptied

This is out of the constituency's usual nexus — a consumer Bitcoin hardware wallet, not public-sector or critical-infrastructure equipment — and is carried on two grounds: the confirmed scale of exploitation now under way (a running estimate of 1,367.05 BTC across 4,585 addresses over three waves), and a root cause that is an embedded-firmware assurance anti-pattern applying to any device whose cryptographic quality depends on a build-time switch.

In 2021 Coinkite moved COLDCARD's elliptic-curve operations onto Bitcoin Core's libsecp256k1, which required adding an embedded MicroPython library, and during that migration wallet-seed generation moved from the vendor's own ckcc.rng_bytes() to ngu.random.bytes(). That path resolved rng_get() to MicroPython's software fallback rather than COLDCARD's hardware RNG implementation (Coinkite, 2026-07-30). The reason nothing broke is the part worth reading twice: "The guard used #ifndef, which tests whether MICROPY_HW_ENABLE_RNG is defined, rather than whether its value is nonzero. We defined that macro as zero, so the #error did not stop the build." — and because the fallback provided a function with the same signature as the intended implementation, "the build completed without identifying the wrong implementation" (Coinkite, 2026-07-30). The vendor's own summary of why review missed it is the generalisable finding: "Existing review confirmed that the intended TRNG implementation was present in the firmware binary, but did not verify which rng_get() implementation the wallet seed-generation path actually reached across the two submodules." (Coinkite, 2026-07-30).

The consequence is a reduced key search space rather than a leaked key. On Mk2 and Mk3 the active PRNG was seeded primarily from device and timing state, and Coinkite estimates the effective search space at about 40 bits; Mk4, Mk5 and Q mixed in entropy from two secure elements as a backup, which it estimates leaves about 72 bits. The vendor labels both as preliminary estimates under current attack assumptions that may change as analysis continues, and states plainly that for funded wallets without either at least 50 independent private dice rolls or a strong unique passphrase, "the reduced search space is a direct security risk, not a theoretical possibility" (Coinkite, 2026-07-30). Block Engineering reached the same defect independently, framing it as a predictable RNG fallback compounded by a 32-bit reseed (Block Engineering, 2026-07-30). The affected Mk2/Mk3 firmware range is 4.0.1 through 4.1.9, corrected in 4.2.0; the other fixed builds are 5.6.0 for Mk4 and Mk5, 1.5.0Q for Q, and Edge releases 6.6.0X and 6.6.0QX. Updating does not repair a seed generated by affected firmware — those seeds must be replaced and funds migrated (Coinkite, 2026-07-30).

Exploitation is live and escalating. Galaxy Research reported a third wave on 2026-08-01 in which a further 207.7294 BTC was drained, putting its estimate of the total at 1,367.05 BTC across 4,585 addresses; it assesses waves 1 and 2 as likely one operator on shared collector addresses and identical destination-address types roughly 27 hours apart, while wave 3 used per-victim destination addresses, a different output type, batched victims and only the default derivation path — differences Galaxy says could mean either new evasion tradecraft from the same actor or a second actor exploiting the same flaw. All the attacker-controlled funds remain unspent, which Galaxy calls unusual for a theft of this size, and every compromised address was created after the vulnerable firmware shipped in March 2021 (CryptoTimes, 2026-08-01).

The discovery route is the vendor's assumption, not an established fact, and it cuts in two directions at once. Coinkite writes that because its source has always been public, "we have to assume that someone used AI to review previous versions of our firmware and stumbled upon this issue" — and in the same paragraph that "A few weeks ago, we used one of the best available AI models to review our code for security issues, and it did not find this bug or anything serious.", concluding that "Both attackers and defenders have the same AI tools, but today it did not help us, and only helped the bad guys." (Coinkite, 2026-07-30). No source establishes how the flaw was actually found.

The guard used #ifndef, which tests whether MICROPY_HW_ENABLE_RNG is defined, rather than whether its value is nonzero. We defined that macro as zero, so the #error did not stop the build.

Existing review confirmed that the intended TRNG implementation was present in the firmware binary, but did not verify which rng_get() implementation the wallet seed-generation path actually reached across the two submodules.

The COLDCARD source code has always been open and publicly available, so we have to assume that someone used AI to review previous versions of our firmware and stumbled upon this issue. A few weeks ago, we used one of the best available AI models to review our code for security issues, and it did not find this bug or anything serious.

Coinkite 2026-07-30
vulnerability02 Aug 04:09Zmulti-sourceOpen finding ↗