PostgreSQL:PostgreSQL 13.1、12.5、11.10、10.15、9.6.20 和 9.5.24 版本已發布!

張貼於 2020-11-12,由 PostgreSQL 全球開發團隊發布
PostgreSQL 專案 安全性

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,我們建議您規劃升級事宜。

如需完整的變更清單,請查看發布說明

安全性問題

CVE-2020-25695:多個功能逃脫了「安全性限制操作」沙箱

受影響的版本:9.5 - 13。安全性團隊通常不會測試不受支援的版本,但這個問題已經存在很久了。

在至少一個 schema 中具有建立非暫時物件權限的攻擊者,可以使用超級使用者的身分執行任意 SQL 函數。

雖然迅速更新 PostgreSQL 對於大多數使用者來說是最好的補救措施,但無法這樣做的使用者可以透過停用 autovacuum 並避免手動執行 ANALYZECLUSTERREINDEXCREATE INDEXVACUUM FULLREFRESH MATERIALIZED VIEW 或從 pg_dump 命令的輸出還原,來繞過此漏洞。在此解決方案下,效能可能會迅速下降。

沒有 FULL 選項的 VACUUM 是安全的,並且當受信任的使用者擁有目標物件時,所有命令都是可以的。

PostgreSQL 專案感謝 Etienne Stalmans 報告此問題。

CVE-2020-25694:重新連線可能會降低連線安全性設定

受影響的版本:9.5 - 13。安全性團隊通常不會測試不受支援的版本,但這個問題已經存在很久了。

許多 PostgreSQL 提供的用戶端應用程式都具有建立額外資料庫連線的選項。其中一些應用程式僅重複使用基本的連線參數(例如 hostuserport),而捨棄其他參數。如果這樣捨棄了與安全性相關的參數(例如 channel_bindingsslmoderequirepeergssencmode),則攻擊者就有機會完成 MITM 攻擊或觀察到明文傳輸。

受影響的應用程式包括 clusterdbpg_dumppg_restorepsqlreindexdbvacuumdb。僅當使用包含與安全性相關參數的連線字串來呼叫受影響的用戶端應用程式時,才會出現此漏洞。

這也修正了 psql\connect 命令如何重複使用連線參數,即現在重複使用先前連線字串中所有未覆寫的參數。

PostgreSQL 專案感謝 Peter Eisentraut 報告此問題。

CVE-2020-25696:psql\gset 允許覆寫經過特殊處理的變數

受影響的版本:9.5 - 13。安全性團隊通常不會測試不受支援的版本,但此問題很可能隨著 9.3 版本中首次引入該功能而出現。

\gset 元指令會根據查詢結果設定 psql 變數,但不會區分控制 psql 行為的變數。如果互動式 psql 會話在使用受感染的伺服器查詢時使用 \gset,則攻擊者可以以執行 psql 的作業系統帳戶身分執行任意程式碼。在未修補的 psql 中,將 \gset 與未在經過特殊處理的變數中找到的前置詞(例如,任何小寫字串)一起使用,可以防止攻擊。

PostgreSQL 專案感謝 Nick Cleaton 報告此問題。

錯誤修正和改進

此更新還修正了過去幾個月報告的 65 多個錯誤。其中一些問題僅影響 13 版本,但也可能適用於其他受支援的版本。

其中一些修正包括

  • 透過確保 START_REPLICATION 預期兩個「命令完成」事件,來修復複製協定中的中斷。
  • 確保在 PostgreSQL 維護的 SLRU 快取上呼叫 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 欄位。
  • 支援使用文字陣列欄位作為分割區金鑰進行雜湊分割。
  • 允許 jsonpath .datetime() 方法接受 ISO 8601 格式的時間戳記。
  • 在「智慧型」關機期間,確保在所有前景用戶端工作階段完成之前,不會終止背景處理程序,從而修正了中斷平行查詢處理的問題。
  • 針對查詢規劃器和最佳化器進行了多項修正。
  • 確保資料在插入 BRIN 索引之前先進行去 TOAST。這可能會透過類似「toast 值 NNN 缺少區塊編號 0」的錯誤來顯示。如果您在現有的 BRIN 索引中看到類似的錯誤,則應該能夠透過在索引上使用 REINDEX 來更正它。
  • 修正 EXPLAIN 的輸出,使其具有用於增量排序計畫的正確 XML 標籤巢狀結構。
  • 針對記憶體洩漏進行了多項修正,包括涉及 RLS 政策、使用 CALL 與 PL/pgSQL、SIGHUP 處理無法在不重新啟動的情況下套用的組態參數,以及分割區索引查找的邊緣情況。
  • libpq 現在可以支援在 .pgpass 檔案中使用任意長度的行。
  • 在 Windows 上,psql 現在以文字模式讀取反引號命令的輸出,而不是二進位模式,因此它可以正確處理換行符號。
  • 修正 pg_dumppg_restoreclusterdbreindexdbvacuumdb 使用複雜連線字串參數的方式。
  • psql\connect 命令重複使用連線參數時,確保也重複使用先前連線字串中所有未被覆蓋的參數。
  • 確保 pg_dump 收集有關擴充功能配置表的每個欄位的資訊,避免在指定 --inserts 時發生崩潰。
  • 確保並行的 pg_restore 程序以正確的順序處理引用分割表的外部鍵。
  • 針對 contrib/pgcrypto 的多項修正,包括記憶體洩漏修復。

此更新也包含 tzdata release 2020d,適用於斐濟、摩洛哥、巴勒斯坦、加拿大育空地區、麥覺理島和凱西站(南極洲)的日光節約時間法規變更;以及法國、匈牙利、摩納哥和巴勒斯坦的歷史修正。

有關可用變更的完整清單,請參閱發布說明

PostgreSQL 9.5 終止支援通知

PostgreSQL 9.5 將於 2021 年 2 月 11 日停止接收修正程式。如果您在生產環境中運行 PostgreSQL 9.5,我們建議您規劃升級到更新、受支援的 PostgreSQL 版本。 請參閱我們的版本政策以獲取更多資訊。

更新

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

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

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

注意:PostgreSQL 9.5 將於 2021 年 2 月 11 日停止接收修正程式。 請參閱我們的版本政策以獲取更多資訊。

連結