PostgreSQL 是常用的開源關聯式資料庫,資料庫伺服器與備份、管理工具可以分開安裝在不同主機。PostgreSQL 在 2026 年 8 月 13 日更新所有仍受支援的版本,一次修補 28 個安全漏洞與 110 多個 bug。這批漏洞不只位於資料庫伺服器,也涵蓋 pg_dump、psql 等備份與管理工具,以及 pg_stat_statements、pgcrypto 等擴充模組。
其中受到較多關注的 CVE-2026-14669,是 to_char(timestamptz) 處理特製時區資料時發生的堆積緩衝區溢位(heap buffer overflow),成功利用後可能以 PostgreSQL 服務使用的作業系統帳號執行任意程式碼,通用弱點評分系統(CVSS)3.1 評分為 8.8。不過,攻擊者必須先取得可連線並執行相關 SQL 的低權限資料庫角色,並非不必登入就能從網路利用。
這次更新的代表性漏洞
這次修補的 28 個漏洞分布在伺服器與用戶端工具。以下挑出 4 個可能造成任意程式碼或命令執行的代表性問題;危險分數採用 PostgreSQL 官方列出的 CVSS 分數,分數相同也不代表攻擊前提與受影響主機相同。
| 編號 | 漏洞名稱 | 危險分數(CVSS) |
|---|---|---|
| CVE-2026-14669 | to_char() 堆積緩衝區溢位 | 8.8 |
| CVE-2026-19385 | pg_dump 堆積緩衝區溢位 | 8.8 |
| CVE-2026-18408 | psql \unrestrict 還原階段命令注入 | 8.8 |
| CVE-2026-6464 | psql COPY 資料列被當成命令執行 | 8.1 |
CVE-2026-14669 如何影響 PostgreSQL
to_char() 是 PostgreSQL 用來把日期、時間或數字轉成指定格式的函式。CVE-2026-14669 出現在 to_char(timestamptz) 處理很長的 POSIX 時區縮寫時;這類字串可以在時區設定中描述標準時間與日光節約時間的縮寫。程式寫入超出原先配置的 heap buffer,可能讓伺服器程序崩潰,也已有人回報可進一步執行任意程式碼。
官方 CVSS vector 是 AV:N/AC:L/PR:L/UI:N,可拆成四個重要條件:能從網路送出請求、利用複雜度低、需要低權限登入,而且不必等待另一名使用者點擊或操作。攻擊者不需要先成為 PostgreSQL 超級使用者(superuser),但仍需要一個能連線並執行相關 SQL 的資料庫角色。
成功利用後,攻擊者能取得 PostgreSQL 伺服器程序所使用的作業系統帳號權限,而不是直接成為主機的 root。如果資料庫服務遵循最小權限、沒有讀取部署金鑰或其他服務憑證的能力,後續影響會受限制;反過來說,若資料庫帳號能讀取敏感檔案、連到內網服務或存取過多掛載磁碟區(volume),漏洞造成的橫向移動風險就會增加。
CVE-2026-14669 是誰發現的
這個漏洞不是只由單一團隊發現。PostgreSQL 的 18.6 版本說明 感謝 Hcamael、Amjad Shahzad、AntAISecurityLab 的 Tan Zhen、Tomer Fichman、Zheng Yu、OpenAI Codex Security 的 Amy Burnett、Rick de Jager、Heewon Song、Sylvie Mayer、Aleksander Alekseev 與 Hillai Ben Sasson 回報問題,代表官方在修補過程中收到多方研究人員的回報。
其中,V12 Security 公開的技術資料 表示 Rick de Jager 與 V12 獨立發現漏洞,並提供可重現任意程式碼執行的概念驗證程式(PoC)。官方名單另外明確標示 AntAISecurityLab 與 OpenAI Codex Security 的研究人員,但沒有公布每位研究者最早發現或私下回報的日期。
目前可以確認的時間是 2026 年 8 月 13 日:PostgreSQL 在這一天公開 CVE-2026-14669,並隨 18.6、17.11、16.15、15.19 與 14.24 發布修補。這是公開揭露日,不應寫成某個團隊在當天首次發現漏洞。
風險不只在資料庫伺服器
這批更新容易被簡化成「PostgreSQL 有遠端任意程式碼執行(RCE)漏洞」,但 28 個漏洞的元件與攻擊前提並不相同。除了核心伺服器,負責備份與還原的電腦也可能成為目標。管理員即使不直接開放資料庫給公網,仍要更新平常執行 pg_dump 與 psql 的工作站、排程主機或執行 CI 工作的主機(runner)。
pg_dump 漏洞也會影響備份主機
CVE-2026-19385 是 pg_dump 處理過長的函式轉換型別清單(function transform list)時發生的 heap buffer overflow。能在來源資料庫建立物件的角色,可以製作特殊內容,等管理員或自動排程執行備份時,嘗試以執行 pg_dump 的作業系統帳號執行程式碼。
這表示備份流程不能只看資料庫伺服器版本。若中央備份機仍使用舊版 PostgreSQL 用戶端工具(client tools),即使來源資料庫已更新,舊的 pg_dump 本身仍可能處理惡意物件。特別是代管資料庫、測試環境或從外部團隊接手的資料庫,不應假設來源內容可信。
psql 還原可能執行來源伺服器注入的命令
CVE-2026-18408 影響 plain-text dump 的還原流程。惡意來源伺服器的 superuser 可以把命令藏進輸出內容,等另一台電腦用 psql 還原時,以執行 psql 的作業系統帳號執行。它需要有人實際進行備份與還原,但也代表「SQL dump 只是文字檔」不等於可以安全執行。
CVE-2026-6464 則位於 COPY FROM STDIN 的錯誤處理。舊版 psql 在伺服器提早拒絕 COPY 時,可能把後面的資料列當成 psql command。官方指出完整攻擊通常還要同時控制伺服器與資料列,因此攻擊複雜度比前述漏洞高,但同樣說明 client tool 需要獨立盤點。
受影響版本與正確修補版本
PostgreSQL 14、15、16、17、18 的舊小版本都在這次更新範圍。PostgreSQL 10 之後,版本號第一段是加入新功能的主版本(major version),第二段則是修正 bug 與安全問題的小版本。各主版本應升級到下列可取得版本:
如果還不熟悉 PostgreSQL 的版本、Schema、型別與維運差異,可以參考本站的 PostgreSQL 給 MySQL/SQL Server 用戶的入門整理 。
- PostgreSQL 18:升級到 18.6
- PostgreSQL 17:升級到 17.11
- PostgreSQL 16:升級到 16.15
- PostgreSQL 15:升級到 15.19
- PostgreSQL 14:升級到 14.24
個別 CVE 頁面把 PostgreSQL 18 的修補點寫成 18.5,但 18.5 在正式出貨前發現功能回歸,因此從未發布。PostgreSQL 專案直接跳過 18.5,實際可安裝的官方現行小版本是 18.6。不要為了對照 CVE 頁面而尋找不存在的正式 18.5 套件。
PostgreSQL 13 與更舊版本已經停止支援。它們沒有列在這次支援版本清單,不代表可以繼續安全使用,也不能據此判定完全不受相同程式碼問題影響。仍在 PostgreSQL 13 的系統應規劃主版本升級;PostgreSQL 14 也將於 2026 年 11 月 12 日結束支援。
升級時需要一起檢查的項目
這是小版本更新(minor release),不需要執行 dump/reload 或 pg_upgrade。一般流程是先確認備份與回復方案,停止 PostgreSQL、更新執行檔,再重新啟動服務。正式環境仍應依作業系統套件、容器映像檔(container image)或雲端供應商的維護流程操作,不要直接混用不同來源的套件。
伺服器與用戶端工具分開盤點
先在資料庫內查伺服器版本,再分別檢查執行備份、還原與維運命令的電腦。SELECT version() 顯示伺服器版本,psql --version 與 pg_dump --version 顯示目前命令列環境使用的用戶端版本;三者可能來自不同主機與套件,不應假設一定相同。
# 查看資料庫伺服器版本
psql -c 'SELECT version();'
# 查看 psql 用戶端版本
psql --version
# 查看 pg_dump 用戶端版本
pg_dump --version
邏輯解碼外掛的允許清單
更新加入新的 output_plugin_libraries 參數,預設只允許 PostgreSQL 隨附的 pgoutput 與 test_decoding。如果邏輯複寫槽(logical replication slot)使用第三方輸出外掛,更新後要先確認外掛可信,再把名稱加入允許清單(allowlist),否則既有複寫或變更資料擷取(CDC)流程可能無法啟動。
GIN、btree_gist 與 ltree 的資料檢查
發布公告另外提醒三種可能需要人工處理的情況。曾以平行方式建立 GIN 索引的資料表,pg_class.reltuples 可能被寫成 Infinity、NaN 或其他不合理值,導致自動清理(autovacuum)與自動分析(autoanalyze)不再處理;更新後應依官方查詢找出異常資料表並執行 ANALYZE。
使用 btree_gist 的 float/bit 索引,或替含有極大量標籤的 ltree 值建立 B-tree 索引,也可能需要 REINDEX。不是所有 PostgreSQL 資料庫都需要重建索引;只有符合公告條件者需要處理。
pgcrypto 與 COPY 腳本的相容性
CVE-2026-14663 影響 pgcrypto 的部分 PGP 加密。當 OpenSSL 拒絕 Blowfish、Twofish、CAST5 或 3DES 等加密演算法時,舊版可能沒有正確回報失敗,產生可輕易還原的內容。使用這些演算法,或以聯邦資訊處理標準模式(FIPS mode)執行的系統,應依版本說明(release notes)找出受影響資料,取回後改用現代加密演算法重新加密。
測試腳本若刻意讓 COPY FROM STDIN 提早失敗,更新後也可能需要在資料尾端補上 \. 結束標記。官方認為一般正式環境的 SQL 腳本不太會依賴這種錯誤行為,但自動化測試仍應檢查。
網路隔離仍重要,但不能取代修補
CVE-2026-14669 需要有效的資料庫登入,因此不把 PostgreSQL 直接暴露在公網、限制 pg_hba.conf、使用最小權限角色與分離不同應用程式帳號,都能降低攻擊者抵達漏洞的機會。資料庫服務的作業系統帳號也不應持有 SSH key、雲端管理憑證或可寫入應用程式部署目錄的權限。
但網路隔離不能處理已取得應用程式資料庫帳號的攻擊者,也保護不了在另一台主機執行的舊版 pg_dump 與 psql。完整處置應同時更新伺服器與用戶端工具、撤除不必要權限,再檢查登入紀錄、異常 SQL、服務崩潰與備份主機上的可疑程序。
常見問答
CVE-2026-14669 不需登入就能遠端利用嗎?
不是。官方 CVSS vector 標示 PR:L,代表需要低權限資料庫身分;但它可以從網路觸發、利用複雜度低,也不需要另一名使用者互動,因此取得一般資料庫帳號後仍可能造成嚴重影響。
升級小版本需要重建資料庫嗎?
不需要。PostgreSQL 官方說明,14.24、15.19、16.15、17.11 與 18.6 都是小版本,可停止服務、更新執行檔並重新啟動,不需要 dump/reload 或 pg_upgrade。不過仍要閱讀版本說明(release notes),完成符合自身環境的額外檢查。
只更新資料庫伺服器就夠了嗎?
不夠。這批漏洞包含 pg_dump、psql 與 ECPG 用戶端,因此執行備份、還原、資料搬移與維運腳本的電腦也要更新。伺服器與用戶端不一定安裝在同一台主機,應分開盤點。
使用 Docker 還會受影響嗎?
會。Docker 要更新到包含修補版本的映像檔並重新建立容器,只重新啟動原有容器不會更換 PostgreSQL 執行檔。宿主機、備份容器與 CI 使用的 pg_dump、psql 也要分開更新。
Azure、AWS RDS 或 Google Cloud SQL 託管資料庫需要處理嗎?
需要確認,但通常不要自行登入主機安裝 PostgreSQL 套件。Azure Database for PostgreSQL Flexible Server 會在定期維護中自動升級小版本,嚴重漏洞的修補也可能縮短通知時間或直接安排維護;AWS RDS for PostgreSQL 是否自動升級,取決於 Auto minor version upgrade 設定、AWS 指定的自動升級版本與維護時段;Google Cloud SQL 則可使用自助維護(self-service maintenance),或等待下一個維護時段套用資料庫與作業系統更新。
不論使用哪一家,都應在控制台、維護紀錄或 SELECT version() 確認實例已進入包含修補的版本,而不是只看供應商已發布公告。這類更新通常會重新啟動資料庫,應檢查維護是否成功、應用程式是否正常重連、高可用與唯讀副本(read replica)是否都完成更新。若平台尚未提供目標小版本,應依供應商安全公告或支援案件安排處置,不要把自行替換託管服務執行檔當成解法。
供應商只管理託管端的資料庫引擎。開發機、CI runner、備份主機與資料搬移工作使用的 pg_dump、psql 仍由使用者負責更新;GIN、btree_gist、ltree 與第三方 logical decoding plugin 的升級後檢查,也要依實際用法和供應商支援範圍確認。
PostgreSQL 13 沒列在受影響版本,是否代表安全?
不能這樣判斷。PostgreSQL 13 已於 2025 年 11 月停止支援,不再列入目前支援版本的修補清單。繼續使用已停止支援的版本會失去後續安全修補,應升級到仍受支援的主版本。
參考來源
- PostgreSQL 18.6、17.11、16.15、15.19、14.24 發布公告
- PostgreSQL Security Information
- PostgreSQL CVE-2026-14669 安全公告
- PostgreSQL CVE-2026-19385 安全公告
- PostgreSQL CVE-2026-18408 安全公告
- PostgreSQL CVE-2026-6464 安全公告
- PostgreSQL CVE-2026-14663 安全公告
- PostgreSQL 18.6 Release Notes
- V12 Security:PostgreSQL to_char Heap-Overflow RCE
- PostgreSQL Versioning Policy
- Azure Database for PostgreSQL Planned Maintenance
- Amazon RDS for PostgreSQL Automatic Minor Version Upgrades
- Cloud SQL for PostgreSQL Maintenance Updates