Durante doce años los desarrolladores mantuvieron la puerta entreabierta. Nadie se dio cuenta.

Durante doce años, una función que debía generar aleatoriedad proporcionó a las carteras números previsibles —y ahora se sabe cuánto perdieron los usuarios por ello. La empresa Coinspect encontró que el generador CryptoJS.lib.WordArray.random() producía baja entropía al crear las frases secretas de recuperación para criptocarteras. El incidente recibió el nombre Ill Bloom.
La vulnerabilidad afectó a cinco aplicaciones: RRWallet y Milo están cerradas y no recibirán correcciones, Bexo Wallet y NanChat publicaron versiones actualizadas, y Bitcoin Libre solucionó el problema ya en 2024. Actualizar la aplicación no hace seguras las frases ya generadas —deben cambiarse manualmente.
Debido al error, el espacio de búsqueda para una entropía de 128 bits se redujo de 2^128 a aproximadamente 2^39 variantes, y para 256 bits —de 2^256 a 2^47. Estos valores se pueden explorar en un ordenador convencional, por lo que los atacantes pudieron recuperar las frases de recuperación y acceder a las carteras.
Coinspect registró dos oleadas de sustracciones. El 27 de mayo de este año se retiraron alrededor de 3,14 millones de dólares de 431 carteras, y del 30 de mayo al 13 de julio se tomaron otros 2,55 millones de dólares de carteras vinculadas a 522 frases comprometidas, incluyendo una transferencia de 2,18 millones de USDT desde una cuenta en la red Tron. En total la empresa contabilizó 2114 frases comprometidas y estima que el daño total es de al menos 5,69 millones de dólares.
La historia de la vulnerabilidad comenzó en 2014, cuando en CryptoJS apareció el generador MWC, inicializado mediante Math.random(). Las versiones 3.2.0 y 3.2.1 cambiaron temporalmente a una aleatoriedad criptográficamente segura, pero en la 3.3.0 los desarrolladores restauraron el código antiguo, considerando el cambio demasiado crítico para la compatibilidad. La corrección definitiva se incluyó en la versión 4.0.0, publicada en febrero de 2020.
El 5 de agosto, el mantenedor del proyecto Evan Vosberg publicó un aviso de vulnerabilidad con calificación crítica y una puntuación de 9,0 en la escala CVSS. Solo estuvieron en riesgo las aplicaciones en las que la función se empleó para generar datos clave —la sola presencia de la biblioteca en el proyecto no implica riesgo.
Los propietarios de carteras creadas con aplicaciones que usan una versión vulnerable de CryptoJS anterior a la 4.0.0 deberían considerar esas frases de recuperación como comprometidas, incluso si después se trasladaron a otro lugar, incluidos monederos de hardware. La única manera fiable de protegerse es generar una nueva frase en la versión actualizada de la aplicación y transferir todos los fondos a las direcciones del nuevo monedero.