PostgreSQL 13.3、12.7、11.12、10.17 和 9.6.22 发布!

由 PostgreSQL 全球开发组发布于 2021-05-13
PostgreSQL 项目 安全

PostgreSQL 全球开发组已发布对我们数据库系统所有受支持版本的更新,包括 13.3、12.7、11.12、10.17 和 9.6.22。此版本修复了三个安全漏洞,并修复了过去三个月报告的 45 多个错误。

有关更改的完整列表,请查看发行说明

安全问题

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 多个错误。其中一些问题仅影响版本 13,但也可能适用于其他受支持的版本。

其中一些修复包括

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

有关可用的更改的完整列表,请查看发行说明

PostgreSQL 9.6 EOL 通知

PostgreSQL 9.6 将于 2021 年 11 月 11 日停止接收修复。如果您在生产环境中运行 PostgreSQL 9.6,我们建议您制定计划升级到更新、受支持的 PostgreSQL 版本。有关详细信息,请参阅我们的版本策略

更新

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

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

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

链接