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 。

相关推荐
蓝速科技38 分钟前
医院导诊 AI 数字人一体机场景适配与落地指南丨蓝速科技
运维·数据库·人工智能·科技·自然语言处理·技术分享
QYR-分析40 分钟前
重轨受电弓行业深度报告:市场格局、技术迭代与发展前景
大数据·数据库·人工智能
泡泡鱼(敲代码中)1 小时前
MySQL基础学习笔记:从数据模型到DDL全掌握
开发语言·数据库·笔记·学习·mysql
l1t2 小时前
DeepSeek总结的chdb-core v26.7.3发版说明
数据库·clickhouse·oracle
冰暮流星3 小时前
mysql之表子查询
数据库·mysql
Full Stack Developme3 小时前
CRM相关库表设计
数据库
步行cgn3 小时前
Spring 注入 Map 集合详解
数据库·python·spring
风跟我说过她4 小时前
SQL 一键转经典 Chen 风格 ER 图:开源 CLI + 在线工具 + Agent Skill
数据库·python·sql·开源·开源软件
这个DBA有点耶4 小时前
MySQL大表DDL锁表锁到崩溃?Online DDL的3个关键参数和实战避坑
数据库·mysql·架构
m0_459872924 小时前
Linux 系统基础
linux·运维·服务器