安全性更新 2012-02-27 發布

由 PostgreSQL 全球開發團隊於 2012-02-27 發布

PostgreSQL 全球開發團隊今天發布了 PostgreSQL 物件關係資料庫系統所有活躍分支的安全性更新,包括版本 9.1.39.0.78.4.118.3.18

pg_dump 的使用者、使用 SSL 憑證進行驗證的使用者或使用 SECURITY DEFINER 的觸發程序的使用者應立即升級其安裝。 強烈建議所有其他資料庫管理員在下一次計畫的停機時間升級您的 PostgreSQL 版本。 有關安全性修復的更多詳細資訊包含在下面。

此更新中錯誤修復影響的功能包括:二進位複寫和熱備援、GIN、WITH、外部資料包裝器、PL/pgsql、PL/python、inet 資料類型、intarray、pgcrypto、pg_upgrade、pg_restore 和 pg_dump。 這些功能的使用者應儘快套用更新。

此版本包含 45 個對 9.1 版本的修復,以及對舊版本的少量修復,包括

  • 修復在與 vacuuming 同時進行插入操作時發生的 btree 索引損壞
  • 從 DROP TABLESPACE 的 WAL 重播期間發生的錯誤中恢復
  • 修復 WAL 重播期間共享緩衝區的瞬態清零
  • 修復 postmaster 以在熱備援崩潰後嘗試重新啟動
  • 修復 SSI 事務清理中的邊緣案例
  • 更改表所有者時,更新每個欄位的權限,而不僅僅是每個表的權限
  • 修復 READ COMMITTED 重新檢查中修改資料的 WITH 子計畫的處理
  • 修復“找不到 CTE 的計畫”的失敗
  • 修復由 INSERT 運算式中的 COLLATE 引起的未支援節點類型錯誤
  • 避免在提交後刪除表文件時發生崩潰
  • 修復最近引入的處理 inet/cidr 時的記憶體洩漏
  • 修復 GIN 成本估算以處理欄位 IN (...) 索引條件
  • 修復 plpgsql 中與 I/O 轉換相關的記憶體洩漏
  • 教導 pg_upgrade 處理 plpython 共享函式庫的重新命名(影響升級到 9.1)

與其他小版本一樣,使用者無需傾印和重新載入其資料庫或使用 pg_upgrade 即可套用此更新版本; 您只需關閉 PostgreSQL 並更新其二進位檔案即可。 重新啟動資料庫後執行更新後的步驟。

此更新包含以下問題的三個安全性修復

  • CVE-2012-0866:不會檢查觸發程序呼叫的函數的權限。

此修復可防止使用者定義觸發程序,這些觸發程序執行使用者沒有 EXECUTE 權限的函數。

CREATE TRIGGER 未對要呼叫的觸發程序函數進行任何權限檢查。 沒有特權的資料庫使用者可以將觸發程序函數附加到他們擁有的表,並使其在其選擇的資料上被呼叫。 通常,這將以表所有者的權限執行,因此不會提供額外的功能。 但是,如果觸發程序函數標記為 SECURITY DEFINER,則可能會發生權限提升。

  • CVE-2012-0867:SSL 憑證名稱檢查被截斷為 32 個字元,在某些情況下允許連線欺騙。

這修復了 SSL 一般名稱截斷,這可能允許在特殊情況下劫持 SSL 連線。

使用 SSL 憑證時,用戶端和伺服器都可以配置為根據其提供的憑證中的一般名稱驗證另一方的主機名稱。 但是,從憑證中提取的名稱被錯誤地截斷為 32 個字元。 通常,這只會導致驗證失敗,但如果機器的實際主機名稱正好是 32 個字元長,則原則上可能會被欺騙。 這種情況實際發生的風險似乎不大,並且攻擊者仍然需要在 PostgreSQL 之外採取額外的步驟才能成功利用。

  • CVE-2012-0868:可以利用物件名稱中的換行符在載入 pg_dump 文件時執行程式碼。

此修復從 dumpfile 註解中刪除 '\n' 和 '\r'。

pg_dump 將物件名稱複製到 SQL 腳本中的註解中,而未對其進行清理。 包含換行符和 SQL 命令的物件名稱將導致 dump 腳本,其中 SQL 命令被暴露以供執行。 當且如果重新載入 dump 腳本時,該命令將以執行該腳本的任何人的權限執行 - 通常是超級使用者。

所有支援的 PostgreSQL 版本都受到影響。 有關每個版本的完整變更列表,請參閱版本說明,其中包含修復和步驟的詳細資訊。

立即下載新版本