BlackTree Security · Infrastructure · Automation · AI

The Hardware RNG Worked. COLDCARD Linked the Seed Generator to the Wrong One.

Coinkite has warned owners of several COLDCARD hardware wallets to move funds from affected seed phrases after a build and linking defect caused the devices to use the wrong random-number generator. The company says users have suffered real losses.

The hardware random-number generator itself was not broken. The failure happened in the software path that was supposed to call it. In affected firmware, the seed-generation function could resolve to a deterministic MicroPython generator instead of the device’s hardware source.

A secure component was bypassed by the build

In an update to its public record, Coinkite said the symbol rng_get() resolved to MicroPython’s Yasmarang pseudo-random-number generator rather than the hardware true random-number generator. The company attributed this to a build and link integration error.

The distinction is critical. A wallet seed is the root secret from which its private keys are derived. If seed generation is predictable enough, an attacker can recreate the keys and transfer the funds without stealing the physical device or learning its PIN.

Coinkite says the issue affected wallet seeds created on vulnerable firmware when users did not add at least 50 private dice rolls and did not protect the wallet with a strong BIP39 passphrase. Those extra sources can add entropy outside the faulty software path.

Updating firmware does not repair an old seed

The operational trap is that installing fixed firmware is not enough. A seed generated by an affected version remains exposed after the device is updated. Coinkite’s security status page says affected users should create a new seed on fixed firmware and move their funds to addresses derived from that new seed.

The issue began with firmware 4.0.1. Coinkite lists these minimum fixed versions:

  • COLDCARD Mk2 and Mk3: 4.2.0
  • COLDCARD Mk4 and Mk5: 5.6.0
  • COLDCARD Q: 1.5.0Q
  • COLDCARD Edge: 6.6.0X or 6.6.0QX

Owners should compare the installed release with Coinkite’s signed firmware archive, install a fixed version, generate a completely new seed and transfer assets. Restoring the old words onto a fixed device preserves the same compromised root secret.

Losses are confirmed, the scale is not

Coinkite has said that real users lost funds, but it has not published an authoritative total. Check Point Research later reported that 1,367 bitcoin, valued at roughly $88.6 million at the time, had been stolen from thousands of addresses. That figure should be treated as an external estimate rather than a vendor-confirmed loss total.

The company halted shipments and destroyed remaining inventory after confirming the issue. It also said an AI-assisted review had failed to identify the linking defect, a useful warning that automated code review can miss failures that emerge only from the final build and runtime symbol resolution.

What wallet owners should do

  • Check the seed’s origin. Determine which device and firmware version generated it.
  • Do not reuse the old words. A firmware update cannot add entropy to an existing seed.
  • Generate a new seed on fixed firmware. Verify release files and signatures using Coinkite’s official download page.
  • Move funds promptly. Transfer to addresses controlled only by the new seed.
  • Treat dice rolls and passphrases carefully. They help only when generated and entered privately, with enough entropy and reliable backups.
  • Watch for fake recovery offers. Coinkite support and legitimate responders do not need a seed phrase.

The BlackTree view

This was not a cryptographic break or a failed hardware component. It was an integration failure that silently routed a high-value operation around the trusted component. That makes end-to-end validation more important than validating each component in isolation.

For devices that create long-lived root secrets, release testing should prove which entropy source is reached in the final signed build. The most secure random-number generator in the design offers no protection when the production binary calls something else.

Sources

Leave a Reply

Your email address will not be published. Required fields are marked *