H2O-3 JDBC反序列化漏洞CVE-2025-6544
H2O-3 是一个内存中、分布式、可扩展的机器学习和预测分析平台,提供了广泛的算法,包括分类、回归、聚类、异常检测和深度学习等。
一、基本情况
H2O-3 能够在大数据环境下高效运行,平台支持多种编程接口,如 Python、R、Scala 和 Java,同时与 Spark、Hadoop 等生态系统兼容。

H2O-3是H2O.ai开发的开源分布式机器学习平台,支持大规模数据处理与建模,具有自动调整超参数、直观 Web 界面(Flow UI)等特点。
栋科技漏洞库关注到H2O-3受影响版本中存在一个反序列化漏洞,该漏洞现在已经被追踪为CVE-2025-6544,漏洞的CVSS 3.X评分为9.8。
二、漏洞分析
CVE-2025-6544漏洞是存在于H2O-3版本低于3.46.0.8中的一个严重的安全漏洞,攻击者可利用该漏洞读取任意系统文件并执行任意代码。
该漏洞源于JDBC连接参数处理不当,可以通过绕过正则表达式检查并使用双重URL编码进行利用,且该漏洞影响所有受影响版本的用户。
攻击者可构造特殊的JDBC connection_url绕过参数匹配与补丁校验注入可控JDBC参数,与伪造的MySQL服务交互实现任意系统文件读取。
因此,攻击者利用该漏洞读取任意系统文件,甚至通过反序列化执行任意代码,进一步结合可触发的反序列化链,则可导致远程代码执行。
相关漏洞代码包括但不限于此:

c final Pattern JDBC_PARAMETERS_REGEX_PATTERN = Pattern.compile("(?i)[?;&]([a-z]+)=");
+ private static final Pattern JDBC_PARAMETERS_REGEX_PATTERN = Pattern.compile("(?i)([a-z0-9_]+)\\s*=\\s*");
刚才,通过在参数前添加空格绕过了常规匹配。新补丁在此处添加了\\s*,它可以匹配任何空格字符,从而修复了漏洞。
但根据mysql驱动程序的特点
在com.mysql.cj.conf.ConnectionUrlParser#processKeyValuePattern中
private Map<String, String> processKeyValuePattern(Pattern pattern, String input) {
Matcher matcher = pattern.matcher(input);
int p = 0;
HashMap kvMap;
for(kvMap = new HashMap(); matcher.find(); p = matcher.end()) {
if (matcher.start() != p) {
throw (WrongArgumentException)ExceptionFactory.createException(WrongArgumentException.class, Messages.getString("ConnectionString.4", new Object[]{input.substring(p)}));
}
String key = decode(StringUtils.safeTrim(matcher.group("key")));
String value = decode(StringUtils.safeTrim(matcher.group("value")));
if (!StringUtils.isNullOrEmpty(key)) {
kvMap.put(key, value);
} else if (!StringUtils.isNullOrEmpty(value)) {
throw (WrongArgumentException)ExceptionFactory.createException(WrongArgumentException.class, Messages.getString("ConnectionString.4", new Object[]{input.substring(p)}));
}
}
if (p != input.length()) {
throw (WrongArgumentException)ExceptionFactory.createException(WrongArgumentException.class, Messages.getString("ConnectionString.4", new Object[]{input.substring(p)}));
} else {
return kvMap;
}
}
在这里获取JDBC密钥和值后,将执行urldecode,因此我们只需要对密钥进行双URL编码即可绕过它。
三、POC概念验证
1、使用如下概念验证代码
管理员已设置登录后刷新可查看
管理员已设置登录后刷新可查看2、使用伪造的MysqlServer成功读取文件

3、使用以下PoC来利用反序列化
管理员已设置登录后刷新可查看四、影响范围
h2oai/h2o-3 <= 3.46.0.8
五、修复建议
H2O-3 >= 3.46.0.8
六、参考链接
管理员已设置登录后刷新可查看