### 漏洞概述 - **漏洞名称**: mcp Git Search Command Injection Vulnerability #2 - **漏洞类型**: OS Command Injection (CWE-78) - **漏洞描述**: Git搜索API接受一个用户控制的`pattern`字符串,并将其传递给通过Python f-string构建的shell命令。由于命令使用`shell=True`执行,`pattern`中的shell元字符会破坏预期的`grep`调用,从而执行任意主机命令。 ### 影响范围 - **受影响版本**: 0.1.0 - **受影响组件**: `mcp_server.py`, `mcp/git_service.py` - **安全影响**: - **机密性**: 高,因为任意命令可以读取主机和仓库数据。 - **完整性**: 高,因为任意命令可以修改主机状态。 - **可用性**: 高,因为任意命令可以停止服务或耗尽资源。 ### 修复方案 - **推荐修复**: - 使用直接的Python文件遍历和内容扫描替换`grep ... | cut ...` shell管道。 - 如果必须使用`grep`,应使用带有参数数组且无shell的`subprocess.run([...], shell=False)`调用。 - 对包含元字符(如`*`, `?`, `$`, `(`, `)`)的外部输入进行转义。 - 审查附近的`requirements_analyzer.py`,将shell使用作为相同加固过程的一部分。 ### POC代码 ```bash curl -X POST 'http://HOST:PORT/v1/models/git-analyzer/search' \ -H 'Content-Type: application/json' \ -d '{ "repo_url": "https://github.com/octocat/Hello-World.git", "pattern": "'; touch /tmp/dvladimirov_mcp_cmd'; #" }' ```