2025年9月25日: PostgreSQL 18 发布!

PostgreSQL 13.3, 12.7, 11.12, 10.17 和 9.6.22 已发布!

发布于 2021-05-13,作者:PostgreSQL 全球开发组
PostgreSQL 项目 安全

PostgreSQL 全球开发组发布了我们数据库系统所有受支持版本的更新,包括 13.3, 12.7, 11.12, 10.17 和 9.6.22。本次发布修复了三个安全漏洞,并解决了过去三个月内报告的 45 个以上 bug。

有关更改的完整列表,请参阅 发行说明

安全问题

CVE-2021-32027:数组下标计算中的整数溢出导致缓冲区溢出

受影响版本:9.6 - 13。安全团队通常不测试不受支持的版本,但此问题存在已久。

在修改某些 SQL 数组值时,缺少边界检查会导致已授权的数据库用户向服务器内存的大片区域写入任意字节。

PostgreSQL 项目感谢 Tom Lane 报告此问题。

CVE-2021-32028INSERT ... ON CONFLICT ... DO UPDATE 中的内存泄露

受影响版本:9.6 - 13。安全团队通常不测试不受支持的版本。此功能首次出现在 9.5 中。

攻击者通过在一个精心设计的表上使用 INSERT ... ON CONFLICT ... DO UPDATE 命令,可以读取服务器内存中的任意字节。在默认配置下,任何已授权的数据库用户都可以创建先决对象并随意完成此攻击。缺乏所有数据库上的 CREATETEMPORARY 权限以及所有模式上的 CREATE 权限的用户通常无法随意使用此攻击。

PostgreSQL 项目感谢 Andres Freund 报告此问题。

CVE-2021-32029:分区表 UPDATE ... RETURNING 中的内存泄露

受影响版本:11 - 13

攻击者通过在一个精心设计的表上使用 UPDATE ... RETURNING,可以读取服务器内存中的任意字节。在默认配置下,任何已授权的数据库用户都可以创建先决对象并随意完成此攻击。缺乏所有数据库上的 CREATETEMPORARY 权限以及所有模式上的 CREATE 权限的用户通常无法随意使用此攻击。

PostgreSQL 项目感谢 Tom Lane 报告此问题。

错误修复和改进

此更新修复了过去几个月报告的 45 个以上 bug。其中一些问题仅影响版本 13,但也可能适用于其他受支持的版本。

部分修复包括:

  • 修复了联合、跨分区更新的 UPDATE ... RETURNING 输出可能存在的计算错误。
  • 修复了在分区表上的外键约束上使用 ALTER TABLE ... ALTER CONSTRAINT 的问题。该命令未能调整叶子分区的约束和触发器的 DEFERRABLE 和/或 INITIALLY DEFERRED 属性,导致意外行为。更新到此版本后,您可以执行 ALTER TABLE ... ALTER CONSTRAINT 命令来修复任何行为不正确的表。
  • 确保当使用 ALTER TABLE ... INHERIT 附加子表时,父表中的生成列在子表中以相同的方式生成。
  • 禁止将标识列标记为 NULL
  • 允许 ALTER ROLE ... SET/ALTER DATABASE ... SET 设置 role、session_authorization 和 temp_buffers 参数。
  • 确保 REINDEX CONCURRENTLY 保留索引的任何统计目标设置。
  • 修复了在某些情况下,在 AFTER 触发器中保存记录可能导致崩溃的问题。
  • 修复了 to_char() 处理负区间时的罗马数字月份格式代码的方式。
  • 修复了在 BRE 模式正则表达式中解析 \{m,n\} 量词时使用未初始化值的问题。
  • 修复了在排序键涉及聚合或窗口函数时,某些情况下出现的 "could not find pathkey item to sort"(找不到用于排序的路径键项)规划器错误。
  • 修复了 BRIN 索引位图扫描可能导致 "could not open file"(无法打开文件)错误的潜在问题。
  • 修复了当存在大量匹配记录时,GIN tsvector 索引搜索可能返回错误结果的问题。
  • 修复了服务器和 psqlCOMMIT AND CHAIN 功能的各项问题。
  • 避免在从 WAL 恢复未提交的两阶段事务时发生时间线更改错误,这可能导致一致性问题和无法重启服务器。
  • 确保在较新的 FreeBSD 版本上,wal_sync_method 默认设置为 fdatasync
  • 禁用 vacuum_cleanup_index_scale_factor 参数和存储选项。
  • 修复了服务器中的多个内存泄露问题,包括 SSL/TLS 参数初始化时的一个泄露。
  • 恢复 psql\connect service=XYZ 的先前行为,即不允许环境变量(如 PGPORT)覆盖服务文件中的条目。
  • 修复了 pg_dump 处理分区表中的生成列的方式。
  • 为包含不可升级数据类型的用户表添加了 pg_upgrade 的额外检查。
  • 在 Windows 上,initdb 现在会打印有关如何使用反斜杠分隔符通过 pg_ctl 启动服务器的说明。
  • 修复了 pg_waldump 在生成每条记录统计信息时正确计算 XACT 记录的问题。

有关所有更改的完整列表,请参阅 发布说明

PostgreSQL 9.6 停止支持通知

PostgreSQL 9.6 将于 2021 年 11 月 11 日停止接收修复。如果您在生产环境中使用 PostgreSQL 9.6,我们建议您计划升级到更新的、受支持的 PostgreSQL 版本。请参阅我们的 版本策略 以获取更多信息。

更新

所有 PostgreSQL 更新版本都是累积的。与其他次要版本一样,用户不需要转储和重新加载数据库或使用 pg_upgrade 来应用此更新版本;您可以直接关闭 PostgreSQL 并更新其二进制文件。

跳过了一个或多个更新版本的用户可能需要执行额外的、更新后的步骤;有关详细信息,请参阅早期版本的发布说明。

有关更多详细信息,请参阅 发行说明

链接