PostgreSQL 11.5、10.10、9.6.15、9.5.19、9.4.24 和 12 Beta 3 已發布!

發布於 2019-08-08,作者:PostgreSQL 全球開發團隊
PostgreSQL 專案 安全性

PostgreSQL 全球開發團隊已發布對所有支援版本的資料庫系統的更新,包括 11.5、10.10、9.6.15、9.5.19 和 9.4.24,以及 PostgreSQL 12 的第三個 Beta 版本。此版本修正了 PostgreSQL 伺服器中的兩個安全性問題、PostgreSQL Windows 安裝程式之一中的兩個安全性問題,以及自先前版本以來報告的 40 多個錯誤。

使用者應盡快安裝這些更新。

關於 PostgreSQL 12 Beta 的注意事項

本著 PostgreSQL 開放原始碼社群的精神,我們強烈建議您在資料庫系統中測試 PostgreSQL 12 的新功能,以幫助我們消除可能存在的任何錯誤或其他問題。雖然我們不建議您在生產環境中執行 PostgreSQL 12 Beta 3,但我們鼓勵您尋找方法針對此 Beta 版本執行典型的應用程式工作負載。

您的測試和回饋將有助於社群確保 PostgreSQL 12 版本維持我們提供世界上最先進的開放原始碼關聯式資料庫的穩定、可靠版本的標準。

安全性問題

此版本已關閉四個安全性漏洞

CVE-2019-10208pg_temp 中的 TYPESECURITY DEFINER 執行期間執行任意 SQL

受影響版本:9.4 - 11

給定一個合適的 SECURITY DEFINER 函數,攻擊者可以使用函數所有者的身份執行任意 SQL。攻擊需要函數的 EXECUTE 權限,該函數本身必須包含一個具有不精確參數類型匹配的函數呼叫。例如,length('foo'::varchar)length('foo') 是不精確的,而 length('foo'::text) 是精確的。 作為利用此漏洞的一部分,攻擊者使用 CREATE DOMAINpg_temp 結構描述中建立類型。 攻擊模式和修復方式與 CVE-2007-2138 類似。

編寫 SECURITY DEFINER 函數仍然需要
遵循文件中註明的注意事項

https://postgres.tw/docs/current/sql-createfunction.html#SQL-CREATEFUNCTION-SECURITY

PostgreSQL 專案感謝 Tom Lane 報告此問題。

CVE-2019-10209:雜湊子計畫的跨類型比較中的記憶體洩漏

受影響版本:11

在包含假設的、使用者定義的雜湊相等運算子的資料庫中,攻擊者可以讀取伺服器記憶體的任意位元組。 為了使攻擊成為可能,超級使用者需要建立不尋常的運算子。 對於目的不是為了攻擊而設計的運算子來說,有可能具有啟用攻擊的屬性,但我們不知道具體的例子。

PostgreSQL 專案感謝 Andreas Seltenreich 報告此問題。

CVE-2019-10210:EnterpriseDB Windows 安裝程式將 PostgreSQL 超級使用者密碼寫入未受保護的暫存檔

受影響版本:9.4 - 11 版本的 EnterpriseDB Windows 安裝程式

EnterpriseDB Windows 安裝程式將密碼寫入其安裝目錄中的暫存檔,建立初始資料庫,然後刪除該檔案。 在檔案存在的幾秒鐘內,本地攻擊者可以從該檔案讀取 PostgreSQL 超級使用者密碼。

PostgreSQL 專案感謝 Noah Misch 報告此問題。

CVE-2019-10211:EnterpriseDB Windows 安裝程式捆綁的 OpenSSL 從未受保護的目錄執行程式碼

受影響版本:9.4 - 11 版本的 EnterpriseDB Windows 安裝程式

當資料庫伺服器或 libpq 客戶端函式庫初始化 SSL 時,libeay32.dll 嘗試從硬式編碼的目錄讀取設定。 通常,該目錄不存在,但任何本地使用者都可以建立它並注入設定。 此設定可以指示 OpenSSL 以執行 PostgreSQL 伺服器或客戶端的用戶身份載入和執行任意程式碼。 大多數 PostgreSQL 客戶端工具和函式庫都使用 libpq,並且可以使用它們遇到此漏洞。 此漏洞與 CVE-2019-5443 非常相似,但它是獨立產生的。 可以透過將環境變數 OPENSSL_CONF 設定為 "NUL:/openssl.cnf" 或任何其他不可能作為檔案存在的名稱來解決此漏洞。

PostgreSQL 專案感謝 curl 安全團隊的 Daniel Gustafsson 報告此問題。

錯誤修正和改進

此更新還修正了過去幾個月報告的 40 多個錯誤。 其中一些問題僅影響版本 11,但許多問題影響所有支援的版本。

其中一些修復包括

  • 修正了在單個命令中修改多個欄位類型時,ALTER TABLE ... ALTER COLUMN TYPE 的問題。 此問題是在先前的累積更新(11.4、10.9、9.6.14、9.5.18、9.4.23 和 12 beta 2)中引入的。
  • 確保分區鍵欄位不會因「間接刪除」而被刪除,例如從刪除鍵欄位的資料類型(例如,自訂資料類型)的串聯中刪除。 此修復僅適用於新建立的分區表:如果您認為您有一個受影響的分區表(例如,分區鍵使用自訂資料類型),您將需要建立一個新表並將您的資料移到其中,或使用 pg_upgrade
  • 如果子分區中有待處理的觸發事件,則防止刪除分區表的觸發器。 這尤其影響外鍵約束,這些約束由觸發器實作。
  • 針對分區的多個額外修復,包括分區修剪的修復,這可能會導致查詢效率低下。
  • 修正了平行雜湊聯結,這可能導致 EXISTS 查詢中出現重複的結果列。
  • 針對查詢規劃器的多個修復。
  • 針對導致查詢死鎖的問題的多個修復。
  • 在重建外鍵約束時,修正了多欄位外鍵。
  • 防止為繼承的表建立擴展統計資訊。
  • 修正了包含 -infinity/infinity 端點的日期範圍的規範化,以確保行為與文件一致。
  • 修正了將非常大的 money 值轉換為 numeric 時遺失小數位數的問題。
  • 修正了返回複合類型的 PL/pgSQL 函數。
  • 使 libpq 忽略連線服務檔案中的 \r 歸位字元,這會在某些邊緣情況下導致連線失敗。
  • 針對 psql 的多個修復,其中包括避免在 SET variable = 後出現不正確的 Tab 鍵完成選項。
  • 提高 contrib/amcheck 的索引驗證的可靠性。
  • 設定 initdb 以首選 C 函式庫定義的時區行為,而不是 localtimeposixrules 定義的行為。 這確保 PostgreSQL 使用「真實」時區名稱,而不是人工名稱。
  • 修正 pg_dump,確保自訂運算子類別以正確的順序傾印,以防止建立無法還原的傾印。
  • 修正使用 -R 選項時,pgbench 中可能發生的鎖定。
  • 修正 MIPS CPU 的自旋鎖定組合語言程式碼,使其可在 MIPS r6 上運作。

此更新還包含 tzdata 2019b 版本,以因應巴西的日光節約時間法規變更,以及香港、義大利和巴勒斯坦的歷史修正。 此更新還新增了對 zic 新的 -b slim 選項的支援,以減少已安裝時區檔案的大小,但 PostgreSQL 目前尚未使用。

如需更多詳細資訊,您可以在此處閱讀完整的版本說明

https://postgres.tw/docs/release/

更新

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

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

PostgreSQL 9.4 將於 2020 年 2 月 13 日停止接收修正。 請參閱我們的版本控制策略以取得更多資訊。

錯誤與相容性測試

每個 PostgreSQL 版本的穩定性很大程度上取決於您,社群,使用您的工作負載和測試工具測試即將推出的版本,以便在 PostgreSQL 12 正式發布之前找到錯誤和回歸問題。 由於這是一個 Beta 版本,資料庫行為、功能細節和 API 的細微變更仍然可能發生。 您的回饋和測試將有助於確定新功能的最終調整,因此請在近期進行測試。 使用者測試的品質有助於確定我們何時可以發布最終版本。

公開問題清單可在 PostgreSQL wiki 中找到。 您可以使用 PostgreSQL 網站上的此表單回報錯誤

https://postgres.tw/account/submitbug/

Beta 時程

這是第 12 版的第三個 Beta 版本。 PostgreSQL 專案將根據測試需要發布其他 Beta 版本,然後發布一個或多個候選版本,直到 2019 年末的最終版本。 如需更多資訊,請參閱Beta 測試頁面。

連結