نشرت Calif، وهي شركة أبحاث أمنية، تفاصيل ثغرة في OpenBSD تعود جذورها إلى نحو 37 عامًا في مصادر BSD الأصلية. كان عداد إرفاق الذاكرة المشتركة معرّفًا كعدد قصير موقّع بسعة 16 بتًا. ويمكن لتكرار تفريع عملية تحمل سجلات إرفاق ذاكرة مشتركة أن يدفع هذا العداد إلى ما بعد حده الأقصى البالغ 32,767، فيلتف إلى قيمة سالبة. ويمكن لهذا الفيض الصحيح أن يؤدي إلى استخدام بعد التحرير عبر حالة سباق. وعند اقترانه بكتابة منفصلة خارج الحدود داخل النواة، سمح بتصعيد الامتيازات المحلية إلى الجذر. وقد عُولجت المشكلات في errata 026 و018.
وصف الباحثون مسار استغلال حقق صلاحيات الجذر المحلية على OpenBSD مع تفعيل KARL وSMAP وSMEP، دون استخدام ثغرة كشف معلومات. تضمنت الطريقة ربط 127 قطعة ذاكرة مشتركة من نوع System V وفك ربطها، وتفريع 259 عملية لجعل عداد الإرفاق يلتف. ثم استُخدم تهيئة الكومة وحالة السباق لمحاذاة التخصيصات، وإفساد بنية multicast، وصولًا إلى تنفيذ شيفرة في النواة عبر الكتابة فوق مؤشر نواة قابل للتنبؤ.
اعتمد الاستغلال على أداة كتابة من نوع write-what-where: جاءت الكتابة من عملية TAILQ_REMOVE، وكان الهدف ذاكرة userland جُعلت متاحة لوضع المشرف، وكان الموقع مؤشرًا قابلًا للتنبؤ داخل النواة. تقوم آلية KARL في OpenBSD بعشوائية عناوين الدوال والبيانات، لكن مخصصات الذاكرة في النواة تبقى حتمية، ما جعل بعض تخصيصات مرحلة الإقلاع المبكرة أهدافًا موثوقة.
ولتقليل خطر هجمات مشابهة، يقترح المؤلفون إجراءات مثل safe-unlinking، الذي يتحقق من ثوابت القوائم المرتبطة ثنائيًا قبل إجراء كتابات الفصل، ويوقف التنفيذ عبر abort أو panic إذا انتُهكت هذه الثوابت. وقالت Calif إنها تُبلغ بانتظام مشاريع المصادر المفتوحة عن الثغرات، وغالبًا مع اقتراح التصحيحات.
المصدر: Hacker News · لخّصه HeadlinesBriefing