| ثغرة في كيرنل لينكس 2.6.30 تعطي المستخدم صلاحيّات جذر |
| الكاتب بشار |
| الجمعة, 17 يوليو 2009 15:50 |
|
انتشر كود يستغل ثغرة في كيرنل لينكس 2.6.30 تسمح للمستخدم بتخطي الصلاحيات المحددة له والحصول على صلاحيّات جذر حتى في حال وجود SELinux , LSM , AppArmor. المثير في هذه الثغرة أنّ الكود لا يظهر أي خطأ ولا يمكن اكتشافها إلّا بعد عمل تجميع (Compile) للكود المصدري لكيرنل لينكس!
الكود الذي يحتوي الثغرة موجود في تطبيق /dev/net/tun. struct sock *sk = tun->sk; // initialize sk with tun->sk… if (!tun) return POLLERR; // if tun is NULL return error المطور في الكود أعلاه قام بتهيئة المتغير sk لقيمة يمكن أن تكون NULL. ثم يقوم بفحص القيمة بعد ذلك بعدّة أسطر فإذا كانت 0 (NULL) سوف يقوم بإرجاع خطأ. هذا الكود سوف يظهر صحيح... ولكن حين يبدأ المجمع بالعمل سيرى أن المتغير قد تمّ تهيئته وبالتالي فهو لا يقرأ الجملة الشرطيّة بل سيزيلها من الكود الناتج. بعبارة أخرى المجمع هو من يقوم بخلق هذه الثغرة والتي ليس لها وجود في كود المصدر. هذا سيجعل الكيرنل تقوم بمحاولة قراءة/كنابة من 0x00000000 والذي من خلاله يمكن للمهاجم نقله لأرضية المستخدم ومن ثمّ السيطرة على النّظام.
فيديو يوضّح تنفيذ الثغرة:
الحل لهذه الثغرة سهل نسبيّاً حيث يمكن تعديل الكود و وضع الجملة الشرطية قبل اعطاء القيمة لـ sk.
للاطلاع على ترقيع الثغرة: Kernel patchwork عن الكاتب:
التعليقات (1)
![]() أضف تعليق
يجب عليك الاشتراك بالموقع لتتمكن من كتابة التعليقات, الاشتراك مجاني ويستغرق بضع ثوان فقط!
اذا كنت مشترك مسبقا في الموقع فضلاً قم بتسجيل الدخول. |









لكن الثغرة ليست في نواة لينوكس بل يسببها تحسين (optimization) في المصنف gcc أثناء بناء النواة، حيث أن بعض التوزيعات لم تصب بالثغرة
بالتوفيق