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 是大多数用户的最佳补救措施,但无法执行此操作的用户可以通过禁用自动清理并且不手动运行 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
),则攻击者有机会完成 MITM 攻击或观察明文传输。
受影响的应用程序是 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
的操作系统帐户的身份执行任意代码。在未修补的 psql
中,使用在特殊处理的变量中未找到的前缀(例如任何小写字符串)的 \gset
可以避免攻击。
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
列。.datetime()
方法接受 ISO 8601 格式的时间戳。REINDEX
来纠正它。EXPLAIN
的输出,使其具有增量排序计划的正确 XML 标记嵌套。CALL
、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 日停止接收修复。有关更多信息,请参阅我们的版本控制策略。