Falha em carteira física Coldcard leva a roubo de mais de US$ 88 milhões em Bitcoin

Resumo de mercado por IA
Uma falha divulgada na geração de chaves da carteira de hardware Coldcard teria permitido que atacantes roubassem mais de US$ 88 milhões em BTC, com o exploit descrito como em andamento e os fundos se agregando on-chain. Embora não seja um problema do Bitcoin em nível de protocolo, o incidente pode pressionar o sentimento no curto prazo ao elevar o risco de custódia e operacional, potencialmente levando a migrações aceleradas para autocustódia, maior escrutínio das cadeias de suprimento de carteiras de hardware e aumento do monitoramento de endereços relacionados por exchanges e equipes de compliance.
Nível de impacto
● Alto
Ativos afetados
BTC/USDT+0.92%
Insight de IA · BTC/USDTInsight de IA
▼ Baixista
Negociar agora
⚠️ Os insights gerados por IA são baseados em conteúdo de notícias e fornecidos apenas para fins informativos. Eles não constituem aconselhamento de investimento nem representam as opiniões da BingX. Investir envolve riscos. Negocie com responsabilidade.
Prejuízo já supera US$ 88 milhões: análise da vulnerabilidade nas carteiras físicas Coldcard e rastreamento dos fundos. Em 31 de julho, cerca de 500 unidades da Coldcard foram comprometidas, resultando no roubo de 594 bitcoins, avaliados em aproximadamente US$ 38 milhões. Depois disso, a Coinkite, fabricante da Coldcard, confirmou uma falha de segurança no processo de geração de chaves que afeta múltiplas gerações do produto, incluindo Coldcard Mk2, Mk3, Mk4, Q e Mk5. O total perdido com a exploração da vulnerabilidade já ultrapassa US$ 88 milhões, e os ataques continuam. Usuários da Coldcard são orientados a transferir os fundos para outro endereço o quanto antes. A seguir, a análise da Beosin sobre a falha e o monitoramento on-chain dos valores desviados. I. Análise da vulnerabilidade A revisão do histórico de commits do firmware da Coldcard mostra que, no commit anterior 37e4af5451c260c1e7d429fe8972c4cb5e68ee59, a equipe alterou trechos relacionados à configuração da MK4. Em mpconfigboard.h, foi definido: // We have our own version of this code. #define MICROPY_HW_ENABLE_RNG (0) No MicroPython para STM32, essa macro determina o caminho de compilação do binding padrão do gerador de números aleatórios por hardware (RNG) e da implementação genérica de aleatoriedade. Ao configurá-la como 0, o caminho padrão de RNG por hardware deixa de servir como backend para o rng_get() genérico. O comentário sugere que o desenvolvedor implementaria o RNG por conta própria; no arquivo rng.h personalizado, aparecem apenas dois objetos MicroPython declarados: MP_DECLARE_CONST_FUN_OBJ_0(pyb_rng_get_obj); MP_DECLARE_CONST_FUN_OBJ_1(pyb_rng_get_bytes_obj); A implementação correspondente inclui, entre outros pontos: /// \function pyb_rng_get() ///// Returns a 30bit hardwaregenerated random number, or fails! //STATIC mp_obj_t pyb_rng_get(void){ // Retrieve and return the new random number return mp_obj_new_int(rng_get_or_fault() >> 2); } /// \function rng_get_bytes() /// Fills a buffer with random bits; the caller must provide a buffer of appropriate size. STATIC mp_obj_t pyb_rng_get_bytes(mp_obj_t buffer_io) { ... // Retrieve and return the new random number last_value = RNG>DR; return last_value; } Isso indica que o código customizado da Coldcard pretendia usar o RNG de hardware, mas garante o uso do hardware apenas quando são chamadas as funções pyb_rng_get* ou o random_buffer() interno. Na criação da carteira, o fluxo efetivo chama a função em shared/seed.py: async def make_new_wallet(nwords): # Select a new random seed. await ux_dramatic_pause('Generating...', 3) seed = generate_seed() words = await approve_word_list(seed, nwords) if words: await commit_new_words(words) Esse caminho entra primeiro no módulo shared/random.py. Em versões anteriores, random.py dependia explicitamente de ngu.random e mantinha: # random.py subset of the random module, with no compatibility, using cryptographically secure RNG # for bytes, use ngu.random.bytes(len) # bytes = ngu.random.bytes A inicialização da carteira usa random.bytes, não pyb.rng(); o objeto customizado pyb_rng_get_obj não substitui automaticamente random.bytes. Como MICROPY_HW_ENABLE_RNG está definido como 0, a geração da carteira não usou RNG de hardware e acabou recorrendo ao fallback em micropython/ports/stm32/rng.c: #if MICROPY_HW_ENABLE_RNG uint32_t rng_get(void) { // Use STM32 hardware RNG ... } #else // For MCUs without an RNG, we still need to provide an rng_get() function. // A pseudoRNG is not ideal, but we use it for now. // Yasmarang random number generator static uint32_t pyb_rng_yasmarang(void) { static bool seeded = false; static uint32_t pad = 0, n = 0; ... } uint32_t rng_get(void) { return pyb_rng_yasmarang(); } #endif O pyb_rng_yasmarang é um gerador pseudoaleatório e é considerado altamente inseguro para produzir seeds de carteiras físicas, pois permitiria que atacantes forçassem a chave por brute force. A Coinkite informou que agora excluiu explicitamente o stm32/rng.c no Makefile: Do not compile MicroPython's fallback PRNG. The boardspecific rng.c provides rng_get(), and this empty object satisfies the upstream object list. $(BUILD)/rng.o: CFLAGS += Dpyb_rng_yasmarang=errordonotwantthis $(BUILD)/rng.o: $(ECHO) "SKIP stm32/rng.c" $(Q)$(CC) $(CFLAGS) x c c /dev/null o $@ II. Rastreamento dos fundos roubados Os valores de múltiplas carteiras afetadas já foram transferidos e consolidados em alguns endereços, ainda sem sinais de “lavagem” adicional. Com base em inteligência de ameaças e análise de comportamento on-chain, o Beosin Trace identificou os seguintes endereços de agregação: bc1qq85v2c926eg6pgxhwp6q7lf6cnsz80qs3fcu9r (562 BTC) bc1qx76cae2706qd5q576feh7xq8rfcsjpf2htfhe3 (398.47 BTC) Além disso, os endereços abaixo apresentam padrão de fluxo semelhante e ainda não registraram novas movimentações: bc1q8jy96fe5lf8vfugydnte3cguk92gpev7kwtp3q (89.62 BTC) bc1q0rvn88w08j75k4h48lf9fvhan7unjp7vjf5q6m (64.9 BTC) bc1qtfrwa4j6rmj9rsgspv6a0yjumkg39js2numu75 (45.9 BTC) bc1qmd5m5ktv7m5ffujxv4248fxv36myvdx79n8jp6 (30.18 BTC) Os ataques contra a Coldcard seguem em andamento, e a equipe da Beosin afirma que continua monitorando novos endereços de consolidação e analisando movimentações relacionadas. III. Conclusão O incidente de segurança envolvendo a Coldcard decorreu de um erro de implementação: o processo crítico de geração da seed da carteira utilizou um gerador pseudoaleatório. A equipe de desenvolvimento deve manter testes e auditorias amplas e contínuas do código. Usuários da Coldcard devem mover os ativos imediatamente e acompanhar comunicados futuros de segurança da Coinkite. A Beosin é uma empresa de tecnologia em segurança de blockchain e conformidade regulatória, com foco em auditorias de contratos inteligentes pré-lançamento, monitoramento e bloqueio de riscos em tempo real, recuperação de ativos, AML (antiplavagem de dinheiro) para ativos virtuais e rastreamento investigativo. Segundo a empresa, a Beosin fornece produtos de conformidade e serviços de segurança “one-stop” para órgãos reguladores e de aplicação da lei em mais de 20 países e regiões, além de mais de 200 provedores de serviços de ativos virtuais e 4.500+ projetos Web3.