Los investigadores de Block revelaron un fallo crítico en el firmware de los monederos hardware Coldcard fabricados por la empresa canadiense Coinkite: desde marzo de 2021, la generación de frases semilla en los dispositivos afectados utilizaba un generador de números pseudoaleatorios (PRNG) de software predecible en lugar del generador hardware. La entropía efectiva de las semillas era de entre 40 y 72 bits en lugar de los 128 bits esperados para una frase BIP-39 de 12 palabras. Coinkite publicó una actualización de firmware de emergencia el 31 de julio, pero esta no corrige las semillas débiles ya generadas: los propietarios deben crear una nueva semilla con el firmware actualizado y trasladar sus fondos. Paralelamente, Galaxy Research registró una operación sospechosa el 30 de julio: 1 196 direcciones de Bitcoin fueron vaciadas en 41 minutos por un total de 1 082,65 BTC (~70,2 millones de dólares), aunque no se ha confirmado una relación de causalidad con esta vulnerabilidad.
Esencia técnica de la vulnerabilidad
La raíz del problema reside en la configuración de compilación del firmware de Coldcard. El macro MICROPY_HW_ENABLE_RNG estaba establecido en cero, ya que Coinkite utiliza su propio envoltorio para el generador de números aleatorios hardware de STM32. Sin embargo, la biblioteca libngu solo comprobaba la existencia del macro, y no su valor. Como resultado, la compilación se vinculaba con el mecanismo de reserva de software de MicroPython: el algoritmo Yasmarang.
Este PRNG de software se inicializaba a partir del identificador único del chip (UID) y los valores de los registros de temporizador y, posteriormente, no recibía nueva entropía. Según los investigadores de Block, un atacante capaz de determinar o acotar significativamente el espacio de UID del dispositivo, el estado del temporizador y el historial de llamadas previas al generador puede reproducir el flujo de valores de salida sin conexión, sin acceso al dispositivo. Las frases semilla candidatas obtenidas se comprueban calculando direcciones y comparándolas con datos públicos de la cadena de bloques.
Las estimaciones de la entropía efectiva difieren entre el proveedor y los investigadores:
- Mk3: Coinkite estima la entropía en aproximadamente 40 bits
- Mk4, Mk5 y Q: alrededor de 72 bits según la estimación de Coinkite
- Block fija límites superiores condicionales por debajo de 240,7 y 273,3 respectivamente, advirtiendo de que este último valor no es equivalente a una robustez criptográfica de 73 bits
A modo de comparación: una semilla BIP-39 estándar de 12 palabras proporciona 128 bits de entropía. Block no publicó resultados de benchmarks de fuerza bruta, y el coste práctico del ataque depende de la información disponible sobre el UID, el momento de arranque, las llamadas previas al generador y el coste de la derivación de claves.
Versiones afectadas
La vulnerabilidad viene determinada por el firmware en el que se creó la semilla, no por la versión actualmente instalada:
- Mk3: versiones 4.0.1–4.1.9 (corregido en 4.2.0) según Coinkite; Block incluye además Mk2 y la versión 4.0.0
- Mk4 y Mk5: todas las versiones anteriores a la 5.6.0
- Q: todas las versiones anteriores a la 1.5.0Q
- Compilaciones Edge: hasta la 6.6.0X para Mk4/Mk5, hasta la 6.6.0QX para Q
Los productos TAPSIGNER, OPENDIME y SATSCARD utilizan otra base de código y no se ven afectados.
Diferencia importante: en su advertencia, Coinkite no menciona el modelo Mk2, mientras que la investigación de Block lo incluye en la lista de dispositivos vulnerables. Los propietarios de Mk2 deben considerar sus semillas potencialmente comprometidas.
Operación sospechosa del 30 de julio
Según Galaxy Research, el 30 de julio un operador desconocido vació en 41 minutos 1 196 direcciones de Bitcoin, moviendo 1 082,65 BTC. Galaxy señaló que en los 30 días anteriores no se detectaron otras transacciones con una combinación de características similar: comisión de 30 sat/vB y ausencia de cambio.
No obstante, Galaxy advirtió de que este patrón identifica al operador, y no el hecho de un robo: una transferencia masiva de fondos se ve igual con independencia de si la realiza el propietario o un atacante. Ningún informe público ha reproducido la semilla de una víctima ni la ha asociado a una dirección vaciada. La relación entre esta operación y la vulnerabilidad de Coldcard sigue siendo una hipótesis basada en el análisis de patrones en la cadena de bloques.
Evaluación del impacto
Están en riesgo todos los usuarios de Coldcard que generaron su semilla en versiones vulnerables del firmware sin utilizar una cantidad suficiente de tiradas de dados. Dado que Coldcard se posiciona como un monedero para almacenamiento a largo plazo de grandes sumas en Bitcoin, el daño potencial es considerable. Los modelos Mk3, con una entropía en torno a 40 bits, se encuentran en la zona de mayor riesgo: un espacio de claves de este tamaño puede ser sometido a fuerza bruta con los recursos de cómputo actuales.
La multifirma (multisig) reduce el riesgo solo si el quórum no está compuesto íntegramente por dispositivos Coldcard afectados.
Recomendaciones prácticas
- Determine la versión de firmware en la que se creó la semilla. Si entra en la lista de versiones vulnerables, considere la semilla como comprometida.
- Actualice el firmware a una versión corregida (4.2.0 para Mk3, 5.6.0 para Mk4/Mk5, 1.5.0Q para Q).
- Genere una nueva semilla con el firmware actualizado. Trasladar la semilla antigua a un firmware actualizado o a otro monedero no elimina la debilidad: la vulnerabilidad está presente en la propia semilla.
- Transfiera todos los fondos desde las direcciones antiguas a direcciones derivadas de la nueva semilla.
- Utilice tiradas de dados: Coinkite afirma que una semilla creada con al menos 50 tiradas de dados honestas, independientes y privadas no está sujeta a esta vulnerabilidad. Si la cantidad o la privacidad de las tiradas es dudosa, realice la migración.
- Frase de contraseña BIP-39: una frase de contraseña fuerte y única crea un monedero separado, inaccesible con tan solo las palabras de la semilla, pero Coinkite sigue recomendando sustituir la semilla.
Los propietarios de dispositivos Coldcard afectados deben actuar de inmediato: actualizar el firmware, crear una nueva semilla y transferir los fondos a nuevas direcciones. Retrasarse deja los bitcoins protegidos por una entropía de 40–72 bits, órdenes de magnitud por debajo del estándar BIP-39. Esperar a que se confirme la relación de la vulnerabilidad con robos concretos no es una estrategia razonable: la mera predictibilidad del generador hace que las semillas sean vulnerables, independientemente de si alguien las ha explotado en la práctica.