
تتيح مشكلة في radare2 التابع لمشروع radareorg، في الإصدارات من v.0.9.7 حتى v.5.8.6، والتي تم إصلاحها في v.5.8.8، لمهاجم محلي التسبب في حرمان من الخدمة عبر الدالة grub_sfs_read_extent.
Sherlock Fang, Vlad Tronciu, Ayam Babu
توجد مشكلة في radareorg radare2 في الإصدارات من v.0.9.7 حتى v.5.8.6، وتم إصلاحها في الإصدار v.5.8.8، تتيح لمهاجم محلي التسبب في رفض الخدمة عبر الدالة grub_sfs_read_extent.
يؤدي صنع حمولة ضارة إلى جعل “treeblock = grub_malloc(data->blocksize);” تشير إلى NULL في الذاكرة، بحيث عندما يتم تعيين قيمة “treeblock” إلى “tree = (struct grub_sfs_btree *) treeblock;”، فإن “treeblock” تشير أيضًا إلى NULL. تعتمد درجة قابلية الاستغلال على السياقات المحددة، لكن مثل هذه الثغرة الأمنية المتعلقة بإلغاء مرجعية مؤشر فارغ ستتسبب في رفض الخدمة للبرنامج، مما يؤثر على الأداء العام للبرنامج.
داخل الدالة grub_sfs_read_extent توجد ثغرة أمنية بسبب عدم وجود فحص لحالة tree_block. يستمر الكود اللاحق في استخدام tree_block دون التحقق من أنه يشير إلى تخصيص ذاكرة صالح. سيؤدي هذا إلى إلغاء مرجعية مؤشر فارغ عندما يتم تعيين tree إلى قيمة treeblock المحولة إلى struct grub_sfs_btree* ثم استخدامها في استدعاء grub_disk_read. إن إلغاء مرجعية مؤشر فارغ هو سلوك غير محدد في C ويؤدي عادةً إلى خطأ تجزئة أو انتهاك وصول، مما يتسبب في تعطل البرنامج.
لقد أصلحنا الثغرة الأمنية بإضافة فحص لحالة تخصيص grub_malloc، كما هو موضح أدناه.