PostgreSQL 全球开发组今日发布了所有活跃 PostgreSQL 对象-关系数据库系统的分支的安全更新,包括版本 9.1.3、9.0.7、8.4.11 和 8.3.18。
pg_dump 用户、用于验证的 SSL 证书用户或使用 SECURITY DEFINER 的触发器用户应立即升级其安装。强烈建议所有其他数据库管理员在下次计划的停机时间升级您的 PostgreSQL 版本。下面包含有关安全修复程序的更多详细信息。
此更新中的错误修复影响的功能包括:二进制复制和热备、GIN、WITH、外部数据包装器、PL/pgsql、PL/python、inet 数据类型、intarray、pgcrypto、pg_upgrade、pg_restore 和 pg_dump。使用这些功能的用户应尽快应用更新。
此版本包含对 9.1 版本的 45 项修复,以及对旧版本的少量修复,包括:
与其他次要版本一样,用户在应用此更新版本时不需要转储和重新加载数据库或使用 pg_upgrade;您只需关闭 PostgreSQL 并更新其二进制文件。数据库重新启动后,执行更新后步骤。
此更新包括针对以下问题的三项安全修复:
此修复程序可防止用户定义用户没有 EXECUTE 权限的函数触发器。
CREATE TRIGGER 未对要调用的触发器函数进行任何权限检查。未授权的数据库用户可以将其拥有的表的触发器函数附加到该表,并使其在他们选择的数据上被调用。通常,这将以表所有者的权限执行,因此不会提供额外的功能。但是,如果触发器函数被标记为 SECURITY DEFINER,则可能发生权限提升。
此修复程序解决了 SSL 通用名称截断问题,该问题在特殊情况下可能导致 SSL 连接被劫持。
使用 SSL 证书时,客户端和服务器都可以配置为验证对方的主机名是否与其提供的证书中的通用名称匹配。但是,从证书中提取的名称被错误地截断为 32 个字符。通常这只会导致验证失败,但如果机器的实际主机名恰好是 32 个字符长,则原则上可能会被欺骗。这种情况实际发生的风险似乎很小,攻击者仍然需要在 PostgreSQL 之外采取额外步骤才能成功利用。
此修复程序从 dumpfile 注释中删除了 '\n' 和 '\r'。
pg_dump 在没有进行清理的情况下将对象名称复制到 SQL 脚本的注释中。包含换行符后跟 SQL 命令的对象名称将导致转储脚本中的 SQL 命令被暴露以供执行。当且如果重新加载转储脚本时,该命令将以运行脚本的用户的特权执行 - 通常是超级用户。
所有受支持的 PostgreSQL 版本均受此影响。请参阅每个版本的发布说明,以获取完整的更改列表,其中包含修复的详细信息和步骤。
立即下载新版本