ثغرة أمنية في php-fpm تسمح بتنفيذ التعليمات البرمجية عن بُعد على الخادم

متاح الإصدارات التصحيحية لـ PHP 7.3.11 و7.1.33 و7.2.24، والتي مستبعد حرج عالي التأثر (CVE-2019-11043) في ملحق PHP-FPM (FastCGI Process Manager)، والذي يسمح لك بتنفيذ التعليمات البرمجية الخاصة بك على النظام عن بعد. لمهاجمة الخوادم التي تستخدم PHP-FPM مع Nginx لتشغيل نصوص PHP، فهي متاحة للعامة بالفعل عامل يستغل.

الهجوم ممكن في تكوينات nginx التي يتم فيها إعادة التوجيه إلى PHP-FPM عن طريق فصل أجزاء من عنوان URL باستخدام "fastcgi_split_path_info" وتحديد متغير البيئة PATH_INFO، ولكن دون التحقق أولاً من وجود الملف باستخدام "try_files $ fastcgi_script_name" التوجيه أو "if (!-f $) document_root$fastcgi_script_name)". المشكلة هي أيضا يتجلى في الإعدادات المتوفرة لمنصة NextCloud. على سبيل المثال، التكوينات ذات الهياكل مثل:

الموقع ~ [^ /] \. php (/ | $) {
fastcgi_split_path_info ^ (. +؟ \. php) (/.*) $؛
fastcgi_param PATH_INFO $ fastcgi_path_info;
fastcgi_pass PHP:9000;
}

يمكنك تتبع حل المشكلة في مجموعات التوزيع على هذه الصفحات: ديبيان, RHEL, أوبونتو, SUSE / openSUSE, فري, قوس, فيدورا. كحل بديل، يمكنك إضافة التحقق من وجود ملف PHP المطلوب بعد السطر "fastcgi_split_path_info":

Try_files $fastcgi_script_name =404;

سبب المشكلة هو حدوث خطأ عند معالجة المؤشرات في الملف sapi/fpm/fpm/fpm_main.c. عند تعيين مؤشر، من المفترض أن قيمة متغير البيئة PATH_INFO يجب أن تحتوي على بادئة تطابق المسار إلى البرنامج النصي PHP.
إذا كان التوجيه fastcgi_split_path_info يحدد تقسيم مسار البرنامج النصي باستخدام تعبير عادي حساس للسطر الجديد (على سبيل المثال، تقترح العديد من الأمثلة استخدام "^(.+?\.php)(/.*)$")، فيمكن للمهاجم التأكد من أن تتم كتابة القيمة الفارغة إلى متغير البيئة PATH_INFO. في هذه الحالة، مزيد من التنفيذ هو كتابة path_info[0] إلى الصفر واستدعاء FCGI_PUTENV.

من خلال طلب عنوان URL منسق بطريقة معينة، يمكن للمهاجم تحقيق إزاحة مؤشر path_info إلى البايت الأول من بنية “_fcgi_data_seg”، وستؤدي كتابة صفر إلى هذا البايت إلى حركة “char* pos” المؤشر إلى منطقة الذاكرة الموجودة مسبقًا. سيقوم التالي المسمى FCGI_PUTENV بالكتابة فوق البيانات الموجودة في هذه الذاكرة بقيمة يمكن للمهاجم التحكم فيها. تقوم الذاكرة المحددة أيضًا بتخزين قيم متغيرات FastCGI الأخرى، ومن خلال كتابة بياناتها، يمكن للمهاجم إنشاء متغير PHP_VALUE وهمي وتحقيق تنفيذ التعليمات البرمجية الخاصة به.

المصدر: opennet.ru

إضافة تعليق