Celah Coldcard Hardware Wallet Picu Pencurian Bitcoin, Kerugian Tembus US$88 Juta

Ringkasan Pasar AI
Cacat yang diungkapkan pada pembuatan kunci dompet perangkat keras Coldcard dilaporkan memungkinkan penyerang mencuri lebih dari $88M dalam BTC, dengan eksploit tersebut disebut masih berlangsung dan dana terkonsolidasi di on-chain. Meski bukan masalah Bitcoin pada tingkat protokol, insiden ini dapat menekan sentimen jangka pendek dengan meningkatkan risiko kustodi dan operasional, yang berpotensi memicu percepatan migrasi ke self-custody, meningkatnya pengawasan terhadap rantai pasok dompet perangkat keras, serta peningkatan pemantauan alamat terkait oleh bursa dan tim kepatuhan.
Level dampak
● Tinggi
Aset terdampak
BTC/USDT+0.92%
Wawasan AI · BTC/USDTWawasan AI
▼ Bearish
Trade sekarang
⚠️ Wawasan yang dihasilkan AI didasarkan pada konten berita dan disediakan untuk tujuan informasi saja. Wawasan ini bukan nasihat investasi dan tidak mencerminkan pandangan BingX. Investasi melibatkan risiko. Harap trade secara bertanggung jawab.
Kerugian akibat eksploitasi celah keamanan pada hardware wallet Coldcard telah melampaui US$88 juta dan serangan masih berlangsung. Pada 31 Juli, sekitar 500 perangkat Coldcard dilaporkan berhasil dikompromikan, memicu pencurian 594 BTC senilai sekitar US$38 juta. Coinkite selaku produsen kemudian mengonfirmasi adanya kelemahan pada proses pembuatan kunci (key generation) yang berdampak pada beberapa generasi produk, termasuk Coldcard Mk2, Mk3, Mk4, Q, dan Mk5. Pengguna Coldcard disarankan segera memindahkan dana ke alamat lain. Berikut rangkuman analisis Beosin terkait celah tersebut serta pelacakan dana hasil pencurian. I. Analisis celah Berdasarkan penelusuran riwayat commit firmware Coldcard, pada commit sebelumnya 37e4af5451c260c1e7d429fe8972c4cb5e68ee59 tim pengembang memperbarui beberapa bagian kode terkait konfigurasi MK4, termasuk di mpconfigboard.h: // We have our own version of this code. #define MICROPY_HW_ENABLE_RNG (0) Di sisi MicroPython STM32, makro ini mengatur jalur kompilasi untuk binding RNG perangkat keras bawaan serta implementasi random generik. Ketika diset ke 0, jalur RNG perangkat keras default tidak digunakan sebagai backend untuk rng_get() generik. Komentarnya menyiratkan pengembang akan menerapkan RNG sendiri. Namun, pemeriksaan pada file rng.h kustom hanya menunjukkan dua objek MicroPython yang dideklarasikan: MP_DECLARE_CONST_FUN_OBJ_0(pyb_rng_get_obj); MP_DECLARE_CONST_FUN_OBJ_1(pyb_rng_get_bytes_obj); Implementasi yang terkait mencantumkan fungsi: /// \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) { mp_buffer_info_t bufinfo; mp_get_buffer_raise(buffer_io, &bufinfo, MP_BUFFER_WRITE); mp_uint_t count = bufinfo.len; if(count SR & RNG_SR_DRDY)) { if (HAL_GetTick() start >= RNG_TIMEOUT_MS) { // Hardware failure... do not return anything! mp_raise_OSError(MP_EFAULT); } } // Retrieve and return the new random number last_value = RNG>DR; return last_value; } Temuan ini menunjukkan kode kustom Coldcard memang bermaksud memakai RNG perangkat keras, tetapi kepastian penggunaan fungsi perangkat keras hanya terjadi saat memanggil pyb_rng_get* atau random_buffer() internal. Pada proses pembuatan wallet, yang dipanggil adalah fungsi berikut di 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) Alur ini masuk ke modul shared/random.py. Pada versi sebelumnya, random.py secara eksplisit bergantung pada ngu.random dan memuat: # 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 Inisialisasi wallet menggunakan random.bytes, bukan pyb.rng(); sehingga pyb_rng_get_obj kustom tidak otomatis menggantikan random.bytes. Karena MICROPY_HW_ENABLE_RNG diset ke 0, pembuatan seed wallet tidak memakai RNG perangkat keras, melainkan memanggil pyb_rng_yasmarang dari 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 pyb_rng_yasmarang merupakan pseudorandom number generator dan dinilai sangat tidak aman untuk pembuatan seed hardware wallet karena memungkinkan penyerang melakukan brute force kunci. Coinkite kini secara eksplisit mengecualikan stm32/rng.c di 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. Pelacakan dana curian Dana dari sejumlah wallet korban dilaporkan telah dipindahkan dan digabungkan ke beberapa alamat, tanpa indikasi proses pencucian lanjutan sejauh ini. Berdasarkan intelijen ancaman dan analisis perilaku on-chain, Beosin Trace mengidentifikasi alamat agregasi berikut: - bc1qq85v2c926eg6pgxhwp6q7lf6cnsz80qs3fcu9r (562 BTC) - bc1qx76cae2706qd5q576feh7xq8rfcsjpf2htfhe3 (398.47 BTC) Selain itu, alamat agregasi berikut menunjukkan pola arus dana serupa dan belum terlihat melakukan transfer lanjutan: - bc1q8jy96fe5lf8vfugydnte3cguk92gpev7kwtp3q (89.62 BTC) - bc1q0rvn88w08j75k4h48lf9fvhan7unjp7vjf5q6m (64.9 BTC) - bc1qtfrwa4j6rmj9rsgspv6a0yjumkg39js2numu75 (45.9 BTC) - bc1qmd5m5ktv7m5ffujxv4248fxv36myvdx79n8jp6 (30.18 BTC) Beosin menyatakan serangan yang menargetkan Coldcard masih berlangsung, dan timnya terus memantau alamat agregasi tambahan serta menganalisis pergerakan dana terkait. III. Kesimpulan Insiden besar ini ditengarai berakar pada kesalahan implementasi: penggunaan pseudorandom number generator pada tahap krusial pembuatan seed wallet. Tim pengembang dinilai perlu melakukan pengujian dan audit kode secara berkelanjutan dan menyeluruh. Pengguna Coldcard diminta segera memindahkan aset dan memantau pengumuman keamanan lanjutan dari Coinkite. Beosin adalah perusahaan teknologi keamanan blockchain dan kepatuhan regulasi yang berfokus pada audit keamanan smart contract pra-peluncuran, pemantauan dan pemblokiran risiko keamanan secara real-time, pemulihan aset, antimoney laundering (AML) aset virtual, serta investigative tracing. Beosin menyediakan produk kepatuhan blockchain "one-stop" dan layanan keamanan bagi regulator dan aparat penegak hukum di lebih dari 20 negara dan kawasan, lebih dari 200 virtual asset service providers, serta 4.500+ proyek Web3.