The vulnerability is a deserialization issue within H2O's JDBC functionality, identified as CVE-2025-6544. The root cause is the improper validation of JDBC connection strings in the water.jdbc.SQLManager.validateJdbcUrl function. The original code did not account for URL-encoded characters in the connection string, allowing attackers to bypass a regular expression-based filter for dangerous JDBC parameters. By double or multiple URL-encoding the payload, an attacker could smuggle malicious parameters, leading to arbitrary file reads and potentially remote code execution.
The provided patch for commit 0298ee348f5c73673b7b542158081e79605f5f25 clearly shows the remediation. The validateJdbcUrl function was modified to include a loop that repeatedly decodes the jdbcUrl string until no more decoding is possible. This ensures that any nested URL-encoded characters are revealed before the validation checks are applied. The vulnerable function is therefore water.jdbc.SQLManager.validateJdbcUrl, as it was the entry point for the malicious input and contained the flawed validation logic. Any runtime profile during exploitation would show this function being called with the malicious, encoded JDBC string.