开源数据库“PostgreSQL”的开发团队 PostgreSQL Global Development Group 于 2026 年 11 月 12 日发布了面向所有受支持版本系列的更新(18.7、17.12、16.16、15.20、14.25),并同时推出下一个大版本的第二个候选版“PostgreSQL 19 RC 2”。本次更新修复了 52 个安全漏洞和 140 多个缺陷,其中部分漏洞可能导致攻击者以运行数据库的操作系统用户权限执行任意代码。
一次修复 52 个漏洞和 140 多个缺陷
据官方公告,本次更新修复的安全漏洞多达 52 个。公告列出的漏洞中,许多被描述为“执行任意代码(executes arbitrary code)”,CVSS v3 基本分值为 8.8 的漏洞也占多数。
涉及范围相当广泛。除了服务器核心的类型混淆(type confusion)、释放后重用(use-after-free)和堆缓冲区溢出之外,PL/Perl、PL/Tcl 等过程语言,dblink 等扩展,以及 pgdump、pgrestore、reindexdb、vacuumdb 等配套工具中也发现了问题。其中还包括可绕过行级安全策略读取数据行,以及可能泄露服务器内存内容的漏洞。
代表性漏洞 CVE-2026-6460 可让“能创建对象的用户”执行代码
具有代表性的是 CVSS v3 基本分值为 8.8 的 CVE-2026-6460。根据官方说明,主要通过 ALTER ... SET DATA TYPE 会产生类型混淆,使能够创建对象的用户可以以运行数据库的操作系统用户身份执行任意代码。此外还存在其他 DDL 攻击途径,例如执行 ALTER TABLE ... ADD COLUMN 后回滚,再次添加列。
关于原因,官方表示系统对带类型的值跟踪不足,而且值本身无法标明自身类型,因此旧值可能残留在数据字典条目、PL/pgSQL 变量等系统的许多地方。受影响的是 18.7、17.12、16.16、15.20、14.25 之前的版本,攻击需要以低权限登录数据库。
本次是 PostgreSQL 14 的最后一个版本
本次的 14.25 是 PostgreSQL 14 系列的最后一个版本。官方公告称,PostgreSQL 14 今后将不再获得安全和缺陷修复,并建议用户迁移到更新的版本。
同时发布的 PostgreSQL 19 RC 2 计划于 2026 年 11 月 19 日推出正式版。与 RC 1 相比的变更包括撤销一项与 JSON_ARRAY()、JSON_OBJECT() 相关的改动,官方表示使用该功能创建的对象必须在升级前删除或重新定义。
用户应尽快更新并确认更新后的操作
小版本更新无需导出和重新导入数据,也无需 pg_upgrade,只需替换程序即可。不过官方公告列出了在特定条件下需要执行的更新后操作,包括重建 GIN 索引、使用 gist_trgm_ops 的 pg_trgm GiST 索引,以及未指定长度的 bpchar 列上的 B-tree 索引(REINDEX);使用增量备份时重新获取全量备份;以及检查并修复分区表上的 NOT NULL NO INHERIT 约束等。
另外,此前漏洞 CVE-2026-6464 的修复导致 psql 无法接受单个命令字符串中的多个 COPY ... FROM STDIN,这一问题也在本次得到修复。
CVE-2026-6460 的攻击前提是可以登录的用户,但在多个用户或应用共用同一数据库的环境中,影响会更大。自行运维服务器的用户应尽快考虑升级到所用系列的最新版本。使用云托管数据库服务的用户,可查看各服务商的说明。
笔者观点
对于 PostgreSQL 的定期版本而言,52 个漏洞的数量实属罕见。由于许多漏洞可导致任意代码执行,且波及过程语言和配套工具,在向外部用户授予权限的环境中,或会恢复他人提供的转储文件的业务流程中,尤其应优先更新。对仍在使用 14 系列的机构来说,这是最后一次修复,需要加快迁移计划。
总结
PostgreSQL 于 11 月 12 日发布 18.7、17.12、16.16、15.20 和 14.25,修复 52 个安全漏洞和 140 多个缺陷。代表性的 CVE-2026-6460 可能让能创建对象的用户在服务器上执行任意代码。14 系列的更新到此结束,用户应升级到最新版本,并确认适用于自身环境的更新后操作。