CVE-2026-111440: JDBC LogFactory 任意类加载/构造导致潜在 RCE
在 openGauss-connector-jdbc 的 pgjdbc/src/main/java/org/postgresql/log/LogFactory.java 中,LogFactory 根据 JDBC 连接参数中的 logger 类名调用 Class.forName 加载类后,直接反射调用以 String 为参数的构造函数,再转换为 Log。缺少 asSubclass(Log.class) 校验,非 Log 实现类也会在类型检查前被实例化。因此,当攻击者可控制 JDBC URL 或连接属性中的 logger 类名,且客户端 classpath 中存在可被加载的类时,可能在客户端触发非预期的类加载与构造副作用。
此漏洞自 JDBC 1.1.0引入,影响 1.1.0 及之后的 2.x、3.x、5.x、6.x 各版本及补丁(含 6.0.0 分支最新 6.0.6),以及 7.0.0-RC1、7.0.0-RC2、7.0.0-RC3,并在 7.0.0-LTS 版本修复。修复在 Class.forName 之后先执行 asSubclass(Log.class),仅允许 Log 子类进入构造。修复pr见https://gitcode.com/opengauss/openGauss-connector-jdbc/pull/423。
Affected Software
Event History
Frequently Asked Questions
哪些部署最需要优先排查?
使用 openGauss-connector-jdbc 1.1.0 及后续受影响版本,且 JDBC URL 或连接属性中的 logger 类名可能由低权限用户、外部配置、租户输入或不可信数据控制的客户端最需要优先排查。攻击发生在 JDBC 客户端进程,而不是仅限于数据库服务器。
攻击者需要具备哪些条件才能利用?
攻击者需要能够控制 JDBC URL 或连接属性中的 logger 类名。客户端 classpath 中还必须存在可被加载的类;漏洞会在确认该类是否为 Log 实现类之前调用其 String 参数构造函数,因此可能触发该类的加载或构造副作用。
哪些版本受到影响,修复版本是什么?
1.1.0 起引入的问题影响 1.1.0 及其后的 2.x、3.x、5.x、6.x 各版本和补丁,包括 6.0.0 分支最新的 6.0.6,以及 7.0.0-RC1、RC2 和 RC3。该问题已在 7.0.0-LTS 修复。
暂时无法升级时应如何降低风险?
不要允许不可信来源控制 JDBC URL 或连接属性中的 logger 类名,并审查会将外部输入拼接为连接参数的配置或代码。还应审查客户端运行时 classpath,避免存在不必要且可通过 String 参数构造函数产生敏感副作用的类。
如何判断实例是否可能受影响?
确认使用的连接器是否属于列出的受影响版本,并检查 JDBC URL、DataSource 配置及连接属性是否设置或可覆盖 logger 类名。若该属性可由不可信输入影响,且客户端 classpath 包含可加载的额外类,则应按高风险场景处理。