Exploit en Coldcard: un PRNG determinista vació 88 millones de dólares en BTC

El 1 de agosto de 2026, aproximadamente 1.196 direcciones de bitcoin fueron vaciadas en un barrido coordinado. Sin phishing. Sin PSBT malicioso firmado. Sin error del usuario en el sentido tradicional. El exploit de Coldcard que drenó aproximadamente $88 millones en BTC nunca tocó un solo dispositivo en el momento del robo, según el reporte de CoinDesk sobre el incidente.
La causa raíz es peor que cualquier análisis que vi en las primeras 24 horas. Se trató de un fallo en el firmware de la billetera de hardware lanzado en 2021 que reemplazó silenciosamente el generador de números verdaderamente aleatorios del hardware por una rutina pseudoaleatoria por software. Cada semilla generada bajo esa compilación era determinista. Cada dirección derivada de esas semillas era, en principio, calculable de antemano por cualquiera que hubiera aplicado ingeniería inversa al fallo.
Eso no es un hackeo. Es un retraso de cinco años entre el commit y las consecuencias.
Lo que realmente hizo el fallo de firmware de Coinkite
La compilación defectuosa, según detalla The Hacker News, enrutaba las llamadas de entropía a través de un PRNG por software inicializado con un estado pequeño y predecible, en lugar del RNG de hardware del chip SE. Los usuarios no tenían forma de detectar el cambio. El dispositivo arrancaba, mostraba las pantallas de configuración esperadas, producía una semilla de 24 palabras y lucía idéntico a una billetera generada correctamente.
Las semillas que producía vivían dentro de un espacio explorable de quizás unos pocos miles de millones de posibilidades. Eso no es una billetera. Es un boleto de rifa.
Cuando el atacante (o, más probablemente, el investigador que encontró esto y no lo divulgó de forma responsable) comenzó a explorar el espacio contra el conjunto UTXO el 1 de agosto, el vaciado tomó horas, no meses.
Por qué importa el número de 1.196 direcciones de bitcoin drenadas
1.196 es pequeño en términos absolutos y enorme en términos de señal. Acota la población de usuarios que generaron una semilla en esa ventana exacta de firmware y nunca la rotaron. Es una afirmación comprobable y refutable sobre el radio de daño, y el análisis de TechSpot confirma que los dispositivos afectados se remontan a un período de envío acotado.
Si generaste tu semilla con un firmware diferente, o si la rotaste tras una actualización de firmware, casi con certeza estás bien. Si la generaste con esa compilación y nunca moviste fondos, ya estabas comprometido, solo que aún no lo sabías.
Un detalle silencioso: algunos de los UTXOs drenados habían permanecido intactos desde 2021. Cinco años de "mis llaves, mis monedas", y las llaves nunca fueron realmente tuyas.
El problema del PRNG determinista en Bitcoin es antiguo y sigue reapareciendo
Esta clase de fallo tiene una historia larga y vergonzosa. El SecureRandom de Android en 2013 hizo perder BTC a la gente de la misma manera. El fallo del PRNG de OpenSSL en Debian en 2008 inutilizó claves SSH durante dos años antes de que nadie lo notara. Cada generación, reaprendemos que la entropía es lo único que no se puede auditar mirando el resultado.
Un número aleatorio de 256 bits bien formado y un número determinista de 256 bits lucen idénticos a simple vista. Hay que auditar la fuente, no la muestra. Ese es el juego completo.
Las billeteras de hardware venden la premisa de que el elemento seguro se encarga de esto por ti. Cuando el firmware elude el SE, obtienes toda la fricción del almacenamiento en frío sin ninguna de las garantías. Lo peor de ambos mundos.
La autocustodia frente a los ETF no es el debate que la gente cree
Esta es mi opinión, y la sostengo: el debate sobre autocustodia frente a ETF se ha enmarcado como una cuestión ideológica cuando en realidad es una pregunta sobre la cadena de suministro.
Un ETF de BTC al contado tiene una superficie de ataque que me importa: la seguridad operativa del custodio. Esa superficie es auditable por reguladores, asegurable y está atendida por personas cuyo trabajo de tiempo completo es no perder monedas. Cuando falla, alguien extiende un cheque.
La autocustodia tiene una cadena más larga: proveedor del chip, pipeline de compilación del firmware, firma de la versión, ruta de suministro, OPSEC del usuario final, higiene de copias de seguridad. Cualquier eslabón falla y no hay cheque que cubra. El vaciado de Coldcard es el momento Terra para esa tesis, no porque la autocustodia esté muerta, sino porque el enfoque maximalista de "simplemente guarda tus propias llaves" tiene que madurar.
Ambos modelos tienen riesgos reales. Pretender que uno de ellos está libre de riesgos es lo que llevó a que se drenaran 1.196 direcciones.
Qué cambia realmente tras el exploit de Coldcard
Algunas cosas que creo que cambiarán (y deberían cambiar):
- Las compilaciones de firmware reproducibles se vuelven requisito básico. Si no puedes reconstruir el binario desde el código fuente y verificar byte a byte, estás confiando en una firma, no en una base de código.
- Atestación de entropía posgeneración. El dispositivo debería firmar una prueba de que una semilla determinada provino del SE, no del software. No es difícil. Coinkite podría lanzarlo en un trimestre.
- Verificaciones independientes de integridad de semillas. Herramientas de terceros que puedan, sin ver tu semilla, verificar que su ruta de derivación cae en una distribución consistente con la aleatoriedad verdadera.
- Productos de seguros para la autocustodia. No los de parodia. Suscripción real que exija firmware atestado y actualice la cobertura a medida que las compilaciones envejecen.
Nada de esto vuelve obsoletas a las billeteras de hardware. Las hace de nivel empresarial, que es lo que siempre afirmaron ser.
La incómoda lectura transversal para el resto de nosotros
En LCX dedicamos una cantidad desproporcionada de tiempo de ingeniería a cosas que resultan invisibles para los usuarios: ceremonias de claves HSM, pipelines de compilación deterministas, auditorías de entropía en cualquier ruta de código que toque una clave privada. Es un trabajo aburrido. También es la diferencia entre un titular y un martes cualquiera.
El incidente de Coldcard aterriza de la misma manera que los comentarios del CEO de OpenZeppelin sobre las auditorías de DeFi a principios de este año. El stack de auditoría que heredamos fue diseñado para un mundo en el que el código que lanzabas era el código que ejecutabas. Ese mundo ya no existe, si es que alguna vez existió.
Se suponía que el almacenamiento en frío era la respuesta aburrida y correcta. Resulta que lo aburrido necesita mucho más andamiaje del que admitíamos.