PostgreSQL 16.1、15.5、14.10、13.13、12.17 和 11.22 版本已發布!

發布於 2023-11-09,作者:PostgreSQL 全球開發團隊
PostgreSQL 專案 安全性

PostgreSQL 全球開發團隊已發布針對所有支援的 PostgreSQL 版本的更新,包括 16.1、15.5、14.10、13.13、12.17 和 11.22。此版本修復了三個安全性漏洞以及過去幾個月中報告的 55 多個錯誤。

此版本包含針對索引的修復程式,在某些情況下,我們建議重新建立索引。 有關更多詳細資訊,請參閱「更新」部分。

有關更改的完整列表,請參閱版本說明

PostgreSQL 11 終止支援通知

這是 PostgreSQL 11 的最終版本。 PostgreSQL 11 現在已終止支援,將不再接收安全性和錯誤修復。 如果您在生產環境中執行 PostgreSQL 11,我們建議您計畫升級到較新、受支援的 PostgreSQL 版本。 有關更多信息,請參閱我們的版本控制策略

安全性問題

CVE-2023-5868:聚合函數呼叫中的記憶體洩露

CVSS v3 基礎分數:4.3

受影響且受支援的版本:11 - 16。 安全團隊通常不測試不受支援的版本,但此問題已存在很長時間。

接收「未知」類型參數的某些聚合函數呼叫可能會洩露伺服器記憶體的位元組,從「未知」類型值的末尾到下一個零位元組。 通常,可以透過沒有類型指定的字串文字取得「未知」類型的值。 我們尚未確認或排除攻擊的可行性,這些攻擊會安排在洩露的位元組中存在顯著的機密資訊。

PostgreSQL 專案感謝 Jingzhou Fu 報告此問題。

CVE-2023-5869:陣列修改中,整數溢位導致的緩衝區溢位

CVSS v3 基礎分數:8.8

受影響且受支援的版本:11 - 16。 安全團隊通常不測試不受支援的版本,但此問題已存在很長時間。

在修改某些 SQL 陣列值時,缺少溢位檢查讓已驗證的身分資料庫使用者將任意位元組寫入到一個記憶體區域,這會促進任意程式碼執行。 缺少溢位檢查也讓已驗證的身分資料庫使用者讀取廣泛的伺服器記憶體區域。 CVE-2021-32027 修復涵蓋了此描述的一些攻擊,但它遺漏了其他的攻擊。

PostgreSQL 專案感謝 Pedro Gallegos 報告此問題。

CVE-2023-5870:角色 pg_signal_backend 可以對某些超級使用者處理程序發出訊號

CVSS v3 基礎分數:2.2

受影響且受支援的版本:11 - 16。 安全團隊通常不測試不受支援的版本,但此問題已存在很長時間。

文件說明 pg_signal_backend 角色無法對「超級使用者擁有的後端」發出訊號。 相反地,它可以對背景工作者發出訊號,包括邏輯複寫啟動器。 它可以對 autovacuum 工作者和 autovacuum 啟動器發出訊號。 對 autovacuum 工作者和這兩個啟動器發出訊號不會提供有意義的攻擊,因此利用此漏洞需要一個具有較少彈性的背景工作者的非核心延伸模組。 例如,一個不會自動重新啟動的非核心背景工作者會遭受到相對於該特定背景工作者的阻斷服務。

PostgreSQL 專案感謝 Hemanth Sandrana 和 Mahendrakar Srinivasarao 報告此問題。

錯誤修復和改進

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

  • 修復了 GiST 索引在「頁面分割」操作期間行為不正確的問題,這可能導致後續索引搜尋中的結果不正確。 安裝此更新後,請重新建立索引 GiST 索引。
  • 修復了 B 樹索引會錯誤地對 interval 欄位進行重複資料刪除的問題。 安裝此更新後,請重新建立索引包含 interval 欄位的任何 B 樹索引。
  • 在使用 minmax_multi opsclass 時,提供對 BRIN 索引中 datetimestamptztimestamp 值的更有效率的索引。 雖然不是必需的,但我們建議在安裝此更新後重新建立索引包含這些資料類型的 BRIN 索引。
  • 修復了將大量資料表插入分割資料表的問題。
  • 修復了具有多個分割鍵的雜湊分割資料表,在步驟產生和執行階段修剪期間可能導致在某些情況下發生當機的問題。
  • 如果將 pgrowlocks() 應用於分割資料表,則擲回正確的錯誤

  • 修復了在使用 READ COMMITTED 模式時,在 MERGE 期間,並行更新的列的重新檢查不一致的問題。

  • 即使父資料表受限於條件約束,也可以在繼承的 UPDATE/DELETE/MERGE 中正確識別目標資料表。
  • 修復了建構的 tsvector 的過度配置。
  • 修復了 ALTER SUBSCRIPTION 以套用 run_as_owner 選項中的變更。
  • 針對 COPY FROM 的數個修復,
  • 針對使用 pg_control 處理讀取撕裂的數個修復。
  • 修復了在規劃具有 ORDER BYDISTINCT 選項的聚合函數時發生的「找不到要排序的路徑鍵項目」錯誤。
  • 啟用 track_io_timing 時,將關係擴充操作所花費的時間包括為寫入時間。
  • 追蹤快取的 CALL 陳述式的依賴性,並在需要時重新規劃它們。
  • 在讀取 WAL 時,將記憶體不足錯誤視為 FATAL
  • 修復了 pg_dump 以傾印訂閱的新 run_as_owner 選項。
  • 修復了 pg_restore,以便選擇性還原將包含所選資料表的資料表層級和欄位層級 ACL。
  • 新增邏輯到 pg_upgrade 以檢查是否使用了過時的資料類型 abstimereltimetinterval
  • 修復了 vacuumdb,以便多個 -N 切換確實排除多個結構描述中的資料表。
  • amcheck 將不再報告中斷的頁面刪除為損毀。
  • 修復了 btree_gin 索引在 interval 欄位上,以便在使用 <<= 運算子時正確傳回資料。

更新

所有 PostgreSQL 更新版本都是累積性的。 與其他次要版本一樣,使用者不需要傾印和重新載入其資料庫或使用 pg_upgrade 才能套用此更新版本; 您可以簡單地關閉 PostgreSQL 並更新其二進位檔。

我們建議在套用此更新後重新建立索引某些類型的索引,包括

  • GiST 索引
  • 使用 interval 資料類型的 B 樹索引
  • 使用 datetimestamptztimestamp 資料類型以及 minmax_multi opsclass 的 BRIN 索引

在 PostgreSQL 12 及以上版本,您可以使用 REINDEX CONCURRENTLY 來避免阻擋對受影響索引和資料表的寫入,例如:

REINDEX INDEX CONCURRENTLY your_index_name;

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

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

連結

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