PostgreSQL 16.3、15.7、14.12、13.15 和 12.19 版本已發布!

發布於 2024-05-09,由 PostgreSQL Global Development Group 發布
PostgreSQL 專案 安全性

PostgreSQL Global Development Group 已經發布了所有支援的 PostgreSQL 版本的更新,包括 16.3、15.7、14.12、13.15 和 12.19。 此版本修復了一個安全漏洞和過去幾個月報告的超過 55 個錯誤。

在系統檢視 pg_stats_extpg_stats_ext_exprs 中發現了一個安全漏洞,可能允許經過身份驗證的資料庫使用者看到他們沒有足夠權限檢視的資料。 此漏洞的修復程式僅修復新的 PostgreSQL 安裝,即在使用此修復程式後使用 initdb 實用程式建立的安裝。 如果您有目前的 PostgreSQL 安裝並且擔心此問題,請按照「更新」部分中的說明執行補救步驟。

如需完整的變更列表,請查看發行說明

PostgreSQL 12 終止支援通知

PostgreSQL 12 將於 2024 年 11 月 14 日停止接收修復程式。 如果您在生產環境中運行 PostgreSQL 12,我們建議您計劃升級到較新的、受支援的 PostgreSQL 版本。 有關更多資訊,請參閱我們的版本政策

安全性問題

CVE-2024-4317:將 pg_stats_extpg_stats_ext_exprs 條目的可見性限制為資料表擁有者

CVSS v3.1 基本分數:3.1

受支援的、易受攻擊的版本:14 - 16。

PostgreSQL 內建檢視 pg_stats_extpg_stats_ext_exprs 中缺少授權,允許沒有權限的資料庫使用者讀取其他使用者的 CREATE STATISTICS 命令中最常見的值和其他統計資訊。 最常見的值可能會洩露窺探者無法以其他方式讀取的欄位值或他們無法執行的函數結果。

此修復程式僅修復新的 PostgreSQL 安裝,即在使用此修復程式後使用 initdb 實用程式建立的安裝。 如果您有目前的 PostgreSQL 安裝並且擔心此問題,請按照「更新」部分中的說明執行補救步驟。

PostgreSQL 專案感謝 Lukas Fittl 報告此問題。

錯誤修復和改進

此更新修復了過去幾個月報告的 55 多個錯誤。 下面列出的問題會影響 PostgreSQL 16。其中一些問題也可能影響其他支援的 PostgreSQL 版本。

  • 修復使用多列 VALUES 子句的 INSERT 的問題,其中目標欄位是陣列或複合類型的網域。
  • 使用 MERGE ... DO NOTHING 時,需要目標資料表的 SELECT 權限
  • 根據 SQL 標準,如果在修改期間 MERGE 中的目標列加入到多個來源列,則會擲回錯誤。
  • 修復在布林值欄位上對資料表進行分割,且查詢具有布林值 IS NOT 子句時,錯誤地刪除 NULL 分割區的問題。
  • 使 ALTER FOREIGN TABLE ... SET SCHEMA 將任何擁有的序列移動到新的綱要中。
  • CREATE DATABASE 現在以不區分大小寫的方式識別 STRATEGY 關鍵字。
  • 修復 EXPLAIN 在點陣圖堆積掃描期間計算堆積頁面的方式,以顯示所有已計算的頁面,而不僅僅是具有可見元組的頁面。
  • 避免在刪除孤立的暫存資料表期間發生死鎖。
  • VACUUM 進行了多項修復,其中包括一項可以減少不必要的 I/O 的修復。
  • 多個查詢規劃器修復。
  • 針對安裝具有數千個角色的某些操作新增最佳化。
  • 修復 SQL 語言程序傳回單一複合類型欄位的混淆問題。
  • 修復 date_bin() 中不正確的捨入和溢位危險。
  • 偵測將 interval 新增到/從時間戳記中減去時的整數溢位。
  • 修復了邏輯複寫的幾個競爭條件,包括確定是否需要資料表同步操作。
  • 如果無法將新伺服器工作階段的用戶端通訊端置於非封鎖模式,則斷線。
  • initdb -c 現在以不區分大小寫的方式比對參數名稱。
  • 修復 PL/pgSQL 如何剖析表達式後面的單行註解-- style comments)。

更新

所有 PostgreSQL 更新版本都是累加的。 與其他次要版本一樣,使用者無需傾印和重新載入他們的資料庫或使用 pg_upgrade 即可應用此更新版本; 您只需關閉 PostgreSQL 並更新其二進位檔案即可。

對於受到 CVE-2024-4317 影響並希望解決該問題的現有安裝,您必須執行以下步驟

  1. 在您的 PostgreSQL 安裝的 share 目錄(例如,在 /usr/share/postgresql/ 中)中找到 SQL 腳本 fix-CVE-2024-4317.sql,或從以下 URL 之一從 PostgreSQL git 儲存庫下載它。 您需要使用與您的主要版本匹配的腳本

  2. PostgreSQL 16https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/backend/catalog/fix-CVE-2024-4317.sql;hb=refs/heads/REL_16_STABLE

  3. PostgreSQL 15https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/backend/catalog/fix-CVE-2024-4317.sql;hb=refs/heads/REL_15_STABLE
  4. PostgreSQL 14https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/backend/catalog/fix-CVE-2024-4317.sql;hb=refs/heads/REL_14_STABLE

從上述 URL 中,您可以點擊顯示「raw」的 URL 來下載可以複製和貼上的版本。

請務必使用適用於您的 PostgreSQL 主要版本的腳本。 如果您沒有看到此檔案,則表示您的版本不易受到攻擊(僅 PostgreSQL 14、15 和 16 受到影響),或者您的次要版本太舊而無法包含修復程式。

  1. 在叢集的每個資料庫中,以資料庫超級使用者的身分執行 fix-CVE-2024-4317.sql 腳本。 例如,在 psql 中,如果檔案位於 /usr/share/postgresql/ 中,則此命令如下所示

\i /usr/share/postgresql/fix-CVE-2024-4317.sql

  1. 您也必須在 template0template1 資料庫中執行此腳本,否則您稍後建立的資料庫仍然會存在此漏洞。若要修復 template0,您需要暫時允許其接受連線。您可以使用以下指令來執行此操作:

ALTER DATABASE template0 WITH ALLOW_CONNECTIONS true;

template0template1 中執行 fix-CVE-2024-4317.sql 腳本後,您應該撤銷 template0 接受連線的能力。您可以使用以下指令來執行此操作:

ALTER DATABASE template0 WITH ALLOW_CONNECTIONS false;

跳過一個或多個更新版本的用戶可能需要執行額外的更新後步驟;請參閱先前版本的發布說明以取得更多詳細資訊。

如需更多詳細資訊,請參閱發布說明

連結

如果您對此發布公告有任何更正或建議,請將其發送到 pgsql-www@lists.postgresql.org 公開的郵件列表