Enumeration
Varredura Inicial com Nmap
Para iniciar a enumeração da máquina “Fanatastic”, foi realizada uma varredura completa de portas utilizando o nmap, com o objetivo de identificar todas as portas abertas.
nmap -T4 -p- -Pn 192.168.225.181 -oN nmap-all-ports.log -v
Uso do NmapAutomator
Em paralelo, utilizei a ferramenta NmapAutomator para agilizar o processo de varredura. O NmapAutomator é um script que automatiza diferentes tipos de varredura utilizando o nmap, facilitando a análise e coleta de informações da máquina.
nmapAutomator.sh -H 192.168.225.181 -t All -o nmapautomator.log
Encontrei as portas 22, 3000 e 9090 abertas. Sabemos que a porta 22 é usada para o SSH, então, como costumo fazer, decidi investigar as portas desconhecidas ou menos típicas, como as portas 3000 e 9090. Ao acessá-las via navegador, descobri que a porta 3000 estava rodando o Prometheus e a porta 9090 estava executando o Grafana.
Usando o Kali Linux e a ferramenta searchsploit, encontrei uma exploração que parecia promissora. A vulnerabilidade identificada foi:
Grafana 8.3.0 - Directory Traversal and Arbitrary File Read, conforme mostrado na imagem abaixo.
Isso indica que a versão do Grafana em execução na máquina possui uma vulnerabilidade que pode permitir a leitura de arquivos arbitrários através de uma exploração de “directory traversal”, potencialmente oferecendo acesso a arquivos sensíveis no sistema.
Exploitation
Usamos a opção -m no searchsploit para fazer o mirror do exploit encontrado.
Em seguida, executamos a exploração com o seguinte comando:
python3 50581.py -H http://192.168.225.181:3000
Conforme demonstrado na imagem acima, conseguimos ver claramente o arquivo passwd localizado no diretório /etc. Isso confirma que o exploit de Directory Traversal funcionou corretamente, permitindo o acesso a arquivos sensíveis do sistema, como o /etc/passwd, que contém informações sobre os usuários do sistema.
É possível, utilizando a exploração do Grafana, recuperar a senha do banco de dados em texto plano. O processo envolve os seguintes passos:
Primeiro, você precisa baixar o arquivo grafana.db usando o seguinte comando:
curl --path-as-is http://vulnerable.com:3000/public/plugins/alertlist/../../../../../../../../var/lib/grafana/grafana.db -o grafana.db
Lembre-se de que a senha está codificada dentro do grafana.db. Após extrair a senha do banco, basta inseri-la no código mencionado no repositório para decodificá-la e obter o acesso em texto plano.
Depois de baixar o banco de dados, você pode utilizar uma ferramenta específica para decodificá-lo, como a disponível neste repositório: Grafana-CVE-2021-43798.
Agora, usando o usuário que descobrimos após a leitura do arquivo /etc/passwd, realizamos o login via SSH utilizando a senha que acabamos de encontrar.
Esse acesso nos permite explorar a máquina com permissões do usuário e potencialmente escalar privilégios ou realizar outras ações dentro do sistema.
ssh sysadmin@192.168.225.181
SuperSecureP@ssw0rd
Privilege Escalation
Agora, usando o comando:
python3 -c 'import pty; pty.spawn("/bin/bash")'
podemos melhorar a interatividade da sessão SSH, obtendo um terminal mais completo. Isso permite utilizar funcionalidades como autocompletar, histórico de comandos e outros recursos normalmente disponíveis em um terminal bash interativo.
Usando o comando id, podemos ver que nosso usuário está no grupo disk, o que nos permite acessar diretamente dispositivos de armazenamento do sistema, como discos e partições. Isso pode abrir a possibilidade de ler ou manipular arquivos e dados sensíveis que estejam nesses dispositivos, aumentando significativamente as opções de exploração.
Usando o comando debugfs, podemos visualizar e manipular diretamente os sistemas de arquivos em uma partição específica. Isso nos permite acessar arquivos e diretórios mesmo que eles não sejam normalmente visíveis ou acessíveis, possibilitando a leitura de arquivos sensíveis ou a recuperação de dados deletados.
Podemos, então, tentar ler o arquivo id_rsa localizado na pasta /root/.ssh/. Caso consigamos, será possível utilizar essa chave privada para autenticar como root via SSH, garantindo acesso completo ao sistema.
Copie o conteúdo do arquivo id_rsa para um novo arquivo em sua máquina. Após isso, lembre-se de ajustar as permissões de leitura do arquivo para garantir a segurança, utilizando o comando:
chmod 600 id_rsa
Isso garante que o arquivo id_rsa tenha as permissões corretas, permitindo que apenas o proprietário o leia e evitando possíveis alertas de segurança ao utilizá-lo para se autenticar via SSH como root.
Mitigation
- Atualização de Software:
- Grafana: A exploração utilizada no cenário é baseada em uma vulnerabilidade conhecida (CVE-2021-43798). Para evitar a exploração desta e de futuras vulnerabilidades, mantenha o Grafana atualizado com a versão mais recente disponível. Isso garante que correções de segurança estejam aplicadas e diminui o risco de ataques conhecidos.
- SSH: Verifique se o servidor SSH está configurado para a versão mais recente e utilize as práticas recomendadas de segurança, como o desabilitar o login direto de root via SSH.
- Restrição de Acesso a Arquivos Sensíveis:
- Permissões de Arquivo: Reforce as permissões de arquivos críticos, como /etc/passwd e id_rsa. Somente usuários autorizados devem ter acesso a essas informações sensíveis. Use chmod 600 para restringir o acesso a chaves privadas SSH e proteja os diretórios críticos com permissões adequadas.
- Desabilitar acesso ao grupo “disk”: O grupo disk deve ser reservado apenas para processos que realmente necessitam de acesso a dispositivos de armazenamento. Remova usuários desnecessários desse grupo para evitar o acesso não autorizado a dispositivos de disco.
- Controle de Acesso SSH:
- Autenticação SSH: Configure o SSH para não permitir o login de root diretamente, ajustando o arquivo
/etc/ssh/sshd_configcom a diretivaPermitRootLogin no. Isso forçará os usuários a logarem com contas de usuário limitadas e, posteriormente, escalarem privilégios usandosudoou outro mecanismo controlado. - Autenticação por chave: Utilize autenticação por chave SSH sempre que possível, e implemente autenticação de dois fatores (2FA) para aumentar a segurança.
- Autenticação SSH: Configure o SSH para não permitir o login de root diretamente, ajustando o arquivo
- Isolamento de Serviços:
- Segregação de Serviços: Utilize contêineres, como Docker, ou máquinas virtuais para isolar serviços como Grafana e Prometheus. O isolamento dificulta o impacto de uma exploração bem-sucedida, limitando o acesso a outros serviços no sistema.
- Controle de Acesso à Rede: Implemente regras de firewall para limitar o acesso às portas usadas pelos serviços, como as portas 3000 (Prometheus) e 9090 (Grafana). Apenas IPs autorizados devem ter acesso direto a esses serviços.
- Monitoramento e Logs:
- Monitoramento de Logs: Use ferramentas como Wazuh ou Splunk para monitorar logs do sistema em tempo real. Isso permite a detecção de atividades anômalas, como tentativas de acessar arquivos sensíveis ou uso indevido do SSH. Configure alertas automáticos para quando atividades suspeitas forem detectadas.
- Auditoria de Comandos: Ative a auditoria de comandos e sessões para identificar tentativas de exploração de vulnerabilidades ou acessos indevidos ao sistema.
- Proteção de Banco de Dados:
- Proteção do Banco de Dados: O banco de dados grafana.db deve ser protegido com permissões rigorosas de leitura e escrita, permitindo acesso apenas aos processos necessários. Considere utilizar criptografia no banco de dados para dificultar o acesso não autorizado a credenciais e outras informações sensíveis.
- Rotação e Hashing de Senhas:
- Senhas: Realize a rotação periódica de senhas de serviços e usuários do sistema, especialmente após qualquer suspeita de comprometimento. Garanta também que as senhas estejam armazenadas utilizando hashing seguro (como bcrypt ou argon2) para minimizar o impacto caso credenciais sejam expostas.
Ao aplicar essas medidas de mitigação, a superfície de ataque é significativamente reduzida, protegendo o sistema contra vulnerabilidades exploradas no contexto descrito.
Ref
-
HackTricks - Grafana Pentesting
https://book.hacktricks.xyz/network-services-pentesting/pentesting-web/grafana
Esta referência detalha as técnicas de pentest em ambientes que utilizam Grafana, abordando vulnerabilidades e métodos de exploração comuns. -
Exploit Notes - Grafana Pentesting
https://exploit-notes.hdks.org/exploit/web/grafana-pentesting/
Um guia prático para identificar e explorar vulnerabilidades em instalações de Grafana, oferecendo insights valiosos para testadores de penetração.