flawopen.com/Teardowns/cve-2026-25592-semantic-kernel-agent-file-write
CVE-2026-25592:Semantic Kernel 文件写入
CVE-2026-25592 将 Semantic Kernel 下载辅助方法暴露为 AI 工具,可能导致主机文件写入。移除模型访问并升级到 1.71.0。[2]
快递员可以把包裹从上锁的测试室送到公司办公室。按规定,他只应听从员工的委托,但胸牌也让他服从 AI 助手。恶意便条可能诱使助手选择办公室的抽屉。修复措施是移除让模型能够调用此辅助方法的胸牌;应用代码调用时仍需要限制目标位置。[1], [2]
核心概念与专有名词
框架映射
- 本指南所述弱点的 CWE 参考: CWE-22
根本原因剖析 (Root Cause)
Semantic Kernel for .NET 的 SessionsPythonPlugin 将远程 Python 会话连接到应用主机。DownloadFileAsync 从会话取回文件,并可将返回的字节保存到主机上的 localFilePath。该方法带有 KernelFunction 属性,模型因此能在选择工具时看到其参数。若攻击者能够影响智能体输入,就可能诱使智能体用非预期目标调用此辅助方法。这是工具授权和路径边界失效,并非语言模型本身的缺陷,也不是远程 Python 会话逃逸 sandbox。Microsoft 的修复移除了 DownloadFileAsync 上的 KernelFunction,使模型无法调用它。如果应用代码仍调用该辅助方法,应配置并强制执行明确的允许目录策略;当允许目录列表为空时,上游实现默认允许任意路径。GHSA-2ww3-72rp-wpp4 列出早于 1.71.0 的 NuGet Microsoft.SemanticKernel.Plugins.Core 版本,也列出早于 1.39.3 的 PyPI semantic-kernel 版本;本文聚焦 Microsoft 记录的 .NET 攻击链。[1], [2], [3]
受影响的软件包与修复版本
| 软件包 / 范围 | 受影响与修复版本 | 本文涵盖的内容 |
|---|---|---|
.NET Microsoft.SemanticKernel.Plugins.Core | 受影响:< 1.71.0;修复:1.71.0 及更高版本。 | 已记录的 SessionsPythonPlugin 链路:模型可调用的 DownloadFileAsync 可能把会话数据写入主机路径。 |
Python semantic-kernel | 受影响:< 1.39.3;修复:1.39.3 及更高版本。 | 公告也列出了此软件包。本文不分析 Python 特有的利用链;请单独升级 Python 软件包。 |
| 有意将会话文件保存到主机的应用 | 即使移除模型调用能力,也要限制目标路径。 | 在 Function Invocation Filter 或等效授权层中使用明确的规范路径允许列表。上游实现中,空的 AllowedDownloadDirectories 列表不会限制完整路径。 |
攻击执行流程分解
源代码对比:漏洞与安全实现
上游补丁移除了 DownloadFileAsync 的 KernelFunction 属性,在工具注册边界切断模型访问。该方法签名保留给应用程序有意调用。安全公告还建议用 Function Invocation Filter 和明确的路径允许列表验证 DownloadFileAsync 与 UploadFileAsync 的参数。单独调用 Path.GetFullPath 并不构成授权策略;上游实现中 AllowedDownloadDirectories 为空时也不会限制目标。[2], [3]
源码摘录: 相关方法:`SessionsPythonPlugin` 中的 `DownloadFileAsync`
[KernelFunction, Description("Downloads a file from the current session.")]
public abstract Task<byte[]> DownloadFileAsync(
string remoteFileName,
string? localFilePath = null,
CancellationToken cancellationToken = default);
[Description("Downloads a file from the current session.")]
public abstract Task<byte[]> DownloadFileAsync(
string remoteFileName,
string? localFilePath = null,
CancellationToken cancellationToken = default);
工程与系统安全加固清单
- ✓将 Microsoft.SemanticKernel.Plugins.Core 升级到 1.71.0 或更高版本;检查锁定文件和实际运行的程序集,而不只是项目文件。[2]
- ✓盘点注册 SessionsPythonPlugin 的智能体,并确认模型工具 schema 中不再包含 DownloadFileAsync。[1], [2]
- ✓若应用代码调用 DownloadFileAsync 或 UploadFileAsync,应通过 Function Invocation Filter 或同等授权层强制规范化路径允许列表。[2]
- ✓需要限制目标时,不要让 AllowedDownloadDirectories 留空;上游实现会把空列表视为允许任意完整路径。[3]
- ✓检查易受影响部署时间段内的主机文件写入遥测,并调查智能体进程对批准目录外位置的写入;只有存在暴露证据时才轮换凭据。
- ✓检查已注册并提供给模型的工具 schema 以及主机权限;确认代理工具无法写入明确批准目录之外的位置。[1]