BTC/USD — —ETH/USD — —BNB/USD — —SOL/USD — —XRP/USD — —BTC/USD — —ETH/USD — —BNB/USD — —SOL/USD — —XRP/USD — —
Bitcoin

El fabricante de los Coldcard admitió que sus modelos nuevos también fallan, y el robo pasó de 38 a 70 millones de dólares

El viernes por la mañana el robo de los monederos Coldcard eran 594 bitcoins y unos 38 millones de dólares. A media tarde eran 1.082,65 bitcoins y 70,2 millones, y el fabricante había hecho…

FretchCop 7 min de lectura
El fabricante de los Coldcard admitió que sus modelos nuevos también fallan, y el robo pasó de 38 a 70 millones de dólares

El viernes por la mañana el robo de los monederos Coldcard eran 594 bitcoins y unos 38 millones de dólares. A media tarde eran 1.082,65 bitcoins y 70,2 millones, y el fabricante había hecho algo más incómodo que reconocer un fallo: había reconocido que se equivocó al medirlo. La primera advertencia de Coinkite decía que sus modelos nuevos, Mk4, Mk5 y Q, no estaban afectados según su "análisis temprano". A las 12:39 del mediodía de Nueva York, la empresa actualizó ese mismo documento para decir lo contrario.

La frase nueva del aviso no deja margen: "Las semillas generadas en Mk4, Q y Mk5 antes de las versiones de firmware corregidas también están afectadas, con unos 72 bits de entropía en lugar de los 128 esperados". FretchCop contó de madrugada ese desajuste entre lo que decía el fabricante y lo que describían los investigadores de Block. Se resolvió a favor de los investigadores.

1.082,65
bitcoins vaciados
1.196
direcciones
41 min
ventana del barrido

El recuento se dobló porque alguien buscó la firma del atacante

Galaxy Research publicó el viernes el mapeo completo: 1.196 direcciones vaciadas por entero, 1.082,65 BTC, unos 70,2 millones de dólares, en una ventana que sitúa entre las 01:10:20 y las 01:51:26 UTC. La cifra inicial de 594,48 BTC salía de las transacciones que se vieron a simple vista. El resto apareció cuando un ingeniero de Block, Clay Garrett, buscó otras 695 transacciones cuyas firmas encajaban con el mismo patrón, según el blog de ingeniería de la empresa recogido por TechTimes. Son 488 bitcoins más, y conviene decirlo con cuidado: ese segundo tramo se atribuye por coincidencia de patrón, no por verificación individual.

Chainalysis añadió el orden de los hechos, y es el orden de alguien que sabía lo que hacía: el atacante fue primero a los monederos grandes. Unos 30 millones salieron en los diez primeros minutos, y tres de los diez saldos mayores tenían al menos 10 BTC cada uno. Nadie tanteó con polvo. Eso encaja con lo que ya se intuía por el umbral de 0,15 BTC del primer barrido: cada candidato de clave cuesta cómputo, y por debajo de cierto saldo no se paga.

Cuarenta bits, setenta y dos, y ninguno son ciento veintiocho

El informe técnico de Coinkite pone números propios al agujero. En el Mk3, el generador que quedó activo se sembraba con estado del aparato y de sus relojes: espacio de búsqueda estimado, unos 40 bits. En Mk4, Mk5 y Q se mezclaban además valores de los elementos seguros SE1 y SE2, lo que sube la estimación a unos 72 bits. La empresa marca las dos cifras como preliminares. El objetivo de diseño eran 128 bits, y 72 no es 128: es la diferencia entre inadivinable y caro.

La cadena del error la cuenta la propia empresa con una franqueza poco habitual. En 2021 movieron las operaciones de curva elíptica a la libsecp256k1 de Bitcoin Core, lo que obligó a añadir la biblioteca libNgU. En esa migración, la generación de semillas pasó de ckcc.rng_bytes() a ngu.random.bytes(), y esa ruta resolvía rng_get() al respaldo por software de MicroPython en vez del generador de hardware. La guarda del preprocesador usaba #ifndef, que comprueba si la macro existe, no si vale distinto de cero. Coinkite la había definido como cero. La compilación salió sin un solo aviso. En palabras del informe, el generador bueno seguía ahí y "se usaba, pero por casualidad, y solo para cosas menos importantes".

ModeloFirmware afectadoCorregido enEntropía estimada
Mk34.0.1 a 4.1.94.2.0~40 bits
Mk4 y Mk5anterior a 5.6.05.6.0~72 bits
Qanterior a 1.5.0Q1.5.0Q~72 bits
Edge (Mk4/Mk5 y Q)anterior a 6.6.0X / 6.6.0QX6.6.0X / 6.6.0QX~72 bits
Tapsigner, Opendime, Satscardno afectados—otro código

El parche no arregla nada de lo que ya está guardado

Coinkite ha publicado firmware de emergencia para todos los modelos y las dos ramas de versiones, y ha añadido una comprobación en tiempo de compilación que ahora falla si el símbolo del generador no viene del código de la placa. Es el arreglo correcto y llegó en horas. También es irrelevante para el dinero que hay en juego: actualizar no repara una semilla ya generada. Quien creó su monedero con firmware afectado tiene que generar una semilla nueva y mover los fondos, con la coreografía completa de copia de seguridad verificada, huella de la cartera comprobada y transacción de prueba antes del traslado.

Hay una excepción, y es la parte que mejor resume el asunto. Si al crear la semilla se añadieron tiradas de dados privadas e independientes, esa entropía no la tocó el fallo: entre 50 y 98 tiradas aportaron por sí solas al menos 128 bits, y 99 o más rondan los 256. Coinkite considera que esas semillas no están en riesgo por este problema. En un aparato de varios cientos de dólares construido para custodiar claves, lo único que aguantó fue un cubo de plástico.

La IA encontró el fallo, y la IA del fabricante no lo había visto

Rodolfo Novak, consejero delegado de Coinkite, pidió disculpas el viernes y asumió, según The Block, "plena responsabilidad por el fallo de firmware", reconociendo que su proceso de revisión no lo detectó. Y apuntó al mecanismo con el que cree que lo encontró el atacante.

El código fuente de Coldcard siempre ha sido abierto y público, así que tenemos que suponer que alguien usó IA para revisar versiones anteriores de nuestro firmware y se topó con este problema. Hace unas semanas usamos uno de los mejores modelos de IA disponibles para revisar nuestro código en busca de problemas de seguridad, y no encontró este fallo ni nada grave.

El informe remata la idea: atacantes y defensores tienen las mismas herramientas, y este viernes solo funcionaron para un lado. No hay prueba pública de que hubiera una IA al otro lado del teclado, pero es la primera vez que un fabricante de monederos atribuye su propio fallo de cinco años a que el rastreo automático de código maduró antes en el ataque que en la auditoría.

La otra cara

El vínculo formal entre el fallo y el robo sigue sin establecerse: Coinkite ha admitido el error de generación de semillas, no que las 1.196 direcciones se vaciaran por él. Y el propio mapeo de Galaxy lleva la advertencia más importante de toda la historia: "El patrón nos dice que fue el mismo atacante; no captura el ataque en sí, que se ve igual que si el dueño de las monedas hubiera decidido moverlas". La misma nota añade que son posibles ataques futuros sobre cualquier dirección generada por un Coldcard y que no tienen por qué encajar en este patrón. Traducido: el recuento de 70 millones no es un cierre, es una foto.

A favor del fabricante hay tres cosas concretas. El código abierto permitió localizar el commit exacto y la línea del #ifndef en cuestión de horas, cosa imposible en un aparato cerrado. Coinkite corrigió por su cuenta una cifra que circulaba mal, la de los "ocho años" de fallo, aclarando que el respaldo de MicroPython existe desde mayo de 2018 pero no entró en la generación de semillas de Coldcard hasta marzo de 2021. Y avisa de que precipitar una migración puede costar más que el propio fallo, que es cierto y suena mejor viniendo de quien tiene el incentivo contrario. Enfrente, Kevin Loaec, de la firma de seguridad Wizardsardine, resume el escenario malo sin adornos: cree que todas las frases mnemónicas generadas con un Coldcard desde 2021 serán públicas en los próximos días.

El mercado iba a lo suyo por razones ajenas: el bitcoin cerraba julio en torno a 62.900 dólares, un 2,8% menos en 24 horas, y el ether sobre 1.861 con un 3,2% de caída.

Lo que viene después
  • Si el recuento sigue creciendo por encima de 1.082,65 BTC, y si aparecen barridos que no encajen en el patrón de firmas que usó Galaxy.
  • La revisión técnica formal que Coinkite tiene pendiente, y si las estimaciones de 40 y 72 bits se confirman en hardware real.
  • Cuántos usuarios migran de verdad: el firmware corregido no toca las semillas viejas, así que la exposición solo baja cuando los fondos se mueven.
  • Los 562 BTC que el atacante consolidó en una sola dirección y que siguen quietos.
  • Víctimas por vías distintas a la semilla: monederos de papel, reparto Seed XOR, claves de clonado, material de Key Teleport.
  • Si el patrón del #ifndef y el respaldo silencioso de MicroPython aparecen en firmware de otros fabricantes que usen la misma base.

Basado en: Coinkite (aviso de seguridad Mk3 e informe técnico, fuentes primarias), Galaxy Research, blog de ingeniería de Block, The Block, Bitcoin Magazine, Chainalysis vía Bitcoin.com, TechTimes, CoinDesk.

Cripto en este análisis
— — —
USD
Cargando gráfico…
Sentimiento del mercado
datos en vivo
Cargando…
Cargando datos…
Redacción FretchCop
Mercados · Regulación · Seguridad

Cubrimos criptomonedas con datos comprobables: cada cifra relevante lleva enlace a su fuente para que puedas verificarla. No publicamos señales de trading ni recomendaciones de compra, y corregimos cualquier error que nos señales.

Volver arriba