最近披露的 PostgreSQL JDBC 驱动程序 (PgJDBC) 漏洞可能允许攻击者拦截数据库连接,即使安全设置配置为防止此类攻击。该漏洞被跟踪为 CVE-2025-49146,在 CVSS 量表上的评级为 8.2,凸显了它可能严重损害连接到 PostgreSQL 数据库的 Java 应用程序中的安全通信。
“当 PostgreSQL JDBC 驱动程序配置为通道绑定设置为 require 时,驱动程序会错误地允许连接使用不支持通道绑定的身份验证方法继续进行,”公告警告说。
PgJDBC 是用纯 Java 编写的开源 Type 4 JDBC 驱动程序。它允许 Java 程序使用独立于平台的标准 Java 代码连接到 PostgreSQL 数据库,并使用 PostgreSQL 的本机协议进行通信。
该漏洞在于对 channelBinding=require 配置的处理不当,该配置旨在通过将传输层 (SSL/TLS) 绑定到身份验证过程来确保类似双向 TLS 的保护。但是,PgJDBC 版本 42.7.4 及更高版本错误地允许使用旧式身份验证方法(例如密码、MD5、GSS 或 SSPI),即使它们不支持通道绑定也是如此。
这为中间人 (MITM) 攻击打开了大门,尤其是在用户认为他们的连接受到保护但回退行为悄无声息地降级的情况下。
“这可能允许中间人攻击者拦截用户认为受通道绑定要求保护的连接,”该公告解释说。
此缺陷会影响使用 PostgreSQL JDBC 驱动程序 v42.7.4 到 v42.7.6 的所有应用程序,并已在版本 42.7.7 中修补。
作为直接解决方法,将驱动程序的 SSL 模式设置为 sslMode=verify-full,这将验证服务器的证书和主机名,即使在通道绑定失败时也能提供对 MITM 攻击的强大防御。