// 威脅簡報
Microsoft Semantic Kernel(Python)InMemoryVectorStore 篩選條件被當成程式執行
- CVSS
- 9.9 CRITICAL
- CISA KEV
- 未列入
- 弱點類型
- CWE-94
- 主題
- AI 安全
人工審稿 2026-09-23指令測試:未提供漏洞重現:未進行驗證紀錄 ↓
AI 模型替搜尋外掛填的篩選參數,會被 Semantic Kernel 拼成一段 Python 程式再執行;透過提示注入誘導模型,就可能在伺服器上執行任意程式。
| 誰會中 | 使用 Python 版 semantic-kernel 1.39.4 以前、把 InMemoryVectorStore 當搜尋外掛交給模型呼叫(function calling),且使用預設篩選設定的應用。.NET 與 Java 版未被列為受影響。 |
|---|---|
| 後果 | 攻擊者可能以應用程式的權限在主機上執行程式,讀取金鑰、竄改資料或以此為跳板。 |
| 現在該做什麼 | 升級 semantic-kernel 到 1.39.4 以上。正式環境不要使用 InMemoryVectorStore。查看依據(4)
|
| 受影響版本 | 1.39.4 以前的所有版本查看依據(4)
|
| 修好的版本 | 1.39.4 以上查看依據(3)
|
| CVSS 向量 | 顯示完整向量CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H |
| 時間點 |
|
| CISA KEV | 未列入(未列入 KEV 不代表沒有被利用)查看依據(2)
|
藍隊應對手冊
確認、修補 / 緩解、應變、強化。版本符合受影響條件不等於已被入侵;檢查沒有結果也不等於安全,每一項都有能證明與不能證明的範圍。標記的步驟對應下方攻擊流程裡可以擋下攻擊的那一步。
- 01確認 semantic-kernel 版本
Python 版 semantic-kernel 1.39.4 以前受影響,1.39.4 以上已修補。.NET 與 Java 版未被官方公告列為受影響。
唯讀查詢pip show semantic-kernel - 02找出是否把 InMemoryVectorStore 交給模型呼叫
搜尋程式碼裡有沒有 InMemoryVectorStore 或 InMemoryCollection。受影響的條件是把它當搜尋外掛交給模型呼叫(function calling),並使用預設篩選設定;其他向量資料庫連接器未被官方公告列為受影響。
- 03回頭檢查 AI 應用程序產生的可疑子程序
Microsoft 建議檢視「部署受影響版本到升級之間」,AI 應用程序有沒有產生可疑的子程序。
- 01升級到 1.39.4 以上
1.39.4 在原有的語法節點與函式限制之外,再擋下 44 個危險的內部屬性名稱。函式庫本身仍用受限制的 eval 執行篩選字串。
會變更環境pip install -U "semantic-kernel>=1.39.4" - 02正式環境不要使用 InMemoryVectorStore
這是官方公告給的緩解方式;InMemoryVectorStore 原本就是為開發測試設計的。
- 01發現可疑活動時,視為主機可能遭入侵並檢查
Microsoft 建議:視為主機「可能」遭入侵,檢查該主機,並調查這台主機能連到哪些資料與系統。
- 02輪替 AI 代理能存取的憑證與權杖
Microsoft 建議的處置。攻擊者可能以應用程式的權限讀取金鑰。
- 03無法排除時,也輪替主機上的其他金鑰
PlainCVE 建議(不是 Microsoft 的建議):如果無法排除遭利用的可能,保守起見也輪替這台主機上的其他金鑰。
完整修復步驟與說明
- 升級。
pip install -U "semantic-kernel>=1.39.4"。 - 不要在正式環境使用
InMemoryVectorStore。 這是官方公告給的緩解方式;它原本就是為開發測試設計的。 - 檢查是否曾被利用。 Microsoft 建議回頭檢視「部署受影響版本到升級之間」,AI 應用程序有沒有產生可疑的子程序。Microsoft 的建議是:如果發現可疑活動,視為主機可能遭入侵,檢查該主機、輪替 AI 代理能存取的憑證與權杖,並調查這台主機能連到哪些資料與系統。PlainCVE 另外建議:如果無法排除,保守起見也輪替這台主機上的其他金鑰。
- 通用原則。 給模型呼叫的工具只開最小權限;AI 應用用低權限帳號、在容器裡跑。
攻擊流程
從左到右是攻擊發生的順序。藍色盾牌代表這一步可以被擋下,越早擋下越好。點圖示可看細節。
- 攻擊者
把指示藏進模型會讀到的文字
可能是使用者直接輸入,也可能是模型讀取的文件或網頁(間接提示注入)。
防禦: 對模型可呼叫的工具做權限最小化;不可信內容與系統指示分開處理。
- 你的系統
模型呼叫搜尋外掛,自己決定篩選參數
參數內容受到上一步的文字影響,已經不是開發者預期的單純關鍵字。
- 你的系統
參數被拼進一段 Python lambda 字串
舊版用字串組出篩選函式,先檢查語法樹再執行。早期版本用黑名單擋危險名稱;1.39.2 起改成只允許特定語法節點與函式呼叫,但沒有限制可以存取哪些屬性。
防禦: 升級到 1.39.4+:在原有的語法節點與函式限制之外,再擋下危險的內部屬性名稱。
- 你的系統
繞過檢查的程式在主機上執行
Python 的動態特性讓這類檢查很難擋完,攻擊者可經由內部物件屬性取得危險功能。
防禦: 監控 AI 應用程序產生的異常子程序;以低權限帳號與容器隔離執行。
影響範圍
| 條件 | 是否受影響 |
|---|---|
Python semantic-kernel 1.39.4 以前 + 使用 InMemoryVectorStore 搜尋外掛 + 模型可呼叫(function calling)+ 預設篩選設定 | 受影響 |
Python semantic-kernel 1.39.4 以上 | 已修補 |
| 使用其他向量資料庫連接器(不是 InMemory) | 官方公告未列為受影響 |
| .NET / Java 版 Semantic Kernel | 官方公告未列為受影響 |
用 pip show semantic-kernel 看版本,再搜尋程式碼裡有沒有 InMemoryVectorStore 或 InMemoryCollection。
原理
Semantic Kernel 讓開發者把「搜尋資料」這類功能包成外掛,交給 AI 模型自己決定何時呼叫、帶什麼參數。問題出在 InMemory 向量資料庫處理「篩選條件」的方式。
舊版把篩選條件組成一段 Python 程式字串(一個 lambda 函式),再交給 Python 執行。當模型替外掛填參數時,模型產生的文字就會被拼進這段程式裡。
有問題的思路(概念示意,不是原始程式碼):
展開程式碼範例(python)
# 模型決定的參數,被直接拼進程式字串
expr = f"lambda record: record.category == '{model_argument}'"
filter_fn = eval(expr) # 字串變成真的程式開發者並非沒有防範:舊版會先把字串解析成語法樹,只允許 lambda、擋掉 eval、exec、open 等危險名稱。但 Microsoft 的研究文章指出,黑名單在 Python 這種高度動態的語言裡「本質上很脆弱」:透過物件的內部屬性一層層找,不必寫出任何被擋的名字也能拿到危險功能。1.39.2 起的版本已改成允許清單(只允許特定語法節點與函式呼叫),但沒有限制屬性名稱,所以 1.39.4 以前的版本都仍受影響。
這就是 CWE-94(程式碼產生控制不當):本來只該是「資料」的篩選值,變成了「程式」。而把資料送進來的是 AI 模型,模型又可能被提示注入操控,於是整條鏈變成「一段文字 → 伺服器執行程式」。
另一種設計(寫自己的應用程式時可參考的概念示意,不是 1.39.4 的實際修補):
展開程式碼範例(python)
# 篩選條件用結構化資料表示,不經過 eval
filter_spec = {"field": "category", "op": "eq", "value": model_argument}
results = [r for r in records if getattr(r, filter_spec["field"]) == filter_spec["value"]]要注意:semantic-kernel 函式庫本身在 1.39.4 仍然用受限制的 eval 執行篩選字串,並沒有改成上面這種做法。1.39.4 的修補是在原有的語法樹檢查(只允許特定節點類型與函式呼叫)之上,再擋下 44 個危險的內部屬性名稱。對自己的程式來說,更根本的原則是:不要讓模型輸出變成可執行的程式碼。
時間軸
| 日期 | 事件 |
|---|---|
| 2026-02-03 | 修補 PR #13505 開啟 |
| 2026-02-10 | PR 合併,釋出 python-1.39.4 |
| 2026-02-19 | GitHub 安全公告與 CVE 公開 |
| 2026-03-10 | 列入 Microsoft 3 月安全更新指南 |
| 2026-05-07 | Microsoft 發表 AI Agent 框架 RCE 研究文章 |
延伸閱讀
- 同一篇 Microsoft 研究也揭露了 CVE-2026-25592:可被 AI 呼叫的檔案下載功能,能讓沙箱寫檔到主機。
- 相關弱點類型:CWE-94 程式碼產生控制不當、提示注入(OWASP LLM Top 10 的 LLM01)。
- 評分差異:GitHub / NVD 為 CVSS 9.9 Critical;MSRC 標示為 Important、CWE-749。本頁採用 CNA(GitHub)與 NVD 的評分。
驗證紀錄 已人工審稿、核對來源;尚未在我們的環境重現
| 人工審稿 | 2026-09-23 |
|---|
驗證紀錄只寫環境與結果,不公開重現步驟或可攻擊他人系統的程式。詳見 政策.
來源
- 其他semantic-kernel 1.34.0 released with text filters · pypi.org · 查閱 2026-09-24
- 安全公告GHSA-xjw9-4gw8-4rqx — InMemoryVectorStore filter functionality vulnerable to remote code execution · Microsoft(GitHub), 2026-02-19 · 查閱 2026-09-23
- CVE / NVD / OSVCVE-2026-26030 Record · CVE Program, 2026-02-19 · 查閱 2026-09-23
- CVE / NVD / OSVNVD - CVE-2026-26030 · NIST · 查閱 2026-09-23
- 廠商說明MSRC Security Update Guide — CVE-2026-26030 · Microsoft, 2026-03-10 · 查閱 2026-09-23MSRC 將 CWE 列為 CWE-749,嚴重度標示為 Important;GitHub / NVD 為 CWE-94、9.9 Critical。
- 修補 commit / 版本Python: refinement of filtering(PR #13505) · Microsoft(GitHub), 2026-02-10 · 查閱 2026-09-23
- 修補 commit / 版本python-1.39.4 release · Microsoft(GitHub), 2026-02-10 · 查閱 2026-09-23
- 其他in_memory.py at python-1.39.3 (filter allowlist before the fix) · Microsoft(GitHub) · 查閱 2026-09-24
- 修補 commit / 版本in_memory.py at python-1.39.4 (fixed version, still uses restricted eval) · Microsoft(GitHub) · 查閱 2026-09-24
- 研究文章When prompts become shells: RCE vulnerabilities in AI agent frameworks · Microsoft Security Blog, 2026-05-07 · 查閱 2026-09-23
媒體簡報
一句話
微軟開源的 AI 應用開發框架 Semantic Kernel 的 Python 版本有一個漏洞:AI 模型替搜尋功能填寫的參數會被當成程式碼執行。攻擊者只要設法讓模型讀到特製的文字,就可能控制伺服器。微軟已在 2026 年 2 月釋出修補版 1.39.4,目前沒有已遭利用的公開紀錄。
可引用的一句話
當 AI 模型的輸出直接變成程式碼,提示注入就不再只是讓聊天機器人說錯話,而是讓伺服器執行別人的指令。
圖片
引用時請標示「PlainCVE」並附上本頁連結。 完整引用格式見下方「如何引用本頁」。有事實錯誤請回報.
Microsoft Semantic Kernel(Python)InMemoryVectorStore 篩選條件被當成程式執行 微軟開源的 AI 應用開發框架 Semantic Kernel 的 Python 版本有一個漏洞:AI 模型替搜尋功能填寫的參數會被當成程式碼執行。攻擊者只要設法讓模型讀到特製的文字,就可能控制伺服器。微軟已在 2026 年 2 月釋出修補版 1.39.4,目前沒有已遭利用的公開紀錄。 「當 AI 模型的輸出直接變成程式碼,提示注入就不再只是讓聊天機器人說錯話,而是讓伺服器執行別人的指令。」— PlainCVE https://plaincve.date/vulns/cve-2026-26030-semantic-kernel-filter-rce
如何引用本頁
本文採 CC BY 4.0,轉載請保留署名與連結。
PlainCVE 團隊(2026)。《Microsoft Semantic Kernel(Python)InMemoryVectorStore 篩選條件被當成程式執行》。PlainCVE。https://plaincve.date/vulns/cve-2026-26030-semantic-kernel-filter-rce(查閱日期:YYYY-MM-DD)BibTeX
@misc{cve202626030semantickernelfilterrce2026,
title = {Microsoft Semantic Kernel(Python)InMemoryVectorStore 篩選條件被當成程式執行},
author = {PlainCVE 團隊},
year = {2026},
howpublished = {PlainCVE},
url = {https://plaincve.date/vulns/cve-2026-26030-semantic-kernel-filter-rce},
note = {更新於 2026-09-24}
}