نقاط الضعف في نظام eBPF الفرعي الذي يسمح بتنفيذ التعليمات البرمجية على مستوى Linux kernel

تم التعرف على اثنتين من نقاط الضعف الجديدة في النظام الفرعي eBPF، والذي يسمح لك بتشغيل معالجات داخل Linux kernel في جهاز افتراضي خاص باستخدام JIT. تتيح كلا الثغرات الأمنية تنفيذ التعليمات البرمجية الخاصة بك باستخدام حقوق kernel، خارج جهاز eBPF الظاهري المعزول. تم نشر معلومات حول المشكلات من قبل فريق مبادرة Zero Day، الذي يدير مسابقة Pwn2Own، والتي تم خلالها هذا العام إثبات ثلاث هجمات على Ubuntu Linux استخدمت ثغرات أمنية غير معروفة سابقًا (لم يتم الإبلاغ عما إذا كانت الثغرات الأمنية في eBPF مرتبطة بهذه الهجمات). .

  • CVE-2021-3490 - سبب الثغرة الأمنية هو عدم وجود فحص خارج الحدود 32 بت عند إجراء عمليات bitwise AND وOR وXOR في eBPF ALU32. يمكن للمهاجم الاستفادة من هذا الخطأ لقراءة البيانات وكتابتها خارج حدود المخزن المؤقت المخصص. تظهر مشكلة عمليات XOR بدءًا من إصدار النواة 5.7-rc1، وAND وOR - بدءًا من 5.10-rc1.
  • CVE-2021-3489 - سبب الثغرة الأمنية هو خطأ في تنفيذ المخزن المؤقت الحلقي ويرجع ذلك إلى حقيقة أن وظيفة bpf_ringbuf_reserve لم تتحقق من احتمال أن يكون حجم منطقة الذاكرة المخصصة أقل من الحجم الفعلي من Ringbuf. ظهرت المشكلة منذ الإصدار 5.8-rc1.

يمكن تتبع حالة تصحيح الثغرات الأمنية في التوزيعات على هذه الصفحات: Ubuntu، وDebian، وRHEL، وFedora، وSUSE، وArch). تتوفر الإصلاحات أيضًا كتصحيحات (CVE-2021-3489، CVE-2021-3490). تعتمد إمكانية استغلال المشكلة على ما إذا كان يمكن للمستخدم الوصول إلى استدعاء نظام eBPF. على سبيل المثال، في التكوين الافتراضي في RHEL، يتطلب استغلال الثغرة الأمنية أن يكون لدى المستخدم حقوق CAP_SYS_ADMIN.

بشكل منفصل، يمكننا ملاحظة ثغرة أمنية أخرى في Linux kernel - CVE-2021-32606، والتي تسمح للمستخدم المحلي برفع امتيازاته إلى مستوى الجذر. لقد ظهرت المشكلة منذ الإصدار 5.11 من Linux kernel وسببها حالة سباق في تنفيذ بروتوكول CAN ISOTP، مما يجعل من الممكن تغيير معلمات ربط المقبس بسبب عدم ضبط الأقفال المناسبة في الدالة isotp_setsockopt() عند معالجة علامة CAN_ISOTP_SF_BROADCAST.

بعد إغلاق مأخذ توصيل ISOTP، يظل الارتباط بمقبس المستلم ساري المفعول، والذي يمكنه الاستمرار في استخدام الهياكل المرتبطة بالمقبس بعد تحرير الذاكرة المرتبطة به (الاستخدام بعد الاستخدام بسبب استدعاء بنية isotp_sock التي تم تحريرها بالفعل عند استدعاء isotp_rcv()). من خلال معالجة البيانات، يمكنك تجاوز المؤشر إلى الدالة sk_error_report() وتنفيذ التعليمات البرمجية الخاصة بك على مستوى kernel.

المصدر: opennet.ru

إضافة تعليق