CVE-2026-6477PostgreSQL libpq库中的lo_export()、lo_read()、lo_lseek64()和lo_tell64()函数使用了存在固有危险的PQfn函数。该漏洞允许服务器超级用户利用任意大的响应覆盖客户端的堆栈缓冲区。由于psql中的\lo_export命令和pg_dump都会调用lo_read(),因此服务器超级用户可以覆盖pg_dump或psql的堆栈内存。受影响的版本包括PostgreSQL 18.4、17.10、16.14、15.18和14.23之前的所有版本。
该漏洞源于PostgreSQL客户端库libpq在处理大对象相关函数时,存在堆栈缓冲区溢出风险。具体而言,lo_export、lo_read等函数通过调用PQfn(..., result_is_int=0, ...)来接收数据。该函数设计上存在类似gets()的缺陷,即能够将服务器返回的任意长度数据写入客户端未指定大小的缓冲区中,且未进行严格的长度校验。攻击者若拥有数据库超级用户权限(或诱导用户连接恶意服务器),可在客户端执行\lo_export命令或运行pg_dump时,发送特制的超长数据包。这将导致客户端程序的堆栈缓冲区被覆盖,进而可能覆盖返回地址,使得攻击者能够在客户端机器上执行任意代码,造成严重的安全后果。