Descoberta e escopo do problema
A Coinspect identificou o CryptoJS.lib.WordArray.random() como o gerador de números aleatórios fraco por trás dos drenos da carteira Ill Bloom. Introduzido na biblioteca de criptografia JavaScript há 12 anos, a função fornecia entropia fraca que afetava aplicativos de carteira usados para gerar frases de recuperação. A análise on-chain da Coinspect coloca o roubo medido em duas varreduras desde o final de maio em um limite inferior de $5,7 milhões.
Este problema de segurança não é apenas uma falha de implementação, mas uma falha fundamental na geração de números aleatórios que compromete a segurança de chaves privadas em múltiplas carteiras de criptomoedas. A entropia insuficiente significa que as chaves geradas podem ser previsíveis ou repetitivas, permitindo que atacantes calculem chaves privadas correspondentes e drenem fundos.
Impacto financeiro e técnico
O uso de um gerador de números aleatórios fraco (RNG) em bibliotecas de criptografia é um risco de segurança de alto nível. No caso do CryptoJS, a função random() não utiliza fontes de entropia suficientes do sistema operacional, resultando em sequências de números que podem ser reproduzidas ou previstas por atacantes com recursos computacionais adequados.
Isso afeta diretamente a segurança das frases de recuperação (seed phrases) geradas pelas carteiras. Se a entropia for baixa, o espaço de chaves é reduzido, facilitando ataques de força bruta ou colisão. Os cinco aplicativos de carteira afetados utilizam essa biblioteca para gerar as chaves mestras que protegem os ativos dos usuários.
Mecanismo de exploração
Os atacantes exploram a fraqueza no RNG para gerar combinações de chaves que correspondem às chaves privadas das vítimas. Uma vez que a entropia é insuficiente, o número de combinações possíveis diminui drasticamente. Isso permite que os atacantes realizem varreduras em grandes conjuntos de chaves em busca de correspondências com endereços de carteira que contêm fundos.
A exploração não requer acesso direto aos dispositivos das vítimas, mas sim a capacidade de gerar chaves que correspondam às endereços de destino. Isso torna o ataque escalável e difícil de detectar, pois o tráfego de rede pode parecer legítimo até que os fundos sejam transferidos.
Medidas de mitigação recomendadas
Os desenvolvedores de carteiras devem atualizar imediatamente para versões do CryptoJS que não utilizam a função random() fraca ou substituir a biblioteca por uma solução de RNG mais robusta, como o Web Crypto API. Os usuários de carteiras afetadas devem transferir seus fundos para novas carteiras geradas com RNG seguro o mais rápido possível.
Além disso, é crucial auditar o código-fonte das carteiras para garantir que não haja dependências de bibliotecas desatualizadas que introduzam vulnerabilidades de RNG. A implementação de verificações de entropia durante a geração de chaves pode ajudar a prevenir a criação de chaves fracas.
Análise técnica detalhada
A função CryptoJS.lib.WordArray.random() foi projetada para gerar números aleatórios em JavaScript, mas não atende aos padrões de segurança criptográfica modernos. Ela depende de fontes de entropia que podem ser manipuladas ou previsíveis em certos ambientes de execução.
Para mitigar isso, as carteiras devem utilizar o objeto crypto.getRandomValues() do navegador, que fornece entropia de alta qualidade. A substituição da biblioteca CryptoJS por alternativas mais seguras, como libsodium ou bibliotecas nativas de criptografia, é recomendada para garantir a integridade das chaves geradas.
Perguntas frequentes
Quais carteiras são afetadas?
Cinco aplicativos de carteira de criptomoedas que utilizam o CryptoJS para geração de chaves estão sob risco. Os usuários devem verificar a documentação da carteira para confirmar a versão da biblioteca.
Como saber se minha carteira foi comprometida?
Se você notar transações não autorizadas ou fundos desaparecidos, sua carteira pode ter sido afetada. Verifique o histórico de transações e transfira fundos para uma nova carteira imediatamente.
Indicadores de Comprometimento (IoCs)
- Biblioteca: CryptoJS
- Função: CryptoJS.lib.WordArray.random()
- Valor Drenado: $5,7 milhões (estimativa)
- Período: Desde o final de maio de 2026