SuperAPI AI 工具集

mcp-server-audit

安全与审计

查看项目

更新于 10-18 04:37

技能介绍

MCP 服务器为 AI 智能体提供文件、Shell、网络、API 等真实能力,信任边界落在工具调用上:工具描述是模型读取的提示文本,工具结果是模型可能据以行动的数据,带副作用的工具则是代用户执行的操作,审计需同时覆盖这三条通道。

核心判据只有一个:不可信输入(工具描述、抓取页面、文件内容、另一服务器输出)能否使该智能体执行用户从未批准的操作、泄露秘密或访问范围外资源。能,即为缺陷;不能则跳过。没有可触达路径的“恶意服务器理论上可以……”不构成发现,必须展示路径。

主要审计点包括:枚举每个工具的名称、描述、参数、副作用与返回数据;标记无审批门的状态变更工具(写/删/执行/发送/支付);标记描述中含面向模型指令的工具(工具投毒);追踪每个参数最终到达文件系统、Shell、HTTP、SQL、eval 的路径;检查工具结果是否含秘密、内网主机、原始错误或堆栈;确认范围限制在服务器端强制执行而非依赖“模型会守规矩”;检查 stdio 环境变量泄露、HTTP 无认证或绑定 localhost 的传输问题;检查令牌透传(客户端凭据被转发给下游 API);检查 rug-pull,即用户批准后工具定义是否还能被更改。

威胁模型区分三条信任边界:工具描述→模型(隐藏指令式投毒)、工具结果→模型(间接提示注入,如抓取页面或数据库行指示模型调用其他工具)、工具参数→资源(路径穿越、命令注入、SSRF、SQL 注入等经典汇聚点缺陷,由 LLM 驱动)。模型在此充当“混淆代理人”,持有用户权限,会按上述任一通道的指令行事,除非服务器加以约束。

工具投毒检查:导出全部工具描述,检索面向模型的祈使动词(如 ignore、also、first read、before responding、do not tell)、特殊标记、不可见或零宽字符、base64 块;检查 Unicode 标签字符(ASCII 走私,U+E0000..U+E007F);比对宣称行为与实际代码行为。修复思路是描述只作文档而非控制,客户端按不可信内容渲染,服务器保持描述为平实事实。

权限范围检查是最常见的真实缺陷:read_file(path) 是否有路径约束(否则可穿越到 /etc/passwd、~/.aws/credentials);run/exec 用 Shell 字符串还是参数数组(否则可 ; rm -rf、$(...)、反引号注入);fetch(url) 是否有主机允许列表(否则可 SSRF 到 169.254.169.254、localhost、内部 API);query(sql) 是否参数化;write/delete/send/pay 是否有审批门。原则是范围必须在服务器代码中强制(允许列表、规范化路径校验、参数数组、参数化查询)。

副作用审批门:只读工具可自由运行,改变状态或消耗金钱/配额的工具需要显式门。检查每个副作用工具是否有 approve=true 参数、环境开关或客户端确认;模型能否自行设置 approve 绕过门;新发现的资源(新主机、新文件)是否被自动授权(不应如此);是否存在无人值守的自动提交/发送。资料以本仓库自身服务器为参照基线:活动工具需 approve=true 或 BBHUNT_MCP_APPROVE=1,必须先设置范围,报告从不自动提交,目标内容按不可信数据处理。

结果通道检查:工具结果是否含 API 密钥、令牌、完整环境变量、连接串;错误是否返回原始堆栈、内部路径或 SQL;抓取的第三方内容回传时是否缺少“这是不可信数据”的框定;返回的文档是否可能指示模型调用其他工具。应在服务器端脱敏后再返回,资料提到仓库附带 redact.py,需核对其是否覆盖范围内令牌。

rug-pull 与混淆代理人检查:客户端批准后服务器能否更改工具定义;一个服务器的输出是否未经重新校验就作为另一服务器的输入;服务器是否将客户端凭据转发给下游 API,使模型触及用户无意访问的资源(OAuth 混淆代理人)。

传输与配置检查:stdio 下秘密是否经环境变量传递、是否被日志或 doctor 输出回显;HTTP/SSE 是否绑定 localhost 或 0.0.0.0、是否有认证、CORS 是否全开;mcpServers 配置是否使用绝对固定命令而非攻击者可劫持的可写相对路径(服务器二进制自身的供应链);安装的服务器包是否固定版本/校验完整性。

源码审计提供 Python FastMCP 与 Node SDK 的检索命令,用于查找 os.system、subprocess shell=True、eval、exec、open 加 ..、工具定义装饰器、审批/范围/允许列表覆盖,以及 child_process、execSync、new Function、fs.readFile 加 ..、server.tool、registerTool、inputSchema 等;对每个工具映射参数到汇聚点,中间无净化即为候选发现,写报告前须确认可触达性。

报告按每条发现给出:工具名、通道(描述/结果/参数)、不可信来源、汇聚点/动作(文件/Shell/HTTP/SQL/状态变更)、门是否存在(无/可绕过/正常)、影响(秘密泄露/RCE/SSRF/未批准操作)、PoC(精确工具调用与输入)、修复(允许列表/参数数组/审批门/脱敏/固定版本)。无法用具体调用证明的条目应剔除。

限制:资料为审计方法与检查清单,未提供独立可执行工具、安装命令、收费价格、平台或效果数据;实际审计结果取决于目标服务器的具体实现。