回最新 CVE 列表

CVE-2026-120141 PostgreSQL 物化 SRF 型別混淆可導致任意程式碼執行

揭露日期 2026-11-12CVSS 3.1:CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H

對象網管資安IT開發

CWE-843 CWE-843

未列入 CISA KEV

PoC 狀態未確認

三句重點

成因
執行器重複使用物化 SRF 的 tuple descriptor,RECORD 實際 rowtype 變更後形成型別混淆。
影響
官方評為能以執行資料庫的作業系統使用者身分執行任意程式碼,亦可讀取任意 out-of-line 值、錯誤結果與崩潰。
條件
已通過驗證且可執行 SQL 的角色,在 SELECT 目標欄呼叫回傳不確定 RECORD 的物化 SRF。

版本比對

套件❌ 受影響版本✅ 安全版本
PostgreSQL core server14.x < 14.25;15.x < 15.20;16.x < 16.16;17.x < 17.12;18.x < 18.7>= 18.7、17.12、16.16、15.20、14.25

修補方式

升級至 18.7、17.12、16.16、15.20、14.25 以上版本。

攻擊思路

  1. 取得已驗證 SQL 權限:攻擊者須先通過 PostgreSQL 驗證;任何可執行 SQL 的資料庫角色即可觸發,官方說明不需建立自訂物件。 來源
  2. 呼叫物化 RECORD SRF:在 SELECT 目標欄使用回傳不確定 RECORD 的物化 set-returning function,並讓多次呼叫的實際 rowtype 不同;官方點名內建 json_populate_recordset()。 來源
  3. 觸發型別混淆:執行器對物化結果重複使用同一個 tuple descriptor 與 slot,rowtype 變更後仍以舊 shape 解譯 tuple,造成 CWE-843 型別混淆。 來源
  4. 區分不受影響路徑:置於 FROM 子句、由查詢提供 tuple descriptor 核對每一列的 table function 路徑,以及 value-per-call SRF,官方 commit 寫明不在此漏洞範圍。 來源
  5. 達成記憶體安全影響:修補說明記載可讀取任意 out-of-line 值、產生錯誤結果與崩潰;官方安全公告評為能以執行資料庫的作業系統使用者身分執行任意程式碼。 來源

偵測提示

暫時緩解

升級至 PostgreSQL 18.7、17.12、16.16、15.20 或 14.25。小版本更新不需 dump/restore。官方未提供可完全替代升級的 workaround。應限制可登入並執行 SQL 的角色與來源網段、關閉不必要的公開資料庫連線,並避免把不可信輸入拼進 SQL。只要低權限帳號仍能執行任意 SQL,此漏洞仍可被觸發。PostgreSQL 14 此版為最終釋出,建議規劃升級到仍支援的大版本。

通報團隊

複製成可直接貼到 Slack 或 Email 的通報文字。

預覽通報內容
🚨【資安漏洞通報】CVE-2026-120141
等級:High (8.8)
受影響套件:PostgreSQL core server 14.x < 14.25;15.x < 15.20;16.x < 16.16;17.x < 17.12;18.x < 18.7
漏洞簡述:執行器重複使用物化 SRF 的 tuple descriptor,RECORD 實際 rowtype 變更後形成型別混淆。;官方評為能以執行資料庫的作業系統使用者身分執行任意程式碼,亦可讀取任意 out-of-line 值、錯誤結果與崩潰。;已通過驗證且可執行 SQL 的角色,在 SELECT 目標欄呼叫回傳不確定 RECORD 的物化 SRF。
建議措施:升級至 18.7、17.12、16.16、15.20、14.25 以上版本
詳細連結:https://cve.eacc.online/cve/CVE-2026-120141

參考連結