قبل ذلك، في موجة منفصلة من نفس الثغرة، تم سحب 594 بيتكوين (~38 مليون دولار) من حوالي 500 محفظة ذات توقيع واحد في انفجار استمر 25 دقيقة حول الساعة 01:31 بالتوقيت العالمي المنسق . ربطت Galaxy Research وChainalysis وفريق الهندسة في Block بشكل مستقل عمليات السرقة بنفس ثغرة Coldcard .
حدد فريق هندسة وأمن البيتكوين في Block، بقيادة المهندس Clay Garrett، أن المهاجم استخدم حسابًا مدفوعًا في مزود معروف لخدمات البلوكتشين لتحديد والاستعلام عن العناوين الضعيفة بكفاءة . النمط على السلسلة — عمليات سحب سريعة ومتسلسلة بشكل غير معتاد لعناوين تشترك في نفس الضعف — أثار شكوك المحققين. أكد Block وجود أدلة أثرية تربط نشاط المُشغل مباشرة بالبنية التحتية لذلك المزود .
وصف غاريت ما وصفه بـ "خصوصية غير عادية، وصولاً إلى مستوى الحساب" . عملت خدمة التحليلات بشكل فعال كأداة استطلاع، مما سمح للمهاجم برسم خريطة سريعة للعناوين التي تم إنشاؤها على برنامج ثابت ضعيف وتحديد أولويات الأهداف الأكثر ثراءً .
تم إدخال الخطأ في تحديث البرنامج الثابت لشهر مارس 2021 (بدءًا من إصدار Mk3 4.0.1) أثناء الانتقال إلى مكتبة Bitcoin Core's libsecp256k1 . تسبب خطأ في ماكرو تكوين البناء في تجاوز البرنامج الثابت لمولد الأرقام العشوائية المادي المخصص STM32 hardware random number generator (TRNG) والرجوع بدلاً من ذلك إلى مولد الأرقام العشوائية البرمجي الحتمي Yasmarang من MicroPython .
ضبط تكوين اللوحة الإنتاجية MICROPY_HW_ENABLE_RNG على الصفر لأن Coldcard كان لديه غلاف منفصل لمولد الأرقام العشوائية المادي. لكن مكتبة libngu فشلت في استدعاء ذلك الغلاف بشكل صحيح: شرط الحماية (#ifndef MICROPY_HW_ENABLE_RNG) كان يختبر فقط ما إذا كان الماكرو مُعرّفًا، وليس ما إذا كانت قيمته غير صفرية . نظرًا لأن الماكرو كان مُعرّفًا (بقيمة صفر)، استنتجت libngu بصمت أن المسار المادي كان متاحًا وارتبطت بوظيفة rng_get() البرمجية من MicroPython .
هذا قلل الإنتروبيا الفعالة إلى حوالي 32-40 بت (بدلاً من 128+ بت المقصودة)، مما يعني حوالي 4 مليارات قيمة بذور محتملة فقط — وهو رقم يمكن اختراقه بسهولة بالقوة الغاشمة باستخدام الأجهزة الحديثة . البذور التي تم إنشاؤها دون إضافة لفات نرد من المستخدم أو عبارة مرور BIP 39 كانت معرضة بالكامل .
اعترف الرئيس التنفيذي لشركة Coinkite، رودولفو نوفاك (المعروف بـ NVK)، لاحقًا بالخطأ: "لقد قمت بتعيين MICROPY_HW_ENABLE_RNG إلى صفر صراحةً، معتقدًا أننا لا نحتاج إلى أي من الإصدارين، لكن هذا ليس ما يفعله" .
| متأثر | غير متأثر |
|---|---|
| Coldcard Mk3، البرامج الثابتة من 4.0.1 إلى 5.0.3 | Mk4، Q، Mk5 (حسب التحليل الأولي لـ Coinkite) |
| البذور التي تم إنشاؤها دون لفات نرد من المستخدم أو عبارة مرور BIP 39 | البذور التي تم إنشاؤها مع لفات نرد من المستخدم أو عبارة مرور |
لاحقًا، وسعت Coinkite تحذيرها ليشمل بعض إصدارات البرامج الثابتة لـ Mk4 وMk5 وQ بعد مزيد من التحليل، وأصدرت تحديثات طارئة للبرامج الثابتة لجميع الموديلات المتأثرة .
هذا الاستغلال هز أحد الوعود الأساسية للحفظ الذاتي — وهو أن العنصر الآمن للمحفظة المادية يضمن السلامة التشفيرية بغض النظر عن أخطاء البرامج .
لتحليل تقني مفصل، راجع تقرير هندسة بلوك والخلفية التقنية لـ Coinkite .