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,我们建议您计划升级。
有关更改的完整列表,请参阅 发布说明。
受影响版本:9.5 - 13。安全团队通常不测试不受支持的版本,但此问题已存在相当长的时间。
拥有在至少一个模式中创建非临时对象的权限的攻击者,可以在超级用户的身份下执行任意 SQL 函数。
虽然及时更新 PostgreSQL 是大多数用户的最佳修复方法,但无法执行此操作的用户可以通过禁用 autovacuum 并手动运行 ANALYZE、CLUSTER、REINDEX、CREATE INDEX、VACUUM FULL、REFRESH MATERIALIZED VIEW 或从 pg_dump 命令的输出进行恢复来规避此漏洞。在此规避措施下,性能可能会迅速下降。
不带 FULL 选项的 VACUUM 是安全的,并且当受信任的用户拥有目标对象时,所有命令都正常。
PostgreSQL 项目感谢 Etienne Stalmans 报告此问题。
受影响版本:9.5 - 13。安全团队通常不测试不受支持的版本,但此问题已存在相当长的时间。
许多 PostgreSQL 提供的客户端应用程序都具有创建额外数据库连接的选项。其中一些应用程序只重用基本连接参数(例如 host、user、port),而丢弃其他参数。如果丢弃了与安全相关的参数(例如 channel_binding、sslmode、requirepeer、gssencmode),攻击者就有机会完成中间人攻击或观察到明文传输。
受影响的应用程序包括 clusterdb、pg_dump、pg_restore、psql、reindexdb 和 vacuumdb。仅当使用包含与安全相关的参数的连接字符串调用受影响的客户端应用程序时,才会出现此漏洞。
这也修复了 psql 的 \connect 命令重用连接参数的方式,即现在重用了来自先前连接字符串的所有未覆盖参数。
PostgreSQL 项目感谢 Peter Eisentraut 报告此问题。
psql 的 \gset 允许覆盖特殊处理的变量受影响版本:9.5 - 13。安全团队通常不测试不受支持的版本,但此问题很可能是在版本 9.3 中引入该功能时出现的。
\gset 元命令根据查询结果设置 psql 变量,但它不会区分控制 psql 行为的变量。如果交互式 psql 会话在使用 \gset 查询受损服务器时,攻击者就可以以运行 psql 的操作系统帐户的身份执行任意代码。使用带有不在特殊处理变量列表中(例如任何小写字符串)的前缀的 \gset,可以避免在未修补的 psql 中发生攻击。
PostgreSQL 项目感谢 Nick Cleaton 报告此问题。
此次更新还修复了过去几个月报告的 65 多个错误。其中一些问题仅影响 13 版本,但也可能适用于其他受支持的版本。
部分修复包括:
START_REPLICATION 期望两个“命令完成”事件。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 列也会被更新。.datetime() 方法接受 ISO 8601 格式的时间戳。REINDEX 来纠正。EXPLAIN 的输出,使其具有增量排序计划的正确 XML 标签嵌套。CALL 和 PL/pgSQL,SIGHUP 处理无法在无需重启的情况下应用的配置参数,以及分区索引查找的边缘情况。psql 现在以文本模式而不是二进制模式读取反引号命令的输出,因此现在可以正确处理换行符。pg_dump、pg_restore、clusterdb、reindexdb 和 vacuumdb 处理复杂连接字符串参数的方式。psql 的 \connect 命令重用连接参数时,确保之前连接字符串中所有未覆盖的参数也得到重用。pg_dump 收集扩展配置表的每个列信息,避免在指定 --inserts 时崩溃。pg_restore 以正确的顺序处理引用分区表的外键。contrib/pgcrypto 进行多项修复,包括内存泄漏修复。此次更新还包含 tzdata 版本 2020d,用于斐济、摩洛哥、巴勒斯坦、加拿大育空地区、麦夸里岛和凯西站(南极洲)的 DST 法规变更;以及法国、匈牙利、摩纳哥和巴勒斯坦的历史修正。
有关所有可用更改的完整列表,请参阅 发行说明。
PostgreSQL 9.5 将于 2021 年 2 月 11 日停止接收修复。如果您在生产环境中使用 PostgreSQL 9.5,我们建议您计划升级到更新的、受支持的 PostgreSQL 版本。请参阅我们的 版本策略 以获取更多信息。
所有 PostgreSQL 更新版本都是累积的。与其他次要版本一样,用户不需要转储和重新加载数据库或使用 pg_upgrade 来应用此更新版本;您可以直接关闭 PostgreSQL 并更新其二进制文件。
跳过了一个或多个更新版本的用户可能需要执行额外的、更新后的步骤;有关详细信息,请参阅早期版本的发布说明。
有关更多详细信息,请参阅 发行说明。
注意:PostgreSQL 9.5 将于 2021 年 2 月 11 日停止接收修复。请参阅我们的 版本策略 以获取更多信息。