Sistemas

Urgente. Invasión a wallets Coldcard. Usuarios deben tomar medidas.


A las 01:36 UTC del jueves 30 de julio, el bloque 960188 de Bitcoin incluyó las primeras 63 transacciones de un barrido automatizado. A las 01:51, cuatro bloques después, había terminado. En ese lapso, 500 transacciones vaciaron 500 direcciones distintas: 1.324 UTXOs por un total de 594,5 BTC, alrededor de 38 millones de dólares al precio actual, con Bitcoin operando cerca de los USD 64.766. El costo total de la operación para el atacante fue de unos 0,044 BTC en comisiones.

Horas después, Coinkite —el fabricante canadiense de Coldcard— publicó un aviso de seguridad advirtiendo que las semillas generadas en su modelo Mk3 con firmware 4.0.1 o posterior pueden estar en riesgo. La causa exacta del robo no está confirmada y la investigación sigue abierta. Lo que sigue separa lo verificado de lo hipotético, porque acá la diferencia tiene consecuencias patrimoniales inmediatas.

La firma del ataque

Cada transacción de barrido corresponde a una dirección víctima. De las 500, 419 tenían un único UTXO, pero una había acumulado 200 y otra 105: el patrón típico de retiros automáticos recurrentes desde un exchange siempre hacia la misma dirección.

La pérdida mediana por víctima fue de 0,41 BTC, unos 26.500 dólares. Ciento diez víctimas perdieron más de 1 BTC y la más golpeada perdió 29,9 BTC, cerca de dos millones de dólares. El dato que más dice sobre el atacante es el piso: ninguna víctima perdió menos de 0,15 BTC. Filtró objetivos por saldo mínimo, lo que implica que tenía más claves de las que usó.

La distribución por tipo de dirección es el elemento forense central. De las 500 direcciones barridas, 490 son segwit nativas, cinco legacy y cinco nested segwit. Ninguna taproot. Y entre los 1.324 UTXOs robados no hay un solo multisig.

A las 01:51, en el mismo bloque que confirmaba los últimos barridos, el atacante consolidó 562 BTC en una dirección nueva, donde permanecen sin moverse, más otros 32 BTC en una dirección intermedia. No envió un satoshi a un exchange ni a un mezclador. El próximo movimiento de esos fondos será el primer rastro real de quién controla las claves.

Doce horas de silencio

El robo ocurrió de madrugada y nadie lo notó durante casi doce horas. La primera alarma la dio una víctima: a las 13:19 UTC apareció un hilo en Reddit titulado «Pánico total: una de mis wallets fue vaciada».

Su relato define el caso. Un Coldcard comprado en 2021, una frase semilla de 24 palabras generada en el propio dispositivo, ahorros transferidos y después años de silencio. En enero de 2025 compró un segundo Coldcard y reingresó la semilla de 2021 «para asegurarme de que las palabras estaban bien». La semilla, explicó, nunca tocó una computadora: solo el dispositivo, una wallet de solo lectura en Sparrow y retiros automáticos de un exchange siempre a la misma dirección. Esa noche esa dirección fue barrida junto con las otras 499.

A las 17:35 UTC, Kevin Loaec, cofundador de Wizardsardine —la empresa detrás de la wallet Liana—, pidió públicamente a sus seguidores con Coldcard que revisaran sus saldos: «Espero que esto no sea nada, pero estoy haciendo mi trabajo». Hora y media después: «Esto no es un simulacro». Jameson Lopp reportó robos parciales, wallets a las que les sacaron algunos UTXOs y no el saldo completo. Loaec señaló que entre las víctimas había «múltiples bitcoiners reales y conocidos», y la teoría del usuario descuidado dejó de sostenerse.

Del desmentido al aviso, en horas

A las 18:10 UTC, NVK, fundador y CEO de Coinkite, respondió públicamente: no había motivo para entrar en pánico, alguien había cargado una semilla comprometida en un Coldcard o su semilla se había filtrado, y esto formaba parte de un ataque más amplio con 500 claves privadas de wallets distintas. Sostuvo que no existía evidencia de una falla en el generador de números aleatorios del dispositivo.

Ese mismo día, más tarde, Coinkite publicó el aviso de seguridad del Mk3. En cuestión de horas la empresa pasó de atribuir el episodio a semillas comprometidas por los usuarios a advertir que las semillas generadas por sus propios dispositivos podían estar en riesgo. Es una corrección rápida y pública, que en divulgación responsable cuenta a favor, pero muestra cuán poco se sabía cuando se emitió la primera respuesta.

Qué dice el aviso exactamente

El texto es preciso en su alcance y honesto en sus límites. Advierte, por abundancia de precaución, a todos los usuarios que generaron una semilla en un Mk3 con la versión 4.0.1 —de marzo de 2021— o cualquier versión posterior. El problema está presente hasta la 5.0.3, la última que soportó ese modelo. Los Mk4, Q y Mk5 no están afectados según el análisis preliminar, que la empresa aclara es temprano: la investigación continúa y publicará una revisión técnica formal.

Hay una excepción relevante: si la semilla afectada se usó junto con una frase de contraseña BIP-39, el análisis preliminar indica riesgo mínimo. Coinkite subraya que se refiere a la passphrase BIP-39, no al PIN del dispositivo.

Nótese la coincidencia temporal: el firmware afectado arranca en marzo de 2021 y los UTXOs barridos datan de 2021 a 2026. Es un indicio, no una prueba.

La hipótesis de la entropía débil

El primer análisis sistemático lo hizo Rob Hamilton, CEO de AnchorWatch, y su conclusión fue que a primera vista parecía haber habido entropía defectuosa en la generación de wallets en algún punto del camino.

El mecanismo es lo que distingue este caso de un robo convencional. Si las claves privadas se generaron con una fuente de aleatoriedad débil —en una biblioteca, en un elemento seguro, en un lote de fabricación o en una versión de firmware—, un atacante puede recalcularlas sin tocar los dispositivos de las víctimas. No hay intrusión, no hay phishing, no hay malware: las llaves nunca fueron del todo secretas.

Eso también descarta el vector de reutilización de nonce en firmas para varias víctimas, porque no aplica a wallets dormidas que nunca firmaron nada.

Loaec llevó la hipótesis más lejos: un generador débil en una biblioteca o en el propio elemento seguro, operado por alguien que entiende la vulnerabilidad pero no domina Bitcoin, al punto de usar un script escrito con inteligencia artificial que deriva únicamente rutas BIP84 hasta una profundidad limitada. Eso explicaría los robos parciales de Lopp y encaja con los datos. La estructura del ataque —una transacción por dirección y no una por wallet— es además consistente con alguien que tiene claves privadas individuales recalculadas antes que semillas completas reconstruidas.

Los precedentes

Esto ya pasó. En 2023 el caso Milk Sad expuso wallets creadas con Libbitcoin Explorer, que usaba la marca de tiempo como única fuente de entropía, y la divulgación Randstorm reveló que millones de wallets de navegador generadas entre 2011 y 2015 con BitcoinJS eran potencialmente recalculables.

Hace tres semanas, el 10 de julio, la firma Coinspect divulgó Ill Bloom: cinco implementaciones de wallets con generación débil de semillas, 5,1 millones de dólares robados y un barrido coordinado de 431 wallets en horas el 27 de mayo. El parecido estructural es evidente, aunque Coinspect excluye a las hardware wallets del alcance de Ill Bloom y ningún investigador vinculó todavía ambos eventos.

Lo que no fue tocado

El dato accionable del episodio está en la ausencia. Ni un solo multisig aparece entre los 1.324 UTXOs robados. Ninguna dirección taproot.

Loaec advierte que, mientras el vector siga sin identificarse, ni las frases de contraseña ni la generación de semillas con dados son garantías ciertas, y recomienda multisig, preferentemente multi-fabricante. La lógica es directa: si el problema está en cómo un dispositivo genera claves, la defensa es no depender de un solo dispositivo para generarlas.

Medidas que deben tomar los usuarios

Coinkite propone dos caminos y una advertencia. La advertencia primero, porque es la más importante: apurar una migración puede crear un riesgo más inmediato que el problema que se intenta resolver.

El camino recomendado es generar una semilla nueva en un dispositivo no afectado —Mk4, Mk5 o posterior—, verificar el respaldo antes de depositar fondos, confirmar una dirección de recepción en la pantalla, enviar una transacción de prueba pequeña y recién después mover el resto. El respaldo viejo se conserva hasta que la migración esté confirmada.

Si el Mk3 es la única opción disponible, la medida provisoria es crear una passphrase BIP-39 larga, aleatoria y única en el propio dispositivo, y mover los fondos a esa wallet protegida. Coinkite insiste en dos puntos: la passphrase no debe ingresarse nunca en una computadora, teléfono o sitio web, y debe respaldarse por separado de las palabras de la semilla, porque perderla equivale a perder los fondos. Cada passphrase, incluso una con un error de tipeo, crea una wallet válida distinta: de ahí que la empresa insista en verificar el fingerprint XFP de ocho dígitos antes de cada envío.

Existe además una alternativa avanzada que evita el generador del dispositivo, basada en al menos 99 tiradas de un dado de seis caras, que el firmware procesa directamente sin recurrir al generador interno. Coinkite advierte que la secuencia de tiradas es material criptográfico secreto y que el procedimiento no es para principiantes.



Por Sistemas, el 31/07/2026.

Historias relacionadas

Volver al inicio