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

发布 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 是大多数用户的最佳修复方法,但无法执行此操作的用户可以通过禁用 autovacuum 并手动运行 ANALYZECLUSTERREINDEXCREATE INDEXVACUUM FULLREFRESH MATERIALIZED VIEW 或从 pg_dump 命令的输出进行恢复来规避此漏洞。在此规避措施下,性能可能会迅速下降。

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

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

CVE-2020-25694:重新连接可能导致连接安全设置降级

受影响版本:9.5 - 13。安全团队通常不测试不受支持的版本,但此问题已存在相当长的时间。

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

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

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

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

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

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

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

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 列依赖的列通过规则或可更新视图进行更新时,GENERATED 列也会被更新。
  • 支持将文本数组列作为分区键的哈希分区。
  • 允许 jsonpath 的 .datetime() 方法接受 ISO 8601 格式的时间戳。
  • 在“智能”关闭期间,确保后台进程在所有前台客户端会话完成之前不会被终止,从而修复了一个破坏并行查询处理的问题。
  • 对查询规划器和优化器进行了多项修复。
  • 确保在将数据插入 BRIN 索引之前对其进行去 TOAST 处理。这可能会出现类似“toast 值 NNN 缺少块号 0”的错误。如果您在现有的 BRIN 索引中遇到类似的错误,您应该可以通过在索引上使用 REINDEX 来纠正。
  • 修复 EXPLAIN 的输出,使其具有增量排序计划的正确 XML 标签嵌套。
  • 修复了多项内存泄漏问题,包括与 RLS 策略相关的内存泄漏,使用 CALL 和 PL/pgSQL,SIGHUP 处理无法在无需重启的情况下应用的配置参数,以及分区索引查找的边缘情况。
  • libpq 现在支持 .pgpass 文件中的任意长度行。
  • 在 Windows 上,psql 现在以文本模式而不是二进制模式读取反引号命令的输出,因此现在可以正确处理换行符。
  • 修复 pg_dumppg_restoreclusterdbreindexdbvacuumdb 处理复杂连接字符串参数的方式。
  • psql\connect 命令重用连接参数时,确保之前连接字符串中所有未覆盖的参数也得到重用。
  • 确保 pg_dump 收集扩展配置表的每个列信息,避免在指定 --inserts 时崩溃。
  • 确保并行 pg_restore 以正确的顺序处理引用分区表的外键。
  • contrib/pgcrypto 进行多项修复,包括内存泄漏修复。

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

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

PostgreSQL 9.5 停用通知

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

更新

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

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

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

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

链接