ثغرة أمنية قابلة للاستغلال عن بعد في خادم بريد qmail

باحثون أمنيون من Qualys عرض فرصة التشغيل ثغرات أمنية في خادم البريد qmail معروف مرة أخرى في عام 2005 (CVE-2005-1513)، لكنها ظلت دون تصحيح لأن مؤلف qmail قال إنه من غير الواقعي إنشاء استغلال فعال يمكن استخدامه لمهاجمة الأنظمة في التكوين الافتراضي. تمكنت Qualys من إعداد استغلال يدحض هذا الافتراض ويسمح للشخص ببدء تنفيذ التعليمات البرمجية عن بعد على الخادم عن طريق إرسال رسالة مصممة خصيصًا.

سبب المشكلة هو تجاوز عدد صحيح في الدالة stralloc_readyplus()، والذي يمكن أن يحدث عند معالجة رسالة كبيرة جدًا. تتطلب العملية نظام 64 بت مع أكثر من 4 جيجابايت من الذاكرة الافتراضية. عندما تم تحليل الثغرة الأمنية في الأصل في عام 2005، جادل دانييل ج. بيرنشتاين بأن الافتراض الموجود في الكود بأن حجم المصفوفة المخصصة دائمًا ضمن قيمة 32 بت يعتمد على حقيقة أنه لا أحد يوفر غيغابايت من الذاكرة لكل عملية. على مدار الخمسة عشر عامًا الماضية، حلت أنظمة 15 بت على الخوادم محل أنظمة 64 بت، وزاد حجم الذاكرة المتوفرة وعرض النطاق الترددي للشبكة بشكل كبير.

أخذ مشرفو حزمة qmail ملاحظة برنشتاين في الاعتبار وحددوا الذاكرة المتوفرة عند بدء عملية qmail-smtpd (على سبيل المثال، في Debian 10 تم تعيين الحد على 7 ميجابايت). لكن المهندسين من Qualys وجدوا أن هذا لا يكفي، بالإضافة إلى qmail-smtpd، يمكن تنفيذ هجوم عن بعد على عملية qmail-local، والتي ظلت غير مقيدة في جميع الحزم التي تم اختبارها. وكدليل على ذلك، تم إعداد نموذج أولي للاستغلال كان مناسبًا لمهاجمة حزمة دبيان باستخدام qmail في التكوين الافتراضي.
لتنظيم تنفيذ التعليمات البرمجية عن بعد أثناء الهجوم، يتطلب الخادم 4 جيجابايت من مساحة القرص الحرة و8 جيجابايت من ذاكرة الوصول العشوائي.
يسمح لك هذا الاستغلال بتشغيل أي أوامر Shell مع حقوق أي مستخدم في النظام، باستثناء مستخدمي الجذر والنظام الذين ليس لديهم دليل فرعي خاص بهم في الدليل "/home" (يتم إطلاق عملية qmail-local مع الحقوق للمستخدم المحلي الذي يتم التسليم إليه).

يتم تنفيذ الهجوم
من خلال إرسال رسالة بريدية كبيرة جدًا، تتضمن عدة أسطر رأسية، بحجم 4 جيجابايت و576 ميجابايت تقريبًا. تؤدي معالجة مثل هذه السلسلة في qmail-local إلى تجاوز عدد صحيح عند محاولة تسليم رسالة إلى المستخدم المحلي. يؤدي تجاوز عدد صحيح بعد ذلك إلى تجاوز سعة المخزن المؤقت عند نسخ البيانات وإمكانية الكتابة فوق صفحات الذاكرة باستخدام كود libc. من خلال معالجة تخطيط البيانات المرسلة، من الممكن أيضًا إعادة كتابة عنوان الوظيفة "open()"، واستبداله بعنوان الوظيفة "system()".

بعد ذلك، أثناء عملية استدعاء qmesearch() في qmail-local، يتم فتح الملف ".qmail-extension" من خلال الدالة open()، مما يؤدي إلى التنفيذ الفعلي للوظيفة
النظام (".امتداد qmail"). ولكن بما أن الجزء "الملحق" من الملف يتم إنشاؤه بناءً على عنوان المستلم (على سبيل المثال، "localuser-extension@localdomain")، يمكن للمهاجمين الترتيب لإرسال الأمر للتشغيل عن طريق تحديد المستخدم "localuser-;command". ؛@localdomain" كمستلم للرسالة.

أثناء تحليل الكود، تم أيضًا تحديد اثنتين من نقاط الضعف في تصحيح التحقق الإضافي من qmail، والذي يعد جزءًا من الحزمة الخاصة بدبيان. الضعف الأول (CVE-2020-3811) يسمح لك بتجاوز التحقق من عنوان البريد الإلكتروني، والثاني (CVE-2020-3812) يؤدي إلى تسرب المعلومات المحلية. على وجه الخصوص، تتيح لك الثغرة الأمنية الأولى تجاوز التحقق من صحة العنوان المستخدم في الاستغلال لإرسال أمر (لا يعمل التحقق مع العناوين التي ليس لها مجال، مثل "localuser-;command;"). يمكن استخدام الثغرة الأمنية الثانية للتحقق من وجود الملفات والأدلة على النظام، بما في ذلك تلك التي يمكن الوصول إليها من خلال الجذر فقط (يعمل التحقق من qmail مع حقوق الجذر)، من خلال استدعاء مباشر للمعالج المحلي.

للتغلب على المشكلة، أوصى برنشتاين بتشغيل عمليات qmail بحد إجمالي للذاكرة المتوفرة ("softlimit -m12345678")، وفي هذه الحالة يتم حظر المشكلة. وكطريقة بديلة للحماية، تم أيضًا ذكر تحديد الحد الأقصى لحجم الرسالة المعالجة من خلال ملف "التحكم/وحدات بايت البيانات" (بشكل افتراضي، لا يتم إنشاؤه باستخدام الإعدادات الافتراضية، يظل qmail عرضة للخطر). بالإضافة إلى ذلك، لا يحمي "التحكم/وحدات بايت البيانات" من الهجمات المحلية من مستخدمي النظام، حيث يتم أخذ الحد في الاعتبار فقط بواسطة qmail-smtpd.

تؤثر المشكلة على الحزمة netqmail، المدرجة في مستودعات دبيان. تم إعداد مجموعة من التصحيحات لهذه الحزمة، مما أدى إلى إزالة الثغرات الأمنية القديمة من عام 2005 (عن طريق إضافة حدود الذاكرة الصلبة إلى رمز وظيفة alloc()) والمشاكل الجديدة في التحقق من qmail. بشكل منفصل معد الإصدار المحدث من تصحيح التحقق من qmail. المطورين الفروع com.notqmail أعدوا التصحيحات الخاصة بهم لمنع المشكلات القديمة، وبدأوا أيضًا العمل على إزالة جميع الأعداد الصحيحة الفائضة المحتملة في الكود.

المصدر: opennet.ru

إضافة تعليق