CVE-2026-42198pgjdbc(PostgreSQL JDBC驱动)在42.2.0至42.7.11之前的版本中存在客户端拒绝服务漏洞。在SCRAM-SHA-256认证过程中,恶意服务器可以指示驱动程序执行具有极大迭代次数的SCRAM认证。由于客户端需要在PBKDF2计算中消耗大量CPU时间,导致单次尝试即可占用一个CPU核心。重复或并发尝试会耗尽客户端CPU并阻塞连接池。尽管设置了loginTimeout,但执行连接尝试的工作线程仍可能继续运行并消耗CPU。该问题已在42.7.11版本中修复。
该漏洞的根本原因在于pgjdbc驱动程序在处理SCRAM-SHA-256认证协议时,未能对服务器端下发的PBKDF2迭代次数进行合理的上限限制。SCRAM(Salted Challenge Response Authentication Mechanism)协议是一种基于质询-响应的认证机制,其安全性依赖于PBKDF2(Password-Based Key Derivation Function 2)算法进行密钥派生。该算法的计算成本与迭代次数呈线性关系,旨在通过增加计算时间来抵御暴力破解攻击。在受影响的pgjdbc版本中,驱动程序完全信任由数据库服务器返回的迭代次数参数。攻击者利用这一缺陷,可以搭建一个恶意的PostgreSQL服务器。当受害者的应用程序(使用受影响的JDBC驱动)尝试连接该恶意服务器时,攻击者可以在认证流程的SASLContinue阶段,响应一个极大的迭代次数值(例如几百万甚至更大)。一旦接收到该参数,客户端驱动程序便会陷入PBKDF2的哈希计算循环中,持续消耗CPU资源。由于驱动程序的loginTimeout机制存在缺陷,它仅能中断调用者的等待,而无法强制终止正在进行高强度计算的工作线程。因此,即使连接超时,后台线程依然在占用CPU。攻击者通过并发发起多个连接请求,即可迅速占满目标系统的所有CPU核心,导致合法请求无法处理,从而实现拒绝服务攻击。