MCP官方服务器v2.1.0修复八个漏洞:路径穿越与SSRF防护升级

MCP 服务器 v2.1.0 修复八个安全漏洞,并因版本体系切换需显式升级。
MCP 官方服务器发布 v2.1.0,无新增功能,全部围绕安全修复。三个包共修复八个漏洞:server-filesystem 与 server-everything 升至 2.0.1,Python 侧 mcp-server-fetch 升至 2026.10.24。文件系统服务器修复了符号链接替换导致的路径逃逸、尾随引号绕过、大小写不敏感卷上的检查回归以及目录大小列出的信息泄露,但 Windows 修复不完整。Everything 服务器不再返回通配 CORS 头并校验 Origin。fetch 服务器统一了 IDNA、NAT64 与重定向后 robots.txt 的地址校验。需特别注意 TypeScript 服务器已从日期版本切换为语义化版本,包管理器不会自动提示 2.0.1,必须显式安装。
一次版本号之外的更新
如果你在项目里用到了 MCP 官方提供的文件系统、Everything 或 fetch 服务器,这个名为 v2.1.0 的版本值得单独安排一次升级窗口。它没有新增工具或功能,全部改动都围绕安全:三个服务器合计修复了八个漏洞,其中多数属于路径校验与网络请求边界的问题,一旦被利用,攻击者可能读写沙箱之外的目录,或让服务器访问内网地址。
这次修复分布在三个包中:@modelcontextprotocol/server-filesystem 和 @modelcontextprotocol/server-everything 升到 2.0.1,Python 侧的 mcp-server-fetch 升到 2026.10.24。发布说明由维护者 cliffhall 提交,并附带了社区报告者的致谢名单,说明这些漏洞大多来自外部安全研究者的主动披露。

文件系统服务器:让路径检查与真实操作对齐
文件系统服务器是 MCP 生态里使用频率最高的组件之一,它让模型能够读写指定目录。本次 2.0.1 版本修复了四个问题,核心思路是消除“检查时”和“使用时”之间的路径差异。
符号链接替换引发的逃逸
最典型的一类攻击发生在检查与写入之间:服务器先验证目标路径位于允许目录内,随后在真正写入前,攻击者把某个父目录替换成指向外部的符号链接,write_file、edit_file、create_directory 以及 move_file 的目标就可能落到允许范围之外。新版本在 Linux 和 macOS 上实现了写操作与目录检查的一致性。不过发布说明也明确提示,Windows 上的修复并不完整,剩余暴露面与规避配置记录在 GHSA-53mr-w429-c597 中,使用 Windows 部署的团队需要额外留意。
TOCTOU(Time-of-Check to Time-of-Use,检查时与使用时不一致)是一类经典的竞态条件漏洞。其模式是:程序先根据路径执行一次安全检查(如确认目标位于允许目录内),随后再依据同一路径字符串执行实际操作。若两次操作之间存在时间窗口,攻击者可通过替换路径中的某个组件(如将父目录换成指向外部的符号链接)使实际访问落到检查时未预料的位置。防御的核心思路是让检查与操作绑定到同一个已解析的、不可变的对象上,例如在 Linux 上使用 openat2 配合 RESOLVE_BENEATH 等机制,或在打开文件后基于文件描述符而非路径进行后续操作,从而消除路径被中途篡改的可能。
尾随引号与大小写差异
另外三个漏洞更细微。其一是路径检查会去掉尾随的引号或空白,但实际文件操作却保留它们,于是一个命名为“允许目录名+引号后缀”的兄弟目录就可能被绕过检查(GHSA-7rgq-gccq-qphx)。其二是符号链接检查不区分字母大小写,在 macOS 默认的大小写不敏感卷上,换一种写法就能通过检查,这是 2026.8.31 版本引入的回归(GHSA-4gxg-m5jx-9j57)。其三是 list_directory_with_sizes 在读取每个条目大小之前没有先做检查,允许目录内的符号链接可能泄露外部文件的大小和修改时间(GHSA-hhwq-wxfx-cj7g)。
Everything 服务器:收紧跨域请求
Everything 服务器常被用作测试和演示用途,但它同样暴露了真实工具,包括读取环境变量的 get-env。2.0.1 版本修复的问题是:HTTP 和 SSE 传输此前会接受任意网页来源的请求,并返回 Access-Control-Allow-Origin: *,这意味着用户访问的任意网页都能调用服务器工具并读取结果(GHSA-mvf5-2qqv-rg3c)。
修复方式是检查 Origin 头并停止发送通配的 CORS 响应头。对于在浏览器环境中调试 MCP 服务的开发者来说,这项改动可能让过去“碰巧能跑”的跨域调用失效,需要按实际情况配置允许来源,而不是依赖默认放行。
CORS(跨源资源共享)是浏览器实施同源策略时的一套放宽机制。默认情况下,网页脚本只能请求同源的资源;服务器若希望允许其他来源访问,需在响应中返回 Access-Control-Allow-Origin 头。当该头被设置为 * 时,表示允许任意来源读取响应内容。对于本地或内网运行的 MCP 服务器而言,通配 CORS 意味着用户浏览的任何恶意网页都可能向其发起请求并读取返回的工具执行结果,形成跨站数据泄露。正确做法是校验请求的 Origin 头,仅对白名单中的来源返回相应的 Access-Control-Allow-Origin,并且避免在携带凭据的场景下使用通配符。
fetch 服务器:地址校验与真实连接保持一致
Python 包 mcp-server-fetch 的 2026.10.24 版本处理了三个与网络请求相关的问题,思路同样是让“判断的地址”就是“连接的地址”。
国际化域名(IDNA)场景下,服务器过去检查一种域名形式,却连接另一种形式,可能因此抵达内网地址(GHSA-v38p-wf49-hx2j)。NAT64 地址方面,位于 64:ff9b::/96 段、封装了私有、回环或链路本地 IPv4 地址的请求现在会被拒绝,与 IPv4-mapped 地址的处理保持一致(GHSA-66qx-2266-pmj6)。此外,robots.txt 的检查不再只针对最初请求的 URL,每次重定向后都会重新检查(GHSA-3jqg-r5pp-rmp2)。
对于构建抓取类 Agent 的团队,这三项改动直接关系到 SSRF 防护的有效性,也解释了为什么抓取工具需要严格区分解析阶段与连接阶段的主机名。
SSRF(服务端请求伪造)指攻击者诱导服务器向非预期地址发起请求,典型目标是内网服务、云元数据端点(如 169.254.169.254)或回环地址。其防御难点在于地址解析与连接之间的不一致:服务器可能先检查 URL 中的主机名是否安全,但实际建立连接时 DNS 解析结果已发生变化(DNS rebinding),或同一地址存在多种表示形式(IDNA 国际化域名、IPv4-mapped IPv6、NAT64 等),从而绕过检查。NAT64 前缀 64:ff9b::/96 可将 IPv6 地址映射为 IPv4,若不做归一化处理,攻击者可用它包装私有 IPv4 地址来逃避基于 IPv4 的过滤。稳健的 SSRF 防护应在解析后的实际 IP 层面做校验,并将连接固定到已验证的地址。
升级时最容易踩的坑:版本号排序
本次发布最容易被忽略的一点是版本体系变化。TypeScript 服务器在 1.0.0 时从日期版本(2025.x、2026.x)切换到了语义化版本,而包管理器会把 2.0.1 排在所有 2025.x 和 2026.x 之下,因此不会把它识别为可升级版本。
如果你仍在使用日期版本,需要显式安装,例如 npm install @modelcontextprotocol/server-filesystem@2.0.1。同样的情况也适用于 server-everything。Python 侧的 fetch 服务器继续使用 CalVer,本次即为 2026.10.24,可通过 PyPI 正常升级。
语义化版本(SemVer)的格式为 MAJOR.MINOR.PATCH,其排序规则是基于数字段逐位比较,因此 2.0.1 会排在 2026.10.19 这类日期版本(CalVer)之下。当包管理器依赖 SemVer 排序来判断“是否有新版本”时,从日期版本切换到 2.x 的包不会被视为升级候选,npm outdated 也不会提示。CalVer(日历版本)常用于与时间强相关的项目,格式如 YYYY.MM.DD,其优点是发布节奏直观,但与 SemVer 混用时排序语义会发生冲突。遇到此类版本体系迁移,通常需要通过显式指定版本号、调整依赖范围或使用 dist-tag 来完成升级。
安全公告背后的协作信号
从发布说明的致谢名单看,这八个 CVE 来自八位不同的报告者,涉及路径处理、跨域请求和地址分类等多个方向。这种分散来源说明 MCP 服务器已进入被安全社区系统性审计的阶段,而不再只是功能迭代。
对使用方而言,这意味着两件事:升级节奏需要跟随安全公告而非功能版本;同时,文件系统与抓取类工具本身属于高权限组件,即使修复到位,也应尽量以最小目录权限和网络出口白名单的方式部署,减少漏洞被触发时的实际影响面。
本次发布中,server-memory 与 server-sequential-thinking 维持在 2.0.0,mcp-server-git 和 mcp-server-time 维持在 2026.10.19,均无变化。
相关推荐

Underdog Saluki 27B:2-Bit量化下的工具调用实战指南
深入解读 Underdog Saluki 27B 基于 GSQ-RCO 的 2-bit 量化方案,涵盖 GGUF 头部结构、内存占用分析与原生 llama.cpp 下的 BFCL 工具调用实测要点,助你评估低比特量化模型的实用边界。

OpenAI与Anthropic限制智能电视逆向工程,引发AI伦理争议
OpenAI与Anthropic限制智能电视逆向工程项目REA,引发AI安全与开放研究争议。本文分析事件背景、隐私隐患及AI公司的使用政策,探讨平衡之道。

GPU-unlock:解锁 Nvidia 3000 系显卡的 FP/BF16 指令发射率
gpu-unlock 项目探索 Nvidia 3000 系显卡在 FP16/BF16 计算上的指令发射率限制,本文解读其测量方法、解锁思路、社区争议以及对 GPU 性能优化的实际意义。