【墨菲安全实验室】Apache IoTDB grafana-connector模块SQL注入分析

简介: 【墨菲安全实验室】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,是上个月发布的新版本,对企业影响很小。

漏洞发现时间

2022-04-08

标题

iotdb 0.13.0 存在 SQL 注入漏洞

漏洞编号

MPS-2022-7877

发现方式

墨菲安全实验室情报预警监控

语言

java

影响组件及版本

org.apache.iotdb:iotdb-grafana-connector(影响版本:0.13.0 版本)

漏洞描述

iotdb 是针对时序数据的数据管理系统。

grafana-connector 中的 BasicDaoImpl.querySeriesInternal 存在拼接 sql 语句的情况,导致产生了 SQL 注入漏洞。

攻击者可利用该漏洞获取数据库中的敏感数据。

漏洞类型

SQL 注入漏洞

排查方式

获取 org.apache.iotdb:iotdb-grafana-connector 版本,判断其版本 = 0.13.0

处置建议

官方暂未发布新版本,但提供了修改补丁,参考链接:https://github.com/apache/iotdb/pull/5450/commits/

影响范围

漏洞级别

高危


漏洞时间线


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


漏洞分析


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

1.png

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

DatabaseConnectController.query --> DatabaseConnectController.setJsonTable / DatabaseConnectController.setJsonTimeseries --> DatabaseConnectServiceImpl.querySeries --> BasicDaoImpl.querySeries --> BasicDaoImpl.querySeriesInternal

1.png

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


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

1.png

1.png

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

1.png

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 参数。

1.png

该方法中将传入的 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
拥抱IoT浪潮,Apache IoTDB如何成为你的智能数据守护者?解锁物联网新纪元的数据管理秘籍!
【8月更文挑战第22天】随着物联网技术的发展,数据量激增对数据库提出新挑战。Apache IoTDB凭借其面向时间序列数据的设计,在IoT领域脱颖而出。相较于传统数据库,IoTDB采用树形数据模型高效管理实时数据,具备轻量级结构与高并发能力,并集成Hadoop/Spark支持复杂分析。在智能城市等场景下,IoTDB能处理如交通流量等数据,为决策提供支持。IoTDB还提供InfluxDB协议适配器简化迁移过程,并支持细致的权限管理确保数据安全。综上所述,IoTDB在IoT数据管理中展现出巨大潜力与竞争力。
552 1
|
SQL 安全 PHP
PHP开发中防止SQL注入的方法,包括使用参数化查询、对用户输入进行过滤和验证、使用安全的框架和库等,旨在帮助开发者有效应对SQL注入这一常见安全威胁,保障应用安全
本文深入探讨了PHP开发中防止SQL注入的方法,包括使用参数化查询、对用户输入进行过滤和验证、使用安全的框架和库等,旨在帮助开发者有效应对SQL注入这一常见安全威胁,保障应用安全。
811 4
|
存储 分布式计算 物联网
Apache IoTDB进行IoT相关开发实践
当今社会,物联网技术的发展带来了许多繁琐的挑战,尤其是在数据库管理系统领域,比如实时整合海量数据、处理流中的事件以及处理数据的安全性。例如,应用于智能城市的基于物联网的交通传感器可以实时生成大量的交通数据。据估计,未来5年,物联网设备的数量将达数万亿。物联网产生大量的数据,包括流数据、时间序列数据、RFID数据、传感数据等。要有效地管理这些数据,就需要使用数据库。数据库在充分处理物联网数据方面扮演着非常重要的角色。因此,适当的数据库与适当的平台同等重要。由于物联网在世界上不同的环境中运行,选择合适的数据库变得非常重要。 原创文字,IoTDB 社区可进行使用与传播 一、什么是IoTDB 我
593 9
Apache IoTDB进行IoT相关开发实践
|
数据处理 Apache 数据库
将 Python UDF 部署到 Apache IoTDB 的详细步骤与注意事项
【10月更文挑战第21天】将 Python UDF 部署到 Apache IoTDB 中需要一系列的步骤和注意事项。通过仔细的准备、正确的部署和测试,你可以成功地将自定义的 Python UDF 应用到 Apache IoTDB 中,为数据处理和分析提供更灵活和强大的支持。在实际操作过程中,要根据具体情况进行调整和优化,以确保实现最佳的效果。还可以结合具体的代码示例和实际部署经验,进一步深入了解和掌握这一过程。
245 2
|
存储 物联网 数据处理
如何使用 Apache IoTDB UDF
【10月更文挑战第21天】使用 Apache IoTDB 的 UDF 可以为用户提供更大的灵活性和扩展性,帮助用户更好地处理和分析物联网数据。通过合理编写和使用 UDF,用户可以充分发挥 IoTDB 的潜力,实现更复杂、更高效的数据处理和分析任务。
326 2
|
SQL 监控 安全
SQL Server的安全注意事项
将上述注意事项纳入日常的数据库管理中,有助于确保SQL Server数据库的安全稳定运行。除了遵循这些最佳实践外,定期进行安全审计也是确保环境持续安全的关键。
313 7
|
SQL 存储 安全
SQL安全深度剖析:守护数据安全的坚固防线
展望未来,随着技术的不断进步和攻击手段的不断翻新,SQL安全将面临更多的挑战。因此,我们需要持续关注SQL安全领域的最新动态和技术发展,并不断更新和完善我们的防护措施。同时,加强国际合作与信息共享也是提升全球SQL安全性的重要途径。让我们共同努力,为构建一个更加安全、可靠的数字化环境而奋斗。
|
存储 分布式计算 物联网
Apache IoTDB进行IoT相关开发实践
The article introduces IoTDB, an open-source time-series database designed for efficient management of IoT-generated data. It addresses challenges like real-time integration of massive datasets and security. IoTDB supports high-performance storage,
578 0
Apache IoTDB进行IoT相关开发实践
|
监控 安全 网络安全
如何保护 Apache 服务器的安全
【8月更文挑战第23天】
381 0
|
SQL 安全 Java
驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“The server selected protocol version TLS10 is not accepted by client
驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“The server selected protocol version TLS10 is not accepted by client
1699 0

推荐镜像

更多