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

漏洞简述

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

发布者:墨菲安全,转发请注明出处:https://www.murphysec.com/blog/vulnerability-analysis/4151.html

(1)
CNVD-C-2022-163612
上一篇 2023年1月4日 17:27
下一篇 2023年1月4日 17:29

相关推荐

  • Ghost 博客系统后台代码执行漏洞分析

    漏洞简述 Ghost 是以Node.js语言开发的一款开源博客程序,在Github上其star为超过4万。 漏洞分析 漏洞因为需要后台权限,有一定利用条件,有趣的点在于Ghost的RCE漏洞是由于moment.js下的路径遍历和文件包含漏洞,再加上Ghost中的文件上传和指定locale功能。moment.js中的文件包含漏洞,在一般情况下可能影响较小,但结…

    2023年1月4日
  • CVE-2023-23752 Joomla未授权访问漏洞分析

    Joomla 在海外使用较多,是一套使用 PHP 和 MySQL 开发的开源、跨平台的内容管理系统(CMS)。Joomla 4.0.0 至 4.2.7 版本中的 ApiRouter.php#parseApiRoute 在处理用户的 Get 请求时为对请求参数有效过滤,导致攻击者可向 Joomla 服务端点发送包含 public=true 参数的请求

    2023年2月23日
  • Confluence WIKI OGNL注入漏洞(CVE-2022-26134)

    简述 6月4日,墨菲安全实验室监测发现Atlassian修复了Confluence Server 和 Confluence Data Center 中的OGNL注入漏洞。 Atlassian Confluence是企业常用的wiki系统,攻击者无需认证可利用漏洞在Confluence Server 或 Confluence Data Center 系统中执行…

    2023年1月4日
  • “Dirty Pipe”的故事-Linux 内核提权漏洞 (CVE-2022-0847)

    漏洞简述 3月7日,开发者 Max Kellermann 在他的博客(https://dirtypipe.cm4all.com/)中披露了一个能导致 Linux 权限提升的漏洞,编号为 CVE-2022-0847,他称之为 “The Dirty Pipe Vulnerability” (“脏管道”漏洞)。 Linux 5.10版本前的一次 commit 中,…

    2023年1月4日
  • Spring Cloud Gateway代码注入漏洞分析(CVE-2022-22947)

    漏洞简述 3月1日,VMware发布了针对Spring Cloud Gateway的漏洞通告(https://tanzu.vmware.com/security/cve-2022-22947),当actuator端点开启并对外暴露时,攻击者可以构造恶意请求实现远程任意代码执行。 Spring Cloud Gateway是Spring Cloud 生态中的AP…

    2023年1月4日

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-180-9568

邮件:hi@murphysec.com

工作时间:周一至周五,10:00-19:00,节假日休息

关注公众号

20230105-100741