سمح خطأ Bitcoin لعمال المناجم بتشغيل التعليمات البرمجية على عقد الأشخاص الآخرين

كشف مطورو Bitcoin Core اليوم عن خطأ سمح لعمال المناجم بالتعطل عن بعد وتنفيذ التعليمات البرمجية على عقد الأشخاص الآخرين.
أثرت الثغرة الأمنية، CVE-2024-52911، على Bitcoin Core 0.14.1 حتى 28.4. كشف المطور Cory Fields بشكل مسؤول عن الخطأ الشديد الخطورة وساعد في تصحيحه عبر طلب السحب (PR) 31112.
لو أراد أحد المُعدنين استخدام الخدعة المظلمة، لكان بإمكانه تنفيذ تعليمات برمجية برمجية على عقد متنوعة في جميع أنحاء العالم.
ولحسن الحظ، ظل الخطأ غامضًا ومن المحتمل أنه لم يتم استخدامه بسبب ناقل الهجوم الباهظ الثمن بشكل لا يصدق.
على وجه التحديد، تطلب الهجوم من عامل التعدين توجيه قوة التجزئة المستهلكة للكهرباء نحو تعدين أنواع خاصة من الكتل. وهي تكلفة فرصة مضمونة، ولا يمكن أن تصبح هذه الكتل غير الصالحة مؤهلة للحصول على مكافأة فعلية من قاعدة العملات لاسترداد تكاليف الكهرباء التي تكبدها القائمون بالتعدين.
ومع ذلك، من السهل فهم آلية الهجوم، رغم أن تنفيذها مكلف.
لقد قمنا بنشر إرشادات أمان Bitcoin Core لمدة عامين تقريبًا، و(afaik) كشفنا للتو عن أول مشكلة تتعلق بسلامة الذاكرة على الإطلاق: استخدام بعد الاستخدام مجانًا في محرك التحقق. الائتمان لـ Cory Fields من DCI للبحث والإبلاغ.
– نيكلاس جوج (@ dergoegge) 5 مايو 2026
يمكن لعامل التعدين الذي أنتج كتلة مصممة خصيصًا مع إثبات عمل كافٍ أن يؤدي إلى تعطل العقد الضحية و/أو استخدام العطل لتجاوز ذاكرته لتنفيذ التعليمات البرمجية عن بُعد.
اعترفت Bitcoin Core بأن تنفيذ التعليمات البرمجية عن بعد ممكن، على الرغم من أنها لم تذكر أمثلة محددة على حدوث ذلك. ولم يسلط الضوء على تكلفته وعمره فحسب، بل سلط الضوء أيضا على القيود المفروضة على بيانات الكتلة التي جعلت من غير المرجح تاريخيا أن ينخرط عمال المناجم في حلقات ذات مغزى من تحريك الدمى.
عقد البيتكوين القديمة لا تزال معرضة لخطر الأخطاء
يصف تقرير Bitcoin Core الخطأ بأنه تعطل في مترجم البرنامج النصي. أثناء التحقق من صحة الكتلة، يقوم برنامج Bitcoin Core بحساب بيانات إدخال المعاملات وتخزينها مؤقتًا، ثم يرسل أعمال التحقق من صحة البرنامج النصي إلى سلاسل العمليات الخلفية التي تستخدم ذاكرة الكمبيوتر.
إذا تعرضت العقدة لهجوم CVE-2024-52911، فيمكن أن تستمر العقدة في القراءة من ذاكرتها المخزنة مؤقتًا بعد تحرير تلك البيانات بالفعل من الذاكرة من خلال عملية أخرى.
نظرًا لأن هذا الهجوم عبارة عن خطأ في الذاكرة يتم استخدامه بعد الفراغ، فمن الممكن تنفيذ التعليمات البرمجية عن بُعد أثناء حالة الذاكرة غير الطبيعية هذه.
على وجه الخصوص، يمكن أن يحدث تنفيذ التعليمات البرمجية عن بعد عندما يقرأ مؤشر ترابط البرنامج النصي في الخلفية للعقدة بيانات المعاملات المخزنة مؤقتًا والمحسوبة مسبقًا بعد أن تم إتلافها بواسطة التحقق من صحة البرنامج النصي، CScriptCheck.
نظرًا لأن ترقية عقدة Bitcoin الكاملة أمر طوعي وأن تحديثات البرامج ليست تلقائية، فقد أخرت أقلية كبيرة من الشبكة الترقية إلى الإصدار 29 (v29) أو أعلى.
على وجه التحديد، وفقًا لأحد التقديرات الشائعة، لا يزال ما يصل إلى 43% من عقد البيتكوين تقوم بتشغيل برنامج العقدة الكاملة الضعيفة استنادًا إلى كود ما قبل الإصدار 29.
يقوم Bitcoin Core بسحب تنزيلات الإصدار 30 بسبب خطأ يمكنه تنظيف محافظ عصر ساتوشي
الإفصاح المسؤول في عام 2024
في وقت مبكر من نوفمبر 2024، اكتشف كوري فيلدز الخطأ وأبلغ عنه بشكل خاص.
بعد أربعة أيام من الاكتشاف، قدم بيتر وويل مقترح إصلاح تحت عنوان PR 31112، بعنوان "تحسين تسجيل تصحيح أخطاء التحقق من صحة البرنامج النصي المتوازي".
تتم قراءة الاستشارة بشكل هادف مثل إصلاح السباكة الدنيوي بأسلوب الصيانة. لم يتم إثارة أي أجراس إنذار، فقد تم إصلاح معالجة إرجاع قائمة انتظار التحقق من Bitcoin Core والتحقق من صحة البرنامج النصي.
بسرعة، حصل تقرير العلاقات العامة من Fields وWuille على إجماع فني على الدمج في الإنتاج بحلول ديسمبر 2024. وتم شحن Bitcoin Core 29.0 مع الإصلاح بحلول أبريل 2025، ووصل خط الإصدار الأخير الضعيف، الإصدارات 28.x، إلى نهاية العمر الافتراضي في 19 أبريل 2026.
الآن بعد أن كان لدى مشغلي العقد عدة أشهر للترقية، وتماشيًا مع السياسة المتبعة في السنوات الأخيرة المتمثلة في الكشف علنًا عن إصلاحات الأخطاء القديمة والسرية سابقًا، أعلنت Bitcoin Core أخيرًا عن الخطأ اليوم على موقعها الإلكتروني.
لاحظ مطور Bitcoin Core Niklas Gögge بشكل صحيح أن هذا هو "أول خطأ على الإطلاق يتعلق بسلامة الذاكرة" في Bitcoin Core. وشكر فيلدز على الكشف المسؤول.
لم يتم تغيير قواعد الإجماع الخاصة بالبيتكوين من خلال إصلاح الأخطاء. كان الخطأ في برنامج العقدة واستخدامه لفحص ذاكرة الكمبيوتر، والإصلاح موجود بالفعل في إصدارات Bitcoin Core الحالية v29 والإصدارات الأحدث.