🔴 严重 | CVE-2026-47708 — MCP-for-Stata is an MCP server for Stata to integr...
🔴 【深度分析】严重安全漏洞:CVE-2026-47708
CVSS 评分: 严重(9.3)🔴 状态: Deferred 发布时间: 2026-07-21
🔍 技术细节速览
| 字段 | 值 |
|---|---|
| CVE ID | CVE-2026-47708 |
| CVSS 评分 | 9.3 🔴 |
| 严重程度 | 严重 |
| CVSS 向量 | CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X |
| CWE 分类 | CWE-77 |
| 发布时间 | 2026-07-21 |
| 最后更新 | 2026-07-23 |
| 状态 | Deferred |
| 数据来源 | security-advisories@github.com |
⚠️ CVE-2026-47708 深度分析:MCP-for-Stata 命令注入漏洞(CVSS 9.3 严重)
CVSS 评分:9.3(严重)
CVSS 向量: CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
危害等级: 严重(Critical)
漏洞概述
CVE-2026-47708 是一个存在于 MCP-for-Stata 中的命令注入漏洞。MCP-for-Stata 是一个用于将 Stata(统计分析软件)集成到智能体(Agent)系统中的 MCP(Model Context Protocol)服务器。该漏洞源自 stata_do API 和 CLI 中的 log_file_name 参数,该参数在未经任何清理的情况下直接嵌入到 Stata 命令字符串中。尽管存在一个 GuardValidator 用于防护 do-file 内容,但该守卫并未检查 log_file_name 参数。攻击者可以构造恶意的 log_file_name(包含引号、换行符或 Stata 命令分隔符),从而注入任意 Stata 命令(如 shell、python、erase 等)。该漏洞影响 1.17.3 之前的所有版本,1.17.3 版本已修复。
受影响组件与版本
- 组件: MCP-for-Stata(MCP server for Stata)
- 受影响版本: < 1.17.3
- 修复版本: 1.17.3
该服务器可能以服务形式在网络上暴露,或作为本地集成组件运行。
漏洞原理分析
成因
根据 NVD 描述,漏洞根因是 直接字符串插值(Direct String Interpolation)。在 stata_do API 或 CLI 中,log_file_name 参数被拼接进一个 Stata 命令字符串,例如:
capture log close
log using `malicious_log_file_name', replace
如果 malicious_log_file_name 没有被任何转义或引用处理,攻击者可以通过包含以下特殊字符来打破原有语法结构:
- 双引号或单引号:用于结束字符串,然后插入新命令。
- 换行符(
\n):Stata 允许多行命令,换行符可以开始新行执行新命令。 - Stata 命令分隔符:如
;(分号)在某些上下文中可分隔多个命令。
例如,一个恶意 log_file_name 可能为:
log_file.dta"; shell del /F *.dta; "
拼接后变成:
capture log close
log using log_file.dta"; shell del /F *.dta; ", replace
其中 "; shell del /F *.dta; " 部分导致 Stata 解析为 log using log_file.dta 结束后,立即执行 shell del /F *.dta 命令(调用操作系统命令删除所有 .dta 文件)。
GuardValidator 的局限性
GuardValidator 被设计为扫描 do-file 内容(即实际的 Stata 脚本)以阻止危险操作,但它 未验证 log_file_name 参数。攻击者可以将恶意命令注入到文件名参数中,从而绕过守卫。
攻击向量
- 攻击复杂度 (AV:N / AC:L / AT:N):无需网络访问特殊条件,攻击者只需能够向服务器发送
stata_do请求(例如通过 MCP 协议),即可远程利用。 - 权限要求 (PR:N):无需预先认证或权限。
- 用户交互 (UI:N):无需用户介入。
影响范围
攻击者可执行任意 Stata 命令,包括:
shell命令:直接执行操作系统命令(如删除文件、执行反弹 shell)。python命令:执行 Python 代码(如果 Stata 配置了 Python 集成)。erase命令:删除 Stata 数据文件。- 其他:修改全局设置、访问敏感数据等。
影响评估
| 评估维度 | 详情 |
|---|---|
| 攻击复杂度 | 低(AC:L),仅需构造恶意字符串,无需额外条件。 |
| 所需权限 | 无(PR:N),任何能访问 API/CLI 的实体均可利用。 |
| 利用条件 | 服务器需暴露 MCP 接口,或用户主动触发 stata_do 调用。 |
| 潜在后果 | 完全丧失机密性、完整性和可用性(VC:H/VI:H/VA:H):攻击者可读取/篡改数据、执行任意命令、破坏系统。 |
| 横向移动风险 | 取决于服务器所在环境,shell 命令可导致内网横向渗透。 |
| 漏洞状态 | Deferred(官方可能尚未发布完整公告或补丁已出但未广泛部署)。 |
修复建议
官方修复
- 升级至 1.17.3 或更高版本:该版本已对
log_file_name参数进行严格清理/转义,阻止了注入。
临时缓解措施
若无法立即升级,可采取以下措施:
- 限制 API 暴露范围:将 MCP-for-Stata 服务器仅绑定到本地回环地址(
127.0.0.1),避免远程攻击。 - 输入验证:在反向代理或 WAF 层对
log_file_name参数进行白名单验证,仅允许安全的文件名(如只包含字母、数字、下划线、点,且长度有限)。 - 权限最小化:以低权限用户运行 Stata 进程,减少
shell命令的破坏能力。 - 禁用危险命令:在 Stata 配置中禁用
shell、python等命令(如果业务不需要)。
参考资料
- CVE 详情页:https://nvd.nist.gov/vuln/detail/CVE-2026-47708
- CWE-77:Improper Neutralization of Special Elements used in a Command ('Command Injection')
- GitHub 安全公告:
security-advisories@github.com(具体链接未提供,可关注 MCP-for-Stata 仓库的 Security Advisories) - 修复版本发布说明:MCP-for-Stata v1.17.3 的 Release Notes(需在 GitHub Releases 中查找)
注意:本分析基于 NVD 公布的描述和 CVSS 向量进行合理推断,所有技术细节均以官方数据为准。若需进一步验证,建议查阅 Stata 命令执行机制及 MCP-for-Stata 源码补丁。