PostgreSQL 內建檢視 pg_stats_ext 和 pg_stats_ext_exprs 中存在的授權缺失問題,允許未經授權的資料庫使用者讀取其他使用者透過 CREATE STATISTICS 命令建立的最常見值和其他統計資訊。最常見的值可能會洩露竊聽者無法讀取的列值,或者洩露他們無法執行的函式的結果。僅安裝不受影響的版本可以修復全新的 PostgreSQL 安裝,即在安裝該版本後使用 initdb 工具建立的安裝。當前的 PostgreSQL 安裝將繼續存在漏洞,除非按照發行說明中的說明進行操作,發行說明在下方部分中提供。在 14-16 的主要版本中,PostgreSQL 16.3、15.7 和 14.12 之前的次要版本受到影響。PostgreSQL 14 之前的版本不受影響。
此修復程式僅修復全新的 PostgreSQL 安裝,即在應用此修復程式後使用 initdb 工具建立的安裝。如果您使用的是當前 PostgreSQL 安裝並對此問題感到擔憂,請按照以下補救步驟解決該問題。
在 PostgreSQL 安裝的 share 目錄中查詢 SQL 指令碼 fix-CVE-2024-4317.sql(例如,在 /usr/share/postgresql/ 中),或從下方的 PostgreSQL git 儲存庫 URL 下載。您需要使用與您的主版本匹配的指令碼。
PostgreSQL 16: https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/backend/catalog/fix-CVE-2024-4317.sql;hb=refs/heads/REL_16_STABLE
從上面的 URL,您可以點選顯示“raw”的連結下載可以複製貼上的版本。
請確保使用適合您的 PostgreSQL 主版本的指令碼。如果您沒有看到此檔案,則表示您的版本不受影響(僅 PostgreSQL 14、15 和 16 受影響),或者您的次要版本太舊而未包含此修復程式。
fix-CVE-2024-4317.sql 指令碼。例如,在 psql 中,如果檔案位於 /usr/share/postgresql/,則此命令將如下所示:\i /usr/share/postgresql/fix-CVE-2024-4317.sql
template0 和 template1 資料庫中執行此指令碼,否則您以後建立的資料庫將仍然存在漏洞。要修復 template0,您需要暫時允許它接受連線。您可以使用以下命令執行此操作:ALTER DATABASE template0 WITH ALLOW_CONNECTIONS true;
在 template0 和 template1 中執行 fix-CVE-2024-4317.sql 指令碼後,您應該撤銷 template0 接受連線的許可權。您可以使用以下命令執行此操作:
ALTER DATABASE template0 WITH ALLOW_CONNECTIONS false;
PostgreSQL 專案感謝 Lukas Fittl 報告此問題。
| 受影響版本 | 已修復版本 | 修復釋出日期 |
|---|---|---|
| 16 | 16.3 | 2024 年 5 月 9 日 |
| 15 | 15.7 | 2024 年 5 月 9 日 |
| 14 | 14.12 | 2024 年 5 月 9 日 |
有關 PostgreSQL 版本資訊 的更多資訊,請訪問 版本資訊頁面。
| 總體得分 | 3.1 |
|---|---|
| 元件 | 核心伺服器 |
| 向量 | AV:N/AC:H/PR:L/UI:N/S:U/C:L/I:N/A:N |
如果您希望報告 PostgreSQL 中的新安全漏洞,請傳送電子郵件至 security@postgresql.org。
如需報告非安全相關錯誤,請參閱 報告錯誤 頁面。