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。安全性團隊通常不會測試不受支援的版本,但這個問題已經存在很久了。
在至少一個 schema 中具有建立非暫時物件權限的攻擊者,可以使用超級使用者的身分執行任意 SQL 函數。
雖然迅速更新 PostgreSQL 對於大多數使用者來說是最好的補救措施,但無法這樣做的使用者可以透過停用 autovacuum 並避免手動執行 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
與 PL/pgSQL、SIGHUP
處理無法在不重新啟動的情況下套用的組態參數,以及分割區索引查找的邊緣情況。psql
現在以文字模式讀取反引號命令的輸出,而不是二進位模式,因此它可以正確處理換行符號。pg_dump
、pg_restore
、clusterdb
、reindexdb
和 vacuumdb
使用複雜連線字串參數的方式。psql
的 \connect
命令重複使用連線參數時,確保也重複使用先前連線字串中所有未被覆蓋的參數。pg_dump
收集有關擴充功能配置表的每個欄位的資訊,避免在指定 --inserts
時發生崩潰。pg_restore
程序以正確的順序處理引用分割表的外部鍵。contrib/pgcrypto
的多項修正,包括記憶體洩漏修復。此更新也包含 tzdata release 2020d,適用於斐濟、摩洛哥、巴勒斯坦、加拿大育空地區、麥覺理島和凱西站(南極洲)的日光節約時間法規變更;以及法國、匈牙利、摩納哥和巴勒斯坦的歷史修正。
有關可用變更的完整清單,請參閱發布說明。
PostgreSQL 9.5 將於 2021 年 2 月 11 日停止接收修正程式。如果您在生產環境中運行 PostgreSQL 9.5,我們建議您規劃升級到更新、受支援的 PostgreSQL 版本。 請參閱我們的版本政策以獲取更多資訊。
所有 PostgreSQL 更新版本都是累積的。 與其他次要版本一樣,使用者不需要轉儲並重新載入他們的資料庫或使用 pg_upgrade
來應用此更新版本; 您只需關閉 PostgreSQL 並更新其二進位檔案即可。
跳過一個或多個更新版本的使用者可能需要執行其他更新後步驟; 請參閱早期版本的發布說明以瞭解詳細資訊。
如需更多詳細資訊,請參閱發布說明。
注意:PostgreSQL 9.5 將於 2021 年 2 月 11 日停止接收修正程式。 請參閱我們的版本政策以獲取更多資訊。