Apache IoTDB grafana-connector模块SQL注入分析

admin 2025年2月16日00:40:24评论5 views字数 2259阅读7分31秒阅读模式

漏洞简述

Apache IoTDB 是面向IoT场景存储时序数据的数据管理系统,具备跟Grafana、spark等系统的集成能力。

4月8日,IoTDB 修复了其中 grafana-connector 模块中的 SQL 注入漏洞。

由于 grafana-connector 模块中 BasicDaoImpl 类的 querySeriesInternal 方法存在拼接 SQL 语句,导致攻击者可以构造请求实现 SQL 注入。该漏洞受影响版本为 0.13.0,是上个月发布的新版本,对企业影响很小。

漏洞时间线

  • 4月8日,IoTDB的开发者表示在 grafana-connector 模块中存在 SQL 注入风险,8 小时后修复了该漏洞。

漏洞分析

从漏洞修复的 commit 确定漏洞点,querySeriesInternal 方法将 String s 的内容拼接到 sql 语句中。

Apache IoTDB grafana-connector模块SQL注入分析

通过 querySeriesInternal 向上溯源寻找漏洞触发点,可以确定调用逻辑

DatabaseConnectController.query --> DatabaseConnectController.setJsonTable / DatabaseConnectController.setJsonTimeseries --> DatabaseConnectServiceImpl.querySeries --> BasicDaoImpl.querySeries --> BasicDaoImpl.querySeriesInternal
Apache IoTDB grafana-connector模块SQL注入分析

从上图确定触发点是 query 方法,注入需要寻找 “/query” 的请求体结构。

@RequestBody 作用是接收前端传递给后端的 json 字符串中数据,所以 query 方法的参数需要是 json 字符串。该方法对 json 请求体进行解析。

Apache IoTDB grafana-connector模块SQL注入分析
Apache IoTDB grafana-connector模块SQL注入分析

104行 getTimeFromAndTo 方法,json 字符串需要有 range 参数,range 内部需要有 from 和 to 两个参数,且为 Instant 类型。

Apache IoTDB grafana-connector模块SQL注入分析

105行得知 json 有 targets 参数,107行知道 targets 参数是列表结构,114和115行得知列表每项有 type 和 target 参数,且 type 是 “table”和“timeserie”其中之一,故能导致 sql 注入的结构是

{"targets": [{"target": "payload","type": "table / timeserie"}],"range": {"from": "2022-04-08T18:35:24.00Z","to": "2022-04-08T18:36:24.00Z"}}

传入拼接 SQL 的参数是 target,接着从上文提到的调用逻辑寻找,target 参数直接传入 BasicDaoImpl.querySeriesInternal 的 s 参数。

Apache IoTDB grafana-connector模块SQL注入分析

该方法中将传入的 target 参数(即 s )以最后一个“.”分割,拼接到 SQL 语句中。

该漏洞出现的原因是使用 SQL 语句的拼接,这是 SQL 注入最常出现的原因。

从使用场景来看是期望通过输入查询字段和表名来查询对应数据,针对这类场景需要限制输入的字段和表名为相应的白名单内容。

漏洞验证

当以如下json请求query接口时

{"targets": [{"target": "SLOT1.SLOT2","type": "table"}], "range": {"from": "1970-01-01T00:00:00.150Z", "to": "1970-01-01T00:00:00.400Z"}}

sql会被拼接为

SELECT SLOT2 FROM root.SLOT1 WHERE time > 150 and time < 400

但在利用上,由于调用jdbcTemplate.query(sql, new TimeValuesRowMapper(columnName)),会限制只能执行select语法,而不能有select into等数据修改的逻辑,也无法堆叠语句,存在一定的限制。

参考链接

https://github.com/apache/iotdb/pull/5450/commits/93402c5f91ec2d8c44f9a2c3d79858b7e3454816

https://github.com/apache/iotdb/pull/5450

https://issues.apache.org/jira/browse/IOTDB-2862

https://iotdb.apache.org/UserGuide/Master/QuickStart/QuickStart.html

【关于墨菲安全

墨菲安全是一家为您提供专业的软件供应链安全管理的科技公司,能力包括代码安全检测、开源组件许可证合规管理、云原生容器安全检测、软件成分分析(SCA)等,丰富的安全工具助您打造完备的软件开发安全能力(DevSecOps)。产品支持SaaS、私有化部署。公司核心团队来自百度、华为等企业,拥有超过十年的企业安全建设、安全产品研发及安全攻防经验。

产品官网:

https://murphysec.com

IDE插件:

欢迎在Jetbrains IDE插件市场搜索 murphysec 安装检测插件,一键检测一键修复~

【关于墨菲安全实验室】

墨菲安全实验室是墨菲未来科技旗下的安全研究团队,专注于软件供应链安全相关领域的技术研究,关注的方向包括:开源软件安全、程序分析、威胁情报分析、企业安全治理等。

Apache IoTDB grafana-connector模块SQL注入分析
Apache IoTDB grafana-connector模块SQL注入分析

原文始发于微信公众号(墨菲安全实验室):Apache IoTDB grafana-connector模块SQL注入分析

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

发表评论

匿名网友 填写信息