في 8 يناير 2026 عند بلوك إيثيريوم 24,191,019، انهار رمز TRU الخاص بتروبيت بعد أن أجبرت معاملة سعر شراء البروتوكول على الصفر. هذا الشرط الوحيد مكن من سك غير محدود وخرجوا سريعا إلى ETH. مزيد من التفاصيل فيما يلي.
المهاجم الذي أطلق عليه اسم getPurchasePrice، ثم buyTRU (0xa0296215)، سك TRU أكثر من إجمالي العرض، كرر الدورة، ثم باع عبر sellTRU. كانت التكلفة الإجمالية أقل من 40 دولارا، وحققت الصفقة 8,535 إيثان إيثي (حوالي 26 مليون دولار).
تم التحقق فقط من بروكسي رمز TRU في Sourcify، المترجم باستخدام Solidity 0.5.3. تلك الحقبة سبقت فحوصات الفائض المدمجة والعديد من ميزات السلامة. يمكن أن يعمل الكود القديم لسنوات، ثم يفشل عندما تلتقي حالة حافة واحدة بتحليل أفضل.
قمنا بتفكيك عقد الشراء غير الموثق وتتبعنا getPurchasePrice إلى دالة داخلية (0x1446) تحسب السعر من supply S، والاحتياطي R، وTHETA (75 في ذلك الوقت). تم استخدام مساعدي رياضيات آمنين طوال معظم المسار.
كانت نقطة الفشل هي التعبير النهائي: v13 = _SafeDiv(v6, v12 + v9). لم يتم مراقبة هذه الإضافة، ولا يتم التراجع عن Solidity 0.5.3 عند الفائض. مع إدخال كبير بما فيه الكفاية، يلتف الرقم ويعاد القسمة الصحيحة صفرا.
يغطي تقريرنا الكامل السبب الجذري والدروس المتعلقة بالأنظمة القديمة:
‏‎5.27‏K