PostgreSQL 13.1、12.5、11.10、10.15、9.6.20 和 9.5.24 发布!

发布于 2020-11-12,由 PostgreSQL 全球开发组发布
PostgreSQL 项目 安全

PostgreSQL 全球开发组发布了我们数据库系统所有受支持版本的更新,包括 13.1、12.5、11.10、10.15、9.6.20 和 9.5.24。此版本修复了三个安全漏洞,并修复了过去三个月报告的 65 个以上的错误。

由于 CVE-2020-25695 的性质,我们建议您尽快更新

此外,这是 PostgreSQL 9.5 的倒数第二个版本。如果您在生产环境中运行 PostgreSQL 9.5,我们建议您制定升级计划。

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

安全问题

CVE-2020-25695:多个功能逃脱“安全限制操作”沙箱

受影响的版本:9.5 - 13。安全团队通常不测试不受支持的版本,但这个问题相当老。

在至少一个模式中具有创建非临时对象权限的攻击者可以以超级用户的身份执行任意 SQL 函数。

虽然及时更新 PostgreSQL 是大多数用户的最佳补救措施,但无法执行此操作的用户可以通过禁用自动清理并且不手动运行 ANALYZECLUSTERREINDEXCREATE INDEXVACUUM FULLREFRESH MATERIALIZED VIEW 或从 pg_dump 命令的输出进行恢复来解决此漏洞。在此变通方法下,性能可能会迅速下降。

不带 FULL 选项的 VACUUM 是安全的,并且当受信任的用户拥有目标对象时,所有命令都是安全的。

PostgreSQL 项目感谢 Etienne Stalmans 报告此问题。

CVE-2020-25694:重新连接可以降低连接安全设置

受影响的版本:9.5 - 13。安全团队通常不测试不受支持的版本,但这个问题相当老。

许多 PostgreSQL 提供的客户端应用程序都具有创建其他数据库连接的选项。其中一些应用程序仅重用基本连接参数(例如 hostuserport),而删除其他参数。如果这删除了一个与安全相关的参数(例如 channel_bindingsslmoderequirepeergssencmode),则攻击者有机会完成 MITM 攻击或观察明文传输。

受影响的应用程序是 clusterdbpg_dumppg_restorepsqlreindexdbvacuumdb。只有当使用包含安全相关参数的连接字符串调用受影响的客户端应用程序时,才会出现此漏洞。

这也修复了 psql\connect 命令如何重用连接参数,即现在重用先前连接字符串中所有未覆盖的参数。

PostgreSQL 项目感谢 Peter Eisentraut 报告此问题。

CVE-2020-25696:psql\gset 允许覆盖特殊处理的变量

受影响的版本:9.5 - 13。安全团队通常不测试不受支持的版本,但这个问题很可能是在该功能在 9.3 版本中首次亮相时出现的。

\gset 元命令,它根据查询结果设置 psql 变量,无法区分控制 psql 行为的变量。如果交互式 psql 会话在查询被破坏的服务器时使用 \gset,则攻击者可以以运行 psql 的操作系统帐户的身份执行任意代码。在未修补的 psql 中,使用在特殊处理的变量中未找到的前缀(例如任何小写字符串)的 \gset 可以避免攻击。

PostgreSQL 项目感谢 Nick Cleaton 报告此问题。

错误修复和改进

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

其中一些修复包括

  • 通过确保为 START_REPLICATION 预期两个“命令完成”事件来修复复制协议中的中断。
  • 确保在 PostgreSQL 维护的 SLRU 缓存上调用 fsync。这可以防止由于操作系统崩溃而导致潜在的数据丢失。
  • 修复具有 BYPASSRLS 权限的用户使用 ALTER ROLE 的问题。
  • 当存在子表时,禁止在分区表上使用 ALTER TABLE ONLY ... DROP EXPRESSION
  • 确保 ALTER TABLE ONLY ... ENABLE/DISABLE TRIGGER 不适用于子表。
  • 修复分区表上的 ALTER TABLE ... SET NOT NULL,以避免在并行 pg_restore 中出现潜在的死锁。
  • 修复在具有继承的 CREATE TABLE LIKE 中处理表达式的问题。
  • 禁止在分区表上使用 DROP INDEX CONCURRENTLY
  • 允许 LOCK TABLE 在自引用视图上成功执行,而不是抛出错误。
  • 围绕 REINDEX CONCURRENTLY 的统计信息收集和进度报告的多个修复。
  • 确保当通过规则或可更新视图更新其依赖的任何列时,会更新 GENERATED 列。
  • 支持将文本数组列与哈希分区用作分区键。
  • 允许 jsonpath .datetime() 方法接受 ISO 8601 格式的时间戳。
  • 在“智能”关闭期间,确保在所有前台客户端会话完成之前不会终止后台进程,从而修复了破坏并行查询处理的问题。
  • 查询计划器和优化器的多个修复。
  • 确保数据在插入到 BRIN 索引之前被取消 TOAST。这可能会以类似于“toast 值 NNN 缺少块号 0”的错误表现出来。如果您在现有 BRIN 索引中看到类似的错误,您应该可以通过在该索引上使用 REINDEX 来纠正它。
  • 修复 EXPLAIN 的输出,使其具有增量排序计划的正确 XML 标记嵌套。
  • 多个内存泄漏的修复,包括涉及 RLS 策略、使用 PL/pgSQL 的 CALLSIGHUP 处理无法在不重启的情况下应用的配置参数以及分区的索引查找的边缘情况。
  • libpq 现在可以支持 .pgpass 文件中的任意长度行。
  • 在 Windows 上,psql 现在以文本模式而不是二进制模式读取反引号命令的输出,因此它现在可以正确处理换行符。
  • 修复 pg_dumppg_restoreclusterdbreindexdbvacuumdb 如何使用复杂的连接字符串参数。
  • psql\connect 命令重用连接参数时,请确保还重用先前连接字符串中所有未覆盖的参数。
  • 确保 pg_dump 收集有关扩展配置表的每列信息,避免在指定 --inserts 时崩溃。
  • 确保并行 pg_restore 以正确的顺序处理引用分区表的外键。
  • contrib/pgcrypto 的多个修复,包括内存泄漏修复。

此更新还包含 tzdata 版本 2020d,用于斐济、摩洛哥、巴勒斯坦、加拿大育空地区、麦夸里岛和凯西站(南极洲)的 DST 法律变更;以及法国、匈牙利、摩纳哥和巴勒斯坦的历史修正。

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

PostgreSQL 9.5 EOL 通知

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

更新

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

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

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

注意:PostgreSQL 9.5 将于 2021 年 2 月 11 日停止接收修复。有关更多信息,请参阅我们的版本控制策略

链接