CVE-2026-6665PgBouncer 1.25.2 之前的版本存在严重的安全漏洞。该漏洞位于 SCRAM 认证代码中,问题源于在构建 SCRAM client-final-message 内容时,未能正确检查 strlcat() 函数的返回值。一个恶意的后端数据库服务器可以通过发送包含超长 nonce 的 SCRAM server-final-message,成功触发栈溢出,导致系统崩溃或潜在的被控制。
该漏洞属于典型的内存破坏类漏洞,具体表现为栈缓冲区溢出。PgBouncer 在处理 SCRAM(Salted Challenge Response Authentication Mechanism)认证协议时,需要构建 client-final-message。在此过程中,代码使用了 strlcat() 函数进行字符串拼接操作,但关键问题在于程序未能正确校验 strlcat() 函数的返回值,从而无法有效检测缓冲区边界。攻击者若能控制恶意的后端数据库服务器(或通过中间人攻击模拟后端),可发送一个精心构造的 SCRAM server-final-message,其中包含一个超长且恶意的 nonce 字段。当 PgBouncer 接收并处理此消息时,由于缺乏必要的边界检查,数据将溢出预分配的栈缓冲区。鉴于 CVSS 3.1 评分为 8.1,攻击者无需用户交互且无需认证(相对于 PgBouncer 本身),通过网络即可远程利用此漏洞,不仅可能导致服务崩溃(DoS),还可能覆盖返回地址从而实现远程代码执行(RCE)。