系统:运行中
← 返回所有攻击
AGENTS CRITICAL NEW

Semantic Kernel:当一个 prompt 变成 shell(CVE-2026-25592、CVE-2026-26030)

微软于 2026 年 5 月 7 日披露 Semantic Kernel 中两个关键漏洞,可将单条注入式 prompt 转化为宿主级代码执行。根因在于架构层面:工具注册表和 eval() 被当作便利特性,而非安全边界。

2026-05-26 // 7 min affects: semantic-kernel <1.39.4 (Python), semantic-kernel <1.71.0 (.NET)

这是什么?

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.41.39.49.8
semantic-kernel(.NET,SessionsPythonPlugin)< 1.71.01.71.010.0

关键日期:微软于 2026 年 5 月 7 日 发布漏洞披露与补丁。CVE 条目当周创建;GitHub Security Advisory GHSA-xjw9-4gw8-4rqx 和 CVE-2026-26030 的 NVD 记录是主要参考资料。

Sources