ثغرة CryptoJS في بعض محافظ العملات الرقمية سمحت بسرقة ما لا يقل عن 5.7 مليون دولار، بعدما استُخدم مولد أرقام عشوائية ضعيف لإنشاء عبارات الاسترداد.
ما هي ثغرة CryptoJS في محافظ العملات الرقمية؟
المشكلة تعود إلى الدالة CryptoJS.lib.WordArray.random() داخل مكتبة JavaScript قديمة مستخدمة في التشفير. هذه الدالة كانت تبدو مناسبة ظاهرياً، لكنها اعتمدت على مصدر عشوائية ضعيف لا يوفر مستوى الأمان المطلوب لعبارات الاسترداد.
الخطورة هنا أن عبارة الاسترداد الضعيفة لا تصبح آمنة حتى لو نقلها المستخدم لاحقاً إلى محفظة أخرى أو حتى إلى محفظة عتادية. إذا كانت العبارة أُنشئت بطريقة قابلة للتخمين، فإن الأصول تظل معرضة للخطر أينما استُخدمت.
كيف تحولت المشكلة إلى سرقات فعلية؟
بحسب التحليل الأمني، تم تقليص مساحة الاحتمالات بشكل ضخم. بدلاً من صعوبة رياضية هائلة تصل إلى 2^128 أو 2^256، انخفضت المساحة إلى حدود يمكن فحصها على أجهزة عادية نسبياً.
- نوع الخلل: مولد أرقام عشوائية ضعيف
- النطاق المتأثر: إنشاء عبارات الاسترداد
- الخسائر المرصودة: نحو 5.7 مليون دولار كحد أدنى
- فترة الرصد: منذ أواخر مايو في عمليتي سحب أساسيتين
ما هي المحافظ المتأثرة بثغرة CryptoJS؟
التحقيق أكد تأثر خمسة تطبيقات محافظ استخدمت هذا المصدر الضعيف للعشوائية في مسار إنشاء العبارة السرية. كما أشار تقرير تيكبامين إلى أن القائمة قد لا تكون نهائية، لأن بعض التطبيقات القديمة أزيلت من المتاجر أو استُبدلت بإصدارات أحدث.
- RRWallet
- Bexo
- Bitcoin Libre
- Milo
- إضافة متصفح جرى إيقافها سابقاً
المشكلة الإضافية أن تحديث التطبيق وحده لا يصلح عبارة استرداد قديمة تم توليدها بالفعل. لذلك، من استخدم نسخة متأثرة في الماضي قد يبقى معرضاً للخطر حتى لو كان يعمل الآن على إصدار جديد.
لماذا كانت عبارة الاسترداد قابلة للتخمين؟
المهاجمون تمكنوا من إعادة بناء سلسلة الهجوم تقنياً عبر تعداد المخرجات المحتملة، ثم تحويلها إلى عبارات BIP39، وبعدها اشتقاق العناوين ومقارنتها ببيانات البلوكشين العامة حتى العثور على محافظ قابلة للاستنزاف.
الأمر الأكثر إثارة للقلق أن المكتبة أصلحت هذا السلوك مرة ثم أعادت الكود الضعيف في إصدار لاحق بسبب اعتباره تغييراً قد يكسر التوافق. لاحقاً فقط، عاد الاعتماد على العشوائية الأصلية الآمنة بشكل دائم في إصدار أحدث.
- إدخال المولد الضعيف: يونيو 2014
- إصدارات أصلحت المشكلة مؤقتاً: 3.2.0 و3.2.1
- عودة الكود الضعيف: 3.3.0
- الإصلاح الدائم: 4.0.0 في فبراير 2020
ماذا يجب أن يفعل المستخدمون الآن؟
إذا كانت عبارة الاسترداد أُنشئت عبر تطبيق متأثر، فالحل ليس مجرد تحديث التطبيق، بل إنشاء عبارة جديدة بشكل آمن ثم نقل الأموال إليها فوراً. هذا هو الإجراء الوحيد الذي يقطع أثر ثغرة CryptoJS نهائياً.
خطوات الحماية السريعة
- إنشاء محفظة جديدة من مصدر موثوق وحديث
- توليد عبارة استرداد جديدة بالكامل
- نقل الأصول من العناوين القديمة إلى الجديدة
- تجنب استيراد العبارة القديمة في أي تطبيق آخر
وفي الخلاصة، تؤكد هذه الحادثة أن الأمان في محافظ العملات الرقمية يبدأ من جودة العشوائية نفسها، لا من الواجهة أو الشهرة فقط. ولهذا تنصح تيكبامين أي مستخدم يشك في مصدر عبارة الاسترداد الخاصة به بالتصرف سريعاً قبل أن تتحول ثغرة CryptoJS إلى خسارة فعلية.