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 。

相关推荐
guo_wen_qiang2 分钟前
云服务器nacos搭建-集群&持久化
java·运维·服务器
@Mike@6 分钟前
13-数据库学习笔记(查询执行处理模型)
数据库·笔记·学习
弈栈录32 分钟前
MySQL 事务、索引与锁:后端开发必须掌握的数据库基础
数据库·后端
牢姐与蒯33 分钟前
一点小碎片——每个线程独有的东西——上下文+栈
linux·运维·服务器
96245634 分钟前
餐饮 SaaS 优惠券系统架构演进(三):优惠计算引擎——商品级计价、冲突策略与优惠分摊
java·数据库·spring boot
染指111035 分钟前
135.Agent-多Agent框架-LangChain多智能体(SubAgents子代理)
数据库·人工智能·设计模式·langchain·agent·agents
Elastic 中国社区官方博客1 小时前
错误最多的服务运行正常:使用 ES|QL 从日志进行根因分析
大数据·运维·数据库·sql·elasticsearch·搜索引擎·全文检索
0+1111 小时前
Linux --进程间关系和守护进程
linux·运维·服务器
做运维的阿瑞1 小时前
mysql数据库视图笔记:创建、修改、删除与适用场景
数据库·笔记·mysql
Seraphina362 小时前
DVWA(SQL Injection-High,XSS Reflected-Medium,XSS Stored-Medium)
数据库·经验分享·sql·网络安全·xss