pgvector 0.8.7 修補 IVFFlat 建索引緩衝區溢位,可導致任意程式碼執行
PostgreSQL News · 2026-10-05
pgvector 0.8.7 修掉 IVFFlat 索引建立過程中的緩衝區溢位,漏洞編號 CVE-2026-103484,官方說明它可導致任意程式碼執行。這是 0.8.x 系列第二次修同一類問題,0.8.6 只處理了 32 位元系統上的情況,這次的修補範圍不限於此。
維護者在 issue #1036 於 2026-10-01 公開此漏洞,PostgreSQL 官網在 2026-10-05 發布公告。
漏洞機制
advisory 的描述很短:能建立 IVFFlat 索引的資料庫使用者,可以寫入越界資料,進而執行任意程式碼。攻擊面是索引建立這個動作本身,而不是查詢向量的路徑。
advisory 沒有公開具體的越界位置、觸發條件或利用方式,release notes 也只寫「Fixed buffer overflow with IVFFlat index build」。所以目前無法判斷哪些資料或參數組合會觸發,只能以「能建 IVFFlat 索引」作為風險邊界。
漏洞由 Compass Security 的 Emanuele Barbeno、Cyrill Bannwart、Urs Mueller 與 Lukasz D 回報。
受影響版本與這次的歷史
advisory 列出受影響版本為 0.8.6 以下,修正版本為 0.8.7。對照 CHANGELOG,近期同類修補如下:
| 版本 | 日期 | 相關修補 |
|---|---|---|
0.8.2 | 2026-02-25 | 平行 HNSW 建索引的緩衝區溢位(#959) |
0.8.6 | 2026-07-29 | 32 位元系統上 IVFFlat 建索引的緩衝區溢位(#1006) |
0.8.7 | 2026-10-01 | IVFFlat 建索引的緩衝區溢位(#1036) |
換句話說,如果你在 7 月已經升到 0.8.6 並以為 IVFFlat 這條路已經處理完,還是需要再升一次。0.8.6 的修補明確標示針對 32 位元系統,而 0.8.7 的條目沒有這個限定。
0.8.7 的其他改動
同一版還修了一個非資安問題:沒有符合資料列時,avg 聚合會報錯。這不影響升級決策,但如果你的應用曾為此加過 workaround,升級後可以重新檢查。
影響範圍
- 讓應用程式帳號自行建索引的服務:例如在 migration 或多租戶流程中,執行階段帳號擁有建立 IVFFlat 索引權限的系統,攻擊面最大。
- 託管式 PostgreSQL 使用者:extension 版本由供應商控制,要確認供應商提供的 pgvector 是否已到
0.8.7,release notes 未說明各家的更新時程。 - 只用 HNSW 索引的部署:advisory 只提到 IVFFlat 建索引,未說明 HNSW 是否受影響。這點 release notes 未說明,保守起見仍建議升級。
在升級前可以先盤點哪些角色能建立索引,並檢查現有版本:
-- 查目前安裝的版本
SELECT extversion FROM pg_extension WHERE extname = 'vector';
-- 安裝新版套件或編譯 0.8.7 之後,在各資料庫內執行
ALTER EXTENSION vector UPDATE;extension 套件更新後,需要在每個有啟用 vector 的資料庫各執行一次 ALTER EXTENSION,只更新作業系統套件並不會改變資料庫內已載入的 extension 版本紀錄。若無法立即升級,advisory 只說「在可能時升級」,沒有提供其他緩解辦法;可行的暫行做法是限縮誰能建立索引,但這是推論,不是官方建議。
原始來源:PostgreSQL News 公告、pgvector issue #1036、pgvector CHANGELOG