Semantic Kernel:当一个 prompt 变成 shell(CVE-2026-25592、CVE-2026-26030)
微软于 2026 年 5 月 7 日披露 Semantic Kernel 中两个关键漏洞,可将单条注入式 prompt 转化为宿主级代码执行。根因在于架构层面:工具注册表和 eval() 被当作便利特性,而非安全边界。
这是什么?
2026 年 5 月 7 日,Microsoft Security Response Center 公布了 Semantic Kernel 中两个关键漏洞的安全公告。Semantic Kernel 是微软旗舰级智能体(agent)框架。CVE-2026-25592(CVSS 10.0)影响 1.71.0 之前的 .NET SDK;CVE-2026-26030(CVSS 9.8)影响 1.39.4 之前的 Python SDK。两者都能将单条被注入的 prompt 升级为宿主级远程代码执行。
配套发布的研究文章 “When prompts become shells” 演示了无需浏览器漏洞、恶意附件或内存破坏漏洞,仅凭一段精心构造的自然语言输入,即可在运行智能体的主机上启动 calc.exe。
工作原理
CVE-2026-26030(Python,InMemoryVectorStore)。 当 Semantic Kernel 应用使用默认的内存向量存储配合 Search Plugin 时,用户提供的过滤表达式会被编译成 Python lambda 并经由 eval() 执行。模型能放入该过滤器的任何字符串 —— 无论直接提供还是来自检索到的文档 —— 都会变成在宿主上执行的 Python 代码:
# 简化后的脆弱模式(请勿运行)
filter_expr = user_or_model_supplied_string
fn = eval(f"lambda item: {filter_expr}") # [REDACTED-eval]
results = [it for it in store if fn(it)]
CVE-2026-25592(.NET,SessionsPythonPlugin)。 在 Azure Container Apps 动态会话中执行模型生成代码的插件,同时也对外暴露了一个内部辅助方法 DownloadFileAsync,该方法被标注了 [KernelFunction]。这个特性会把一个 .NET 方法以可调用工具的形式暴露给 LLM。由于没有路径校验,模型可以先在沙箱内构造 payload,然后请求框架自身把该 payload 写到运行智能体的宿主上的任意位置,从而完全绕过沙箱边界。
两个漏洞共享同一处架构性失误:把工具注册表([KernelFunction])和过滤语言(eval)当作人体工学便利,而不是当作安全攸关的接口面。
为什么重要
长期以来,prompt 注入被描述为”内容安全”问题。这些 CVE 推翻了这一框架。一旦 LLM 接上了工具,并接收不可信文本——检索到的文档、网页、用户消息——每一个被暴露的函数都会成为攻击面的一部分,每一个字符串解释器都会成为一条执行路径。
这一模式并非 Semantic Kernel 独有。微软的研究以及 2026 年第三方同期发布的安全公告记录了其他智能体框架中同类问题(CrewAI、LangFlow、LiteLLM、GPT Researcher),典型方式包括 MCP STDIO 命令注入以及插件系统中的 eval/exec 调用。任何构建带工具、RAG 或代码执行能力智能体的团队,都应默认认为这类问题与自己相关,除非能够证明相反。
防御措施
- 立即打补丁。 升级至
semantic-kernel >= 1.39.4(Python)和>= 1.71.0(.NET)。在 lockfile 中锁定版本,并在 CI 中校验。 - 审计工具注册表。 列出每一个对模型可见的方法(
[KernelFunction]、@kernel_function,以及其他框架中等效的装饰器)。除非该暴露已经过明确审查,否则移除任何跨越信任边界的能力 —— 宿主文件 I/O、网络出口、密钥访问等。 - 禁止对受模型影响的输入使用
eval/exec。 用经过 AST 解析的实现或带显式运算符白名单的领域专用语言取代基于 lambda 的过滤器。过滤表达式是用户输入,不是代码。 - 沙箱要包住工具宿主,而非仅包住解释器。 Azure Container Apps 沙箱化的是 Python 会话,而不是持有文件辅助方法的 .NET 宿主。信任边界应当包裹工具的 调用方,而不仅是其 payload。
- 采用”lethal trifecta”视角。 正如 Simon Willison 所概括:同时具备 (1) 访问私有数据、(2) 暴露于不可信内容、以及 (3) 向外采取行动能力的智能体,默认就是可被利用的。在条件允许时,在每个环境中至少去掉其中一条。
- 记录工具调用及其参数。 在执行前检测异常参数(预期目录之外的路径、过滤字符串中的可疑代码)。
状态
| 组件 | 受影响版本 | 已修复版本 | CVSS |
|---|---|---|---|
semantic-kernel(Python,InMemoryVectorStore) | < 1.39.4 | 1.39.4 | 9.8 |
semantic-kernel(.NET,SessionsPythonPlugin) | < 1.71.0 | 1.71.0 | 10.0 |
关键日期:微软于 2026 年 5 月 7 日 发布漏洞披露与补丁。CVE 条目当周创建;GitHub Security Advisory GHSA-xjw9-4gw8-4rqx 和 CVE-2026-26030 的 NVD 记录是主要参考资料。
Sources
- → https://www.microsoft.com/en-us/security/blog/2026/05/07/prompts-become-shells-rce-vulnerabilities-ai-agent-frameworks/
- → https://github.com/microsoft/semantic-kernel/security/advisories/GHSA-xjw9-4gw8-4rqx
- → https://www.pointguardai.com/ai-security-incidents/semantic-kernel-lets-a-prompt-open-a-shell-cve-2026-25592-cve-2026-26030
- → https://nvd.nist.gov/vuln/detail/cve-2026-26030