PostgreSQL 全球开发组于 2026 年 8 月 13 日发布安全更新,修复一个被追踪为 CVE-2026-14669 的堆缓冲区溢出漏洞。该漏洞 CVSS 评分 8.8(CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H),位于 PostgreSQL 内置的 to_char() 日期/时间格式化功能中,可被经过身份验证的数据库用户远程触发,在 PostgreSQL 操作系统账户的上下文中执行任意代码。完整 PoC 利用代码已公开发布至 GitHub,显著降低了利用门槛,所有使用受影响分支的数据库实例面临即时威胁。
事件概述
CVE-2026-14669 属于 CWE-122(Heap-based Buffer Overflow)类漏洞,影响 PostgreSQL 14、15、16、17、18 五个主流分支。在 2026 年 8 月 13 日的例行发布周期内,PostgreSQL 全球开发组在 PostgreSQL 18.5、17.11、16.15、15.19 和 14.24 五个版本中同步修复了该漏洞以及多个溢出问题。由于 PostgreSQL 广泛应用于 Web 应用、电商系统、企业 ERP 与金融业务后台,该漏洞的潜在影响面覆盖全球大量在线服务。
技术细节
漏洞根源位于 PostgreSQL 日期/时间格式化实现中的 datetime_to_char_body() 内部函数。该函数会根据传入的格式字符串分配一个工作缓冲区,但在处理 TZ 与 TZtz 这两类时区路径时,会将用户控制的 POSIX 时区缩写复制到该缓冲区,且未对长度进行充分的边界检查。攻击者只需借助经过身份验证的数据库连接,传入超长时区缩写即可触发堆缓冲区溢出。
成功利用后,攻击者可在 PostgreSQL 后端进程权限下执行任意代码,等价于获取数据库实例上所有数据库的访问权限。已公开发布的 PoC 演示了如何将堆溢出转化为完整的远程代码执行能力。PostgreSQL 官方安全公告确认,已有导致代码执行的利用报告。值得注意的是,要触发该漏洞,攻击者必须具备数据库身份认证,因此暴露在公网的 PostgreSQL 实例(开放监听 5432 端口)、弱口令账户以及通过 SQL 注入可获取的数据库连接均为高风险路径。
影响评估
CVSS 评分:8.8(高危)。攻击向量:网络。攻击复杂度:低。所需权限:低(经过身份验证的用户)。是否需要用户交互:否。PoC 公开状态:是(GitHub 仓库已发布完整利用代码)。已知恶意利用:暂未观察到针对该 CVE 的在野 0day 利用,但 PoC 公开意味着攻击门槛已大幅降低。影响面:所有低于 18.5、17.11、16.15、15.19、14.24 版本的 PostgreSQL 实例,涵盖大量生产环境数据库、Web 应用后端以及云上托管实例。
影响范围与版本
- PostgreSQL:18.5、17.11、16.15、15.19、14.24 之前的所有版本
- 触发条件:经过身份验证的用户可调用 to_char() 并控制时区缩写参数
- 官方修复版本:PostgreSQL 18.5、17.11、16.15、15.19、14.24
修复建议
- 立即将 PostgreSQL 升级到对应分支的最新修复版本,优先处理面向公网的实例
- 在升级窗口前,强制所有数据库账户使用强口令并启用证书认证,禁用弱口令与默认账户
- 通过防火墙或网络策略限制 PostgreSQL 5432 端口仅对应用层开放,阻止直接面向互联网的连接
- 在数据库审计日志中监控异常的 to_char() 调用模式与超长时区字符串,结合 EDR 与 SIEM 规则识别潜在的利用尝试
- 对拥有 to_char() 调用权限的账户进行最小化授权,避免应用账户获得过度的函数执行权限
- 对于无法立即升级的环境,可在 SQL 审计层面对 to_char() 的输入长度做白名单校验,但该方案无法替代补丁
检测规则参考
- PostgreSQL 日志:pg_log 中出现异常终止的后端进程、超长 timezone 缩写字符串、连续崩溃事件
- WAF/IPS 规则:针对 SQL 注入路径中嵌入超长时区字符串的攻击载荷建立检测规则
- EDR 行为告警:PostgreSQL 进程派生异常子进程(shell、curl、wget、powershell)
- 主机层监控:监控 PostgreSQL 数据目录、C 库加载路径的可疑写入行为
PostgreSQL 是全球部署最广泛的开源关系型数据库之一,CVE-2026-14669 的危害不仅在于直接的代码执行,更在于它揭示了核心数据基础设施中任何一处缓冲区边界检查疏漏都可能成为攻击者的入口。建议所有运维团队立即清点内部 PostgreSQL 实例版本,对照受影响分支制定升级计划,并在升级前对数据库账户权限、网络暴露面、审计日志进行复核,避免出现补丁空窗期的失陷。