PostgreSQL libpq lo_* 函数允许服务器超级用户覆盖客户端栈内存HGVE-2026-E011

文章目录

环境

系统平台:N/A

版本:9.0.3,9.0.4,9.0.5,4.5.8,4.5.10,4.5.11,6.0.4

BUG/漏洞编码

HGVE-2026-E011

症状

PostgreSQL libpq 的 lo_export()、lo_read()、lo_lseek64() 和 lo_tell64() 函数使用了本质上危险的 PQfn(..., result_is_int=0, ...) 函数,允许服务器超级用户用任意大的响应覆盖客户端栈缓冲区。与 gets() 类似,PQfn(..., result_is_int=0, ...) 会把由服务器决定的任意长度数据存入大小未指定的缓冲区。由于 psql 的 \lo_export 命令和 pg_dump 都会调用 lo_read(),服务器超级用户可以覆盖 pg_dump 或 psql 的栈内存。PostgreSQL 18.4、17.10、16.14、15.18 和 14.23 之前的版本受影响。

触发条件

漏洞根因是 libpq 的 lo_export()、lo_read()、lo_lseek64() 和 lo_tell64() 等大对象函数调用 PQfn(..., result_is_int=0, ...) 时未提供可靠的目标缓冲区大小约束。服务端可返回任意长度的数据,客户端将其写入栈缓冲区,导致栈内存被覆盖。

解决方案

代码修复应移除或改造危险的 PQfn(..., result_is_int=0, ...) 使用方式,为服务端返回数据设置明确长度上限,并在写入客户端缓冲区前校验返回长度。lo_* 函数应使用带长度参数的安全缓冲区接口,拒绝超过目标缓冲区容量的响应。pg_dump、psql 等调用方也应同步使用修复后的 libpq 接口。修复后应增加恶意超长响应的客户端回归测试,确认不会发生栈内存覆盖。

安装漏洞补丁包。 下载地址:

v9.0.3,v9.0.4,v9.0.5 :

链接: https://pan.baidu.com/s/15nI0Vgxmy5Yy-hCspSOm2g?pwd=qx2e 提取码: qx2e

V4.5.8,V4.5.10,V4.5.11,V6.0.4:

链接: https://pan.baidu.com/s/1wbOp7Qhb8-pepw7ko63zag?pwd=b56y 提取码: b56y 。

相关推荐
风123456789~1 小时前
【Oracle专栏】跨服务器调用ORA-02064: 不支持分布式操作
数据库·oracle
优化Henry1 小时前
关于“星链”互联网系统的几点认识
运维·服务器·网络·笔记·学习·信息与通信
沫璃染墨1 小时前
《从零入门Linux系统篇(二十八):文件篇·一——Linux为什么“万物皆文件”:从C语言文件流到系统调用》
linux·运维·服务器·开发语言·c++·文件
Feynman’s boom2 小时前
PDF解析复盘
数据库·人工智能·算法·pdf解析
程序员小八7779 小时前
MySQL 事务:一文把 ACID、隔离级别、MVCC、锁全串起来
数据库·mysql
lzhdim10 小时前
提高 SQL 语句执行速度的方法
java·开发语言·数据库·sql·oracle
星野川崎20610 小时前
电商多店运维:云机24小时挂机频繁掉线、账号无故风控深度原因分析及解决方案
大数据·运维·服务器·云计算·电商
ltl10 小时前
ClickHouse Distributed 引擎与分布式查询路由
数据库
Wang's Blog10 小时前
PostgreSQL笔记60: 权限与角色管理——从层级体系到最佳实践
数据库·笔记·postgresql