
PostgreSQL 中的一个类型混淆漏洞,允许能创建对象的数据库用户在服务器上执行代码。昨天发布的更新修复了该漏洞,同时修复了另外 51 个安全缺陷。要获得对该漏洞的完整防护,还需要重新构建服务器上安装的所有 C 语言扩展。
该漏洞编号为 CVE-2026-6460,CVSS 评分为 8.8。以此方式运行的任何代码都拥有运行 PostgreSQL 的操作系统用户的权限。18.7、17.12、16.16、15.20 和 14.25 之前的所有版本均受影响。
负责发布该数据库版本的 PostgreSQL 全球开发组尚未报告任何利用该漏洞的攻击。CISA 在 CVE 记录中的评估也将该漏洞的利用情况列为无。
该漏洞涉及复合类型,即由命名字段构成的类型,每个字段都有自己的数据类型。字段的类型可以被更改,而该类型的旧值仍保留在服务器的其他部分。
随后,服务器可能将该旧值当作具有新类型来读取。项目发布说明中描述的修复增加了版本检查,使服务器能够检测出不再与其类型匹配的值。
安全研究员 Mehmet Ince 在本周发布的一篇技术文章中描述了一个可用的漏洞利用,并在 PostgreSQL 18.6 上进行了演示。
他的方法是准备一个持有某个值的查询,更改该值其中一个字段的类型,然后运行该查询。该文章包含了以此方式使未打补丁的服务器崩溃的 SQL,以及泄露内存地址的第二步。文章没有包含使服务器执行命令的最后一步的 SQL。
他写道,他可以“以最低权限的登录角色触发此崩溃”。该项目的安全公告仅将攻击者描述为能够创建对象的人,并未说明这需要哪些权限。
发布 PostgreSQL 软件包的 Red Hat 在其 CVE 评估中表示,攻击者需要一个具有创建或修改对象能力的数据库登录账号。以上来源均未说明仅具有默认权限的账号能否在崩溃之外进一步执行代码。

Ince 将该漏洞的根源追溯到 2004 年 5 月 5 日,当时 PostgreSQL 获得了更改列类型的能力。他执行代码的技术依赖于 2015 年 5 月 14 日做出的一项后续更改。
他还将该漏洞利用适配到托管式 PostgreSQL 服务,并于 8 月与这些服务的安全团队私下分享了概念验证。与他合作的提供商包括 AWS(Aurora 和 RDS)、Microsoft(Azure PostgreSQL)、Google(AlloyDB)、Supabase、Databricks 和 Ubicloud。该文章未给出各项服务当前的补丁状态。
该项目为 CVE-2026-6460 向十多名报告者致谢,其中包括这位研究员,并在同一版本中为另外五个缺陷向他致谢。
该项目将 52 个缺陷中的 32 个评为 8.8 分,这是该版本中的最高分。根据其漏洞索引中的评分,服务器中只有一个缺陷既不需要登录也不需要任何用户操作。该缺陷 CVE-2026-116322 允许未认证的客户端触发 PostgreSQL 18 服务器重启。
其他几项修复涉及客户端工具。特制的归档文件可使 pg_restore 以运行它的用户身份执行代码。被攻破的源服务器可通过 pg_dump 的 tar 输出中的恢复脚本使 psql 执行代码。
管理员应做什么
- 将服务器更新至 18.7、17.12、16.16、15.20 或 14.25,与你的主版本相匹配。
- 在更新服务器的同时,重建或更新所有 C 语言扩展。针对旧版本构建的扩展仍可加载,但根据项目 RPM 包维护者的仓库通知,它们“可能无法受到本版本所修复漏洞的保护”。部分扩展还需要修改源代码。
- 为新版本重建的扩展可能无法在旧服务器上加载。项目 RPM 仓库中的扩展包现在要求使用新的次要版本。
- 如果 PostgreSQL 运行在包自带服务单元之外,例如在 Patroni 下,请在更新后立即重启,RPM 包的一位维护者在打包博客文章中表示。
- 在每台运行客户端工具的机器上更新这些工具,例如 pg_dump、pg_restore、reindexdb 和 vacuumdb。
- 不要使用新的 composite_type_mismatch 设置来关闭检查。项目表示这样做会带来安全风险。
- 对于尚无法更新的服务器,项目的安全公告和发行说明未提供任何变通方法。
- PostgreSQL 14 现已终止支持,14.25 是其最后一个版本。更早的主版本也受影响,且未获得更新。
- 更新后,按照发布公告中的重新索引步骤操作。如果使用增量备份,请先进行一次新的完整备份,并让后续增量备份基于该备份。