14
Lun, Sep

Vulnerabilidad crítica en monederos ColdCard: Un fallo en la generación de claves permite el robo de 89 millones de dólares en Bitcoins

Tecnologia
Cientos de usuarios de monederos físicos ColdCard experimentaron la desaparición de sus criptomonedas debido a una vulnerabilidad inesperada. El fallo no comprometió la seguridad física de los dispositivos, sino la forma en que se generaban las claves, permitiendo a los atacantes adivinarlas. Este incidente ha resultado en el robo de 1.367 bitcoins, valorados en aproximadamente 89 millones de dólares, afectando a miles de direcciones.

Aquellos con experiencia en la inversión en criptomonedas saben que los monederos físicos, conocidos como "cold wallets", se consideraban la protección ideal contra posibles robos. Estos dispositivos siempre garantizaban que las claves necesarias para mover los fondos nunca saldrían de ellos. Sin embargo, esta promesa resultó ser falsa.

Una catástrofe se desencadenó el pasado 31 de julio, cuando cientos de propietarios de monederos ColdCard vieron cómo sus fondos desaparecían en apenas 40 minutos. El atacante no necesitó acceso físico a los dispositivos, ni infectarlos ni conectarse a ellos. Simplemente logró hacer algo que debería haber sido imposible: adivinar las claves para robar el dinero. El robo afectó a 1.367 bitcoins, equivalentes a unos 89 millones de dólares al valor actual, sustraídos de 4.585 direcciones de monederos diferentes. Aunque es un robo "menor" en comparación con incidentes pasados, lo más relevante es la forma en que se produjo.

La caja fuerte permaneció intacta. El ataque ni siquiera rompió el aislamiento inherente de los monederos ni extrajo las claves almacenadas en ellos. El fallo era aún más grave: se originó en el momento en que el dispositivo creaba esas claves. Un monedero de bitcoin genera primero una semilla, una secuencia de datos aleatorios, de la cual se derivan las claves privadas y las direcciones. Si esa semilla es verdaderamente impredecible, probar todas las combinaciones sería inviable, incluso para los superordenadores más potentes del mundo. El problema reside en que, si la semilla no es impredecible, el aislamiento total de la caja fuerte (el monedero) carece de importancia.

El azar que dejó de serlo. En 2021, los desarrolladores de ColdCard modificaron parte del código utilizado para generar semillas al integrar una biblioteca llamada libNgU. La intención era utilizar el generador físico de números aleatorios del dispositivo. No obstante, un error de integración provocó que el programa utilizara como alternativa un generador pseudoaleatorio de MicroPython embebido, que expuso la librería libsecp256k1 y otras primitivas de bitcoin, según un análisis técnico del desastre de seguridad creado en las ColdCard por Coinkite.

Parecía aleatorio, pero no lo era tanto. El generador alternativo tomaba datos como el identificador fijo del chip y varios registros relacionados con el reloj del dispositivo. Estos valores producen números que pueden simular aleatoriedad, pero que no son un recurso criptográfico suficientemente robusto porque podían acotarse. Con un conocimiento suficiente del firmware y del comportamiento del hardware, un atacante podía recrear, fuera del dispositivo, una lista de semillas candidatas.

Fuerza bruta. En los modelos Mk2 y Mk3 afectados, Coinkite estima que el espacio efectivo para generar semillas se reducía a 40 bits. En los Mk4 y Mk5, existía un elemento de entropía adicional, y las semillas aumentaban hasta los 72 bits. Sin embargo, el análisis de expertos de Block reveló que un problema en ese firmware en realidad limitaba las semillas a tan solo 32 bits, lo que en esencia hacía que "adivinar" las claves ya no fuese virtualmente imposible, sino solo una cuestión de potencia de cálculo y tiempo.

Adivinar claves era cuestión de minutos. Esos 32 bits dan lugar a aproximadamente 4.300 millones de posibles claves distintas. Esta es una cifra enorme si un ser humano tuviera que verificarlas todas, pero es un número completamente manejable para máquinas capaces de realizar cálculos masivos. Para cada semilla, el atacante podía averiguar las posibles direcciones y luego compararlas con la cadena de bloques de bitcoin. Cuando una coincidencia mostraba fondos, se obtenía a continuación la clave para moverlos. No importaba que el monedero físico estuviera seguro, incluso en una caja fuerte: el atacante ni siquiera necesitaba acceso a él, ya que con esos datos era como si tuviera el monedero en sus manos.

Atraco por oleadas. La primera gran operación de transferencia de bitcoins vació 1.082,65 BTC de 1.196 monederos en apenas 41 minutos el 31 de julio. Nuevos barridos elevaron el total a 1.367 bitcoin, cerca de 89 millones de dólares. El estudio de Galaxy Research sugiere que lo más probable es que el responsable fuera un único atacante, aunque también es posible que varios atacantes diferentes exploraran el mismo conjunto de claves débiles.

Actualizar no es suficiente. Coinkite ya ha lanzado actualizaciones de firmware que corrigen el problema para los dispositivos afectados. Sin embargo, instalar estas actualizaciones solo previene la creación de nuevas semillas defectuosas, pero no convierte en segura una semilla generada previamente. La recomendación de los creadores de ColdCard es actualizar primero, luego crear una semilla completamente nueva y, finalmente, trasladar los fondos.

La paradoja del código abierto. Los responsables de ColdCard reconocen que su código era público y que las revisiones anteriores verificaron la presencia del generador físico de números aleatorios y semillas, pero no siguieron con detalle qué implementación usaba realmente la función que creaba las semillas. Ellos mismos confiesan haber utilizado un modelo avanzado de IA para intentar analizar la seguridad de su software, pero el problema no fue detectado. Se especula con que alguien pudo haber utilizado un modelo de IA para revisar versiones antiguas y localizar el fallo, aunque no hay pruebas de que la brecha de seguridad se haya encontrado de esa forma.