ثغرات أمنية في OpenBSD تسمح بتصعيد الامتيازات وتجاوز المصادقة في smtpd وldapd وradiusd

شركة كواليس مكشوف أربعة نقاط الضعف في OpenBSD، يسمح لك أحدها بالاتصال عن بعد دون مصادقة ببعض خدمات الشبكة، والثلاثة الأخرى لزيادة امتيازاتها في النظام. أشار تقرير Qualys إلى الاستجابة السريعة لمطوري OpenBSD - حيث كانت جميع المشاكل موجودة اقصاء в OpenBSD 6.5 تحديث и OpenBSD 6.6 تحديث في غضون 40 ساعة بعد الإشعار الخاص.

سبب الثغرة الأمنية القابلة للاستغلال عن بعد هو حدوث خطأ في ترتيب استدعاء معالج المصادقة في مكتبة libc، والذي يستدعي
/usr/libexec/auth/login_style يقوم البرنامج بتمرير الوسائط في سطر الأوامر. بما في ذلك عند الاتصال بـlogin_style باستخدام المعلمة الاختيارية "-s Service"، يُسمح بتمرير اسم البروتوكول. إذا تم استخدام الحرف "-" في بداية اسم المستخدم، فسيتم التعامل مع هذا الاسم كخيار عند تشغيل سجل الدخول. وبناءً على ذلك، إذا قمت بتحديد "-schallenge" أو "-schallenge: passwd" كاسم مستخدم أثناء المصادقة، فسوف ينظر login_style إلى الطلب على أنه طلب لاستخدام المعالج س/مفتاح.

تكمن المشكلة في أن بروتوكول S/Key في login_style مدعوم رسميًا فقط، ولكن يتم تجاهله فعليًا مع إخراج علامة المصادقة الناجحة. وبالتالي، يمكن للمهاجم أن يتظاهر بأنه مستخدم "-schallenge" ويتجاوز المصادقة ويتمكن من الوصول دون تحديد كلمة مرور أو مفاتيح. من المحتمل أن تتأثر كافة خدمات الشبكة التي تستخدم استدعاءات libc العادية للمصادقة بالمشكلة. على سبيل المثال، يتم تأكيد القدرة على تجاوز المصادقة في smtpd (AUTH PLAIN)، وldapd، وradiusd.

لا تظهر الثغرة الأمنية في sshd، حيث أنها تتمتع بحماية إضافية من خلال التحقق من وجود المستخدم في النظام. ومع ذلك، يمكن استخدام sshd لاختبار ما إذا كان النظام عرضة لثغرة أمنية - عند الوصول إلى اسم المستخدم "-sresponse:passwd"، يتوقف الاتصال، حيث ينتظر sshd تسجيل الدخول_passwd لإرجاع معلمات الاستدعاء (التحدي)، وlogin_passwd ينتظر نقل المعلمات المفقودة (يتم أخذ الاسم "- sresponse" كخيار). قد يحاول مهاجم محلي محتمل تجاوز المصادقة في الأداة المساعدة su، لكن تمرير الاسم "-sresponse" يؤدي إلى تعطل العملية بسبب عودة مؤشر فارغ عند تنفيذ وظيفة getpwnam_r("-schallenge, ...) .

نقاط الضعف الأخرى:

  • CVE-2019-19520 - تصعيد الامتياز المحلي من خلال معالجة الأداة المساعدة xlock التي تأتي مع علامة sgid التي تغير المجموعة إلى "auth". في كود xlock، يُحظر إعادة تعريف مسارات المكتبة فقط عند تغيير معرف المستخدم (setuid)، مما يسمح للمهاجم بتغيير متغير البيئة "LIBGL_DRIVERS_PATH" وتنظيم تحميل مكتبته المشتركة، والتي سيتم تنفيذ الكود الخاص بها بعد تصعيد الامتياز إلى مجموعة "المصادقة".
  • CVE-2019-19522 - يسمح لمستخدم محلي في مجموعة "auth" بتشغيل التعليمات البرمجية كجذر عند تمكين مصادقة S/Key أو YubiKey في النظام (غير ممكّنة افتراضيًا). كونك عضوًا في مجموعة "auth"، والتي يمكن الوصول إليها عن طريق استغلال ثغرة xlock المذكورة أعلاه، يسمح بكتابة الملفات إلى المجلدين /etc/skey و/var/db/yubikey. على سبيل المثال، يمكن للمهاجم إضافة ملف /etc/skey/root جديد لإنشاء مفاتيح لمرة واحدة لمصادقة الجذر عبر S/Key.
  • CVE-2019-19519 - إمكانية زيادة حدود الموارد من خلال المعالجة باستخدام الأداة المساعدة su. عند تحديد الخيار "-L"، والذي يعني التكرار الدوري لمحاولات المصادقة في حالة الفشل، يتم تعيين فئة المستخدم مرة واحدة فقط ولا تتم إعادة تعيينها في المحاولات اللاحقة. يمكن للمهاجم تنفيذ "su -l -L" في المحاولة الأولى لإدخال تسجيل دخول شخص آخر باستخدام فئة حساب مختلفة، ولكن في المحاولة الثانية يتم المصادقة بنجاح تحت نفسه. في هذه الحالة، سيتم تعيين حدود للمستخدم تتوافق مع فئة المستخدم المحددة في المحاولة الأولى (على سبيل المثال، الحد الأقصى لعدد العمليات أو حجم الذاكرة للعملية). تعمل الطريقة فقط مع حدود الاقتراض من المستخدمين غير المميزين، حيث يجب أن يكون المستخدم الجذر في مجموعة العجلة).

بالإضافة إلى ذلك ، يمكن ملاحظته تطبيق في OpenBSD طريقة جديدة للتحقق من صحة استدعاءات النظام، مما يزيد من تعقيد استغلال الثغرات الأمنية. تسمح هذه الطريقة بتنفيذ مكالمات النظام فقط إذا تم الوصول إليها من مناطق الذاكرة المسجلة مسبقًا. لتحديد مناطق الذاكرة مقترح استدعاء النظام الجديد مسيسكال ().

المصدر: opennet.ru