Saltar al contenido
Beveiligingsnieuws

CryptoJS: generador RNG débil detrás de robos

CryptoJS zwakke RNG

Investigadores de Coinspect vincularon una pérdida significativa en varias wallets con un problema de calidad en la aleatoriedad usada al crear frases de recuperación. El punto clave es el funcionamiento de CryptoJS RNG débil, una fuente de entropía que, según el análisis, permitió que un atacante acotara el espacio de búsqueda y probara combinaciones de manera práctica.

De acuerdo con la investigación, el efecto se observó en drenes ocurridos a lo largo de varios periodos y afectó aplicaciones que usaban una función concreta de la librería JavaScript como insumo para generar sus frases. Aunque la librería fue corregida en algún momento, el historial de versiones muestra que el código débil pudo reaparecer en lanzamientos posteriores dentro de la misma rama.

Qué fue lo que falló en la generación de frases

Coinspect identificó que la raíz del problema estaba en CryptoJS.lib.WordArray.random(), empleada para obtener aleatoriedad. Esta función, introducida hace más de una década en la librería de criptografía para JavaScript, suministró entropía insuficiente en los casos afectados.

El impacto no se limita a “tener dependencia” de la librería. La asesoría técnica citada por Coinspect indica que una aplicación es vulnerable solo si utiliza la función problemática para producir valores sensibles desde el punto de vista criptográfico, como lo es una frase de recuperación. En otras palabras: llevar CryptoJS como paquete no garantiza una exposición explotable.

Por qué un RNG débil facilita el robo

En criptografía, la entropía determina cuántas posibilidades reales existen para adivinar una semilla o frase. El análisis considera escenarios de 128 y 256 bits: en condiciones ideales, el espacio de búsqueda sería enorme (2^128 o 2^256). Sin embargo, al reducirse de forma drástica la entropía efectiva por el CryptoJS RNG débil, el espacio se volvió lo bastante pequeño como para ser enumerado incluso con hardware común.

El trabajo de Coinspect describe una cadena de ataque basada en enumerar salidas, convertirlas a frases compatibles con BIP39, derivar direcciones y contrastarlas con información pública en cadenas de bloques. Cuando existía una coincidencia, los activos asociados podían quedar en riesgo.

Apps afectadas confirmadas por Coinspect

Coinspect informó que, además de casos discutidos previamente sin nombrarlos, logró confirmar cinco aplicaciones que usaron el generador como fuente de entropía para crear frases de recuperación. Estas son las que aparecen con detalle en el reporte:

  • RRWallet: señalada como discontinuada. Coinspect indica que no hay arreglo publicado.
  • Bexo Wallet: reportada como corregida en la versión 20.1.0. No obstante, Coinspect advirtió que los builds actualizados no se encontraban aún disponibles para descarga en el momento de la revisión, por lo que el tiempo de disponibilidad pudo jugar en contra.
  • NanChat: confirmó que versiones anteriores a 1.3.0 estaban afectadas. Se corrigió en 1.3.0 e incluyó herramientas para migrar.
  • Bitcoin Libre: según Coinspect, la solución llegó en la versión 4, publicada en julio de 2024.
  • Milo: catalogada como discontinuada, sin solución disponible.

El equipo también remarcó que su verificación no necesariamente cubre todas las wallets que pudieron usar la ruta vulnerable. Algunas pudieron haber desaparecido de tiendas, reemplazadas por versiones parcheadas, o simplemente no ser examinables porque ya no estaban disponibles.

El problema no se “arregla” automáticamente para frases ya generadas

Una de las advertencias más importantes del informe es que actualizar la app no repara una frase existente. Una vez que una frase de recuperación fue generada con la salida del generador débil, cualquier proceso posterior (por ejemplo, hashing o derivaciones como PBKDF2) no puede recuperar la entropía que faltó desde el inicio.

Además, si la frase generada en un entorno afectado se importa en otro lugar, incluyendo una wallet de hardware, la vulnerabilidad persiste mientras la semilla original siga siendo la misma. Para usuarios afectados, la recomendación práctica es crear una nueva frase de forma segura y luego mover los fondos a las direcciones derivadas de esa nueva semilla.

Cifras y cronología de los drenes

Coinspect sostuvo que el abuso se reflejó en dos oleadas de drenaje. Una primera barrida, el 27 de mayo, tomó aproximadamente $3.14 millones desde 431 cuentas.

La segunda actividad se ubicó entre el 30 de mayo y el 13 de julio, con pérdidas reportadas alrededor de $2.55 millones vinculadas a direcciones asociadas con semillas relacionadas. El reporte incluye un ejemplo: aproximadamente $2.18 millones en USDT desde una cuenta de Tron, con fecha 4 de julio.

En conjunto, el análisis de Coinspect cifra pérdidas medidas en $5,690,922 hasta el 13 de julio, descrito como un límite inferior. Para sostener la estimación, se rastrearon 2,114 semillas identificadas y direcciones asociadas en redes como Bitcoin, Ethereum, Tron, Rootstock y Polygon.

Cómo evolucionó la corrección en CryptoJS

El informe también ofrece contexto sobre el ciclo de corrección. Coinspect señala que el generador fue revisado una vez y luego el código débil habría vuelto a aparecer. El generador “Multiply-With-Carry” se alimentó con Math.random() alrededor de junio de 2014.

Las versiones 3.2.0 y 3.2.1 habrían cambiado a aleatoriedad criptográfica nativa. Sin embargo, la rama 3.x volvió a incluir el código débil en 3.3.0 porque el cambio inicial se consideró “rompedor”. En ese sentido, una actualización dentro de la misma familia de versiones pudo trasladar un proyecto desde una liberación corregida a otra vulnerable.

Finalmente, la versión 4.0.0 restauró la aleatoriedad nativa de manera permanente en febrero de 2020.

Rutas de entrada en apps móviles

Coinspect identificó al menos una vía por la cual las wallets podrían haber quedado expuestas: un fork de React Native llamado ferrumnet/bip39 que, en lugar de usar la aleatoriedad criptográfica nativa del original, recurrió a CryptoJS. El reporte aclara que esta no sería la única ruta posible, pero sí un ejemplo concreto de cómo el flujo vulnerable pudo incorporarse a la generación de semillas en software.

Qué significa “afectado” según la asesoría

La divulgación pública, tal como la resume Coinspect, plantea un matiz relevante: tener CryptoJS como dependencia no basta. La exposición ocurre cuando la aplicación toma la salida de la función vulnerable y la usa para valores que impactan la seguridad, especialmente la creación de la frase de recuperación.

Además, una vez creada la frase con el output deficiente, no hay una actualización posterior que “arregle” esa semilla ya generada. Por eso, el problema se debe tratar como un asunto de migración para las instancias afectadas, no solo como una rutina de actualización.

Qué deben hacer los usuarios

Coinspect recomendó que los usuarios consulten los canales oficiales de cada wallet activa para conocer versión vigente y guías de migración. En el caso de NanChat, la asesoría pública sugiere que quienes crearon una wallet antes de v1.3.0 la consideren comprometida y migren.

En esa misma línea, la investigación indica que la versión 1.3.0 incluyó una herramienta para generar una nueva semilla y mover fondos. Coinspect también reporta que el hallazgo fue comunicado y el parche se entregó con rapidez: el fundador y CEO de Coinspect, Juliano Rizzo, informó el problema el 10 de junio y la corrección se publicó dos días después.

Comprobación en cadena: límites de lo que se puede verificar

El verificador público de Coinspect acepta direcciones, no frases de recuperación ni claves privadas. Si el análisis encuentra una coincidencia, significa que los activos ligados a esa misma frase podrían estar en riesgo inmediato.

Si no aparece un match, eso no equivale a “cero riesgo” absoluto; solo indica que la dirección no está dentro de los conjuntos de datos actualmente publicados por el estudio.

Conclusión

El caso de CryptoJS RNG débil muestra cómo un detalle en la generación de aleatoriedad puede tener consecuencias desproporcionadas cuando afecta la creación de frases de recuperación. La combinación de entropía insuficiente, posibilidad de enumeración y uso de semillas en múltiples redes permitió vincular drenes con pérdidas de al menos $5.7 millones.

Si usas wallets basadas en software, la recomendación central es revisar versiones y, sobre todo, entender si tus frases fueron generadas bajo un camino vulnerable. En caso de duda, migrar a una nueva frase generada de forma segura y mover los fondos es la acción que realmente rompe el ciclo del riesgo.

Fuente: https://thehackernews.com/2026/08/cryptojs-weak-rng-behind-57-million-in.html