CVE-2025-6544

9.8 CRITICAL

📋 TL;DR

A critical deserialization vulnerability in h2oai/h2o-3 allows attackers to bypass security checks using double URL encoding, enabling arbitrary file reading and remote code execution. All users running h2o-3 versions 3.46.0.8 and earlier are affected by this vulnerability.

💻 Affected Systems

Products:
  • h2oai/h2o-3
Versions: <= 3.46.0.8
Operating Systems: All platforms running Java
Default Config Vulnerable: ⚠️ Yes
Notes: All deployments using JDBC connections are vulnerable; no special configuration required

📦 What is this software?

⚠️ Risk & Real-World Impact

🔴

Worst Case

Full system compromise with attacker gaining root/system privileges, data exfiltration, and persistent backdoor installation

🟠

Likely Case

Arbitrary file reading leading to credential theft and subsequent lateral movement within the network

🟢

If Mitigated

Limited impact if network segmentation and strict access controls prevent exploitation attempts

🌐 Internet-Facing: HIGH - Directly exploitable over network without authentication
🏢 Internal Only: HIGH - Internal attackers or compromised systems can exploit this vulnerability

🎯 Exploit Status

Public PoC: ⚠️ Yes
Weaponized: LIKELY
Unauthenticated Exploit: ⚠️ Yes
Complexity: LOW

Exploit details available in public bounty reports; double URL encoding bypass makes exploitation straightforward

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: 3.46.0.9 or later

Vendor Advisory: https://github.com/h2oai/h2o-3/commit/0298ee348f5c73673b7b542158081e79605f5f25

Restart Required: Yes

Instructions:

1. Upgrade to h2o-3 version 3.46.0.9 or later. 2. Stop the h2o-3 service. 3. Replace the existing installation with patched version. 4. Restart the service.

🔧 Temporary Workarounds

Network Access Restriction

linux

Block external access to h2o-3 service ports

iptables -A INPUT -p tcp --dport [h2o-port] -j DROP
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="0.0.0.0/0" port port="[h2o-port]" protocol="tcp" reject'

JDBC Connection Disable

all

Disable JDBC functionality if not required

Set environment variable: export H2O_DISABLE_JDBC=true
Add to h2o config: -disable_jdbc

🧯 If You Can't Patch

  • Implement strict network segmentation to isolate h2o-3 instances from sensitive systems
  • Deploy WAF rules to detect and block double URL encoding patterns in JDBC connection requests

🔍 How to Verify

Check if Vulnerable:

Check h2o-3 version: if version <= 3.46.0.8, system is vulnerable

Check Version:

java -jar h2o.jar --version

Verify Fix Applied:

Confirm version is 3.46.0.9 or later and test JDBC connection with double-encoded payloads

📡 Detection & Monitoring

Log Indicators:

  • Multiple URL encoding patterns in JDBC connection strings
  • Unusual file access patterns from h2o process
  • Java deserialization errors in logs

Network Indicators:

  • HTTP requests with double-encoded %25 patterns to h2o endpoints
  • Unexpected outbound connections from h2o service

SIEM Query:

source="h2o.log" AND ("%25%25" OR "JDBC" OR "deserialization")

🔗 References

📤 Share & Export