
Escáner de Grafana con todos los CVEs públicos que recopilé en un solo script para facilitar las pruebas de Grafana
Un escáner de vulnerabilidades de línea de comandos para Grafana. Obtiene la huella de la versión instalada de Grafana, ejecuta un conjunto de comprobaciones de CVE adaptadas a la versión, audita debilidades de configuración comunes, almacena los resultados en una base de datos local y puede servirlos a través de un pequeño panel web.
Esta herramienta envía solicitudes a instancias de Grafana y, para algunas comprobaciones, intenta rutas de explotación conocidas (path traversal, inyección SQL, SSRF). Ejecútela solo contra sistemas de su propiedad o para los que tenga permiso por escrito para realizar pruebas. El escaneo no autorizado puede violar las leyes de uso indebido de sistemas informáticos en su jurisdicción.
requestsflask (solo necesario para --serve)pip install -r requirements.txt
# Scan a single target
python scanner.py -u https://grafana.example.com
# Scan a list of URLs from a file
python scanner.py -f targets.txt -o report
# Detect Grafana instances in a mixed URL list, then scan them
python scanner.py --auto-search urls.txt -o discovery
# Persist results to a database and view them in the dashboard
python scanner.py -f targets.txt --db vulndb.json
python scanner.py --serve --db vulndb.json
| Opción | Descripción |
|---|---|
-u, --url | Escanea una única URL objetivo |
-f, --file | Escanea objetivos listados uno por línea en un archivo |
--auto-search FILE | Detecta Grafana en una lista de URL, luego escanea las instancias detectadas |
-o, --output BASE | Nombre base para archivos de informe JSON/HTML/CSV |
--timeout N | Tiempo de espera por solicitud en segundos (por defecto 10) |
--threads N | Hilos de escaneo concurrentes (por defecto 5) |
--db FILE | Habilita la base de datos de vulnerabilidades JSON en la ruta indicada |
--serve [PORT] | Inicia el panel web Flask (puerto por defecto 8080) |
--host | Dirección a la que se vincula el panel (por defecto 127.0.0.1) |
--dashboard-token TOKEN | Solicita este token Bearer en todas las rutas del panel |
--auth-token | Token Bearer para escanear endpoints autenticados |
--auth-user / --auth-pass | Autenticación básica para escanear |
--no-ssl-verify | Deshabilita la verificación del certificado TLS (imprime una advertencia) |
-v, --verbose | Imprime detalles por comprobación |
--no-banner | Suprime el encabezado de inicio |
--no-ssl-verify solo para hosts internos con certificados autofirmados; hacerlo imprime una advertencia porque las credenciales podrían quedar expuestas a intercepción.--dashboard-token. Cuando el panel está vinculado a una interfaz no local, debe establecer un token. Todas las solicitudes que cambian el estado también requieren un token CSRF.Con -o, el escáner escribe BASE.json, BASE.html y BASE.csv. El informe HTML neutraliza las URIs javascript:/data:/vbscript: que podrían provenir de una respuesta maliciosa del objetivo.
Con --db, los hallazgos se almacenan en un archivo JSON que se escribe atómicamente: se conserva una copia .bak del estado anterior, y un archivo que no se pueda analizar se mueve a .corrupt-<marca de tiempo> en lugar de descartarse silenciosamente.
El escáner ejecuta comprobaciones de CVE adaptadas a la versión más auditorías de configuración (encabezados de seguridad, CORS, acceso anónimo, autorregistro, análisis de plugins, métricas expuestas). La lista completa de CVE y notas sobre el método de detección se encuentran en docs/vulnerabilities.md.
scanner.py — motor, comprobaciones, base de datos, panel web, CLIdocs/usage.md — modos de escaneo y flujos de trabajodocs/vulnerabilities.md — referencia de CVEdocs/architecture.md — estructura interna y flujo de datostests/ — conjunto de pruebasmake test # run the test suite
make lint # ruff + flake8
El pipeline de CI ejecuta las pruebas y los linters en Python 3.9–3.12 y construye la imagen Docker.
MIT. Consulte LICENSE.