8.8High
未列入 CISA KEV
PoC 狀態未確認
三句重點
- 成因
- 執行器重複使用物化 SRF 的 tuple descriptor,RECORD 實際 rowtype 變更後形成型別混淆。
- 影響
- 官方評為能以執行資料庫的作業系統使用者身分執行任意程式碼,亦可讀取任意 out-of-line 值、錯誤結果與崩潰。
- 條件
- 已通過驗證且可執行 SQL 的角色,在 SELECT 目標欄呼叫回傳不確定 RECORD 的物化 SRF。
版本比對
| 套件 | ❌ 受影響版本 | ✅ 安全版本 |
|---|---|---|
| PostgreSQL core server | 14.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 以上版本。
攻擊思路
- 取得已驗證 SQL 權限:攻擊者須先通過 PostgreSQL 驗證;任何可執行 SQL 的資料庫角色即可觸發,官方說明不需建立自訂物件。 來源
- 呼叫物化 RECORD SRF:在 SELECT 目標欄使用回傳不確定 RECORD 的物化 set-returning function,並讓多次呼叫的實際 rowtype 不同;官方點名內建 json_populate_recordset()。 來源
- 觸發型別混淆:執行器對物化結果重複使用同一個 tuple descriptor 與 slot,rowtype 變更後仍以舊 shape 解譯 tuple,造成 CWE-843 型別混淆。 來源
- 區分不受影響路徑:置於 FROM 子句、由查詢提供 tuple descriptor 核對每一列的 table function 路徑,以及 value-per-call SRF,官方 commit 寫明不在此漏洞範圍。 來源
- 達成記憶體安全影響:修補說明記載可讀取任意 out-of-line 值、產生錯誤結果與崩潰;官方安全公告評為能以執行資料庫的作業系統使用者身分執行任意程式碼。 來源
偵測提示
- PostgreSQL 查詢日誌與稽核:已驗證連線在 SELECT 目標欄呼叫 json_populate_recordset 或 jsonb_populate_recordset,且同一查詢中 RECORD 引數的實際欄位結構多次不同。
- 明文 frontend/backend 協定:Query 或 Parse 內容出現上述函式名稱;優先關注 target list 用法。啟用 TLS 時網路規則看不到 SQL 內容。
- 後端行程與伺服器日誌:未修補 14.x–18.x 實例在該類查詢後出現崩潰、錯誤結果或異常記憶體解譯跡象。
- 角色權限與連線來源:檢查可登入並任意執行 SQL 的角色、不必要的公開資料庫連線,以及應用層是否把不可信輸入拼進 SQL。
- 查詢寫法範圍判斷:官方 commit 寫明 FROM 路徑以查詢提供的 tuple descriptor 核對每一列不受影響;value-per-call SRF 亦不在此 CVE 範圍。
暫時緩解
升級至 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
參考連結
- https://www.postgresql.org/support/security/CVE-2026-120141/
- https://www.postgresql.org/about/news/postgresql-187-1712-1616-1520-1425-and-19-rc-2-released-3442/
- https://www.postgresql.org/docs/release/18.7/
- https://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=4fb349500
- https://nvd.nist.gov/vuln/detail/CVE-2026-120141
- https://github.com/CVEProject/cvelistV5/blob/main/cves/2026/120xxx/CVE-2026-120141.json
- https://pganalyze.com/blog/5mins-postgres-18-7-security-release-cve-2026-6460