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 。

相关推荐
OnlyEasyCode19 分钟前
IIS开放端口转发后端
运维·服务器
一条泥憨鱼36 分钟前
【Redis | 黑马点评】附近商铺功能源码解读
数据库·redis·缓存
念何架构之路1 小时前
Go reflect 包:结构体反射 —Field、Tag 与 VisibleFields
java·数据库·golang
9624562 小时前
一次 Dell PowerEdge R750xs 启动故障复盘:从 iDRAC 带外管理到 Linux 多内核回退与 initramfs 重建
linux·运维·服务器
EnCi Zheng2 小时前
PostgreSQL 实战指南:安装配置、数据类型、索引选型、MVCC 事务与高可用备份全解析
数据库·sql·postgresql·索引·1024程序员节
泡海椒2 小时前
JQuick-SQL REST API 数据接入:应用层调用接口后注册分析表
数据库·sql·1024程序员节
Random Glow3 小时前
聚簇索引 vs 二级索引:回表、覆盖索引、索引下推
数据库·mysql·性能优化·innodb·1024程序员节·索引优化
Ruiery3 小时前
Linux 6.6内核 CPU 深度解析(零):x86 内核引导协议 — 从 bootloader 到 main()
linux·运维·服务器
Ruiery3 小时前
Linux 6.6内核 CPU 深度解析(十六):x86 保护机制 — 从 ring 到页表的权限防线
linux·运维·服务器