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.