当开发人员指示 AI 编码代理“设置 GitHub MCP”时,代理往往从已归档、不再维护的存储库中选择软件包。Glow Labs 的新研究记录了这一现象,并将其命名为“MCPhantom”模式。 审查真实会话记录显示,在 98% 的案例中,代理依据模型训练数据中的名称自动填充选择;其余 2% 则由用户直接指定旧版软件包。即便 GitHub 提供官方 MCP 服务器,代理仍倾向于选择训练数据中已过时的 Anthropic 参考服务器,无视其“已归档且无安全更新”的状态。 该模式广泛存在于 Claude Code、Cursor、Codex CLI 等工具中,涉及 Anthropic、OpenAI 和 xAI 等多家模型。 ### 四个高危漏洞,无补丁可用 研究在这些参考服务器中发现了四个高危漏洞。最严重的是 Puppeteer 服务器中的远程代码执行漏洞:攻击者仅需通过提示注入,即可让代理在机器上启动任意进程并执行命令。由于开发人员通常批准网页浏览权限,该权限被延伸利用,导致漏洞得逞。 Glow Labs 将此报告标记为“超出范围”。维护者回应称,相关服务器已于 2025 年 5 月归档,不再维护,因此不会发布修复程序。虽然考虑将 npm 软件包标记为“过时”,但用户仍可通过 npx 安装。目前尚未观察到实际利用案例,也无补丁计划。 尽管被标记为过时,使用情况并未减少。统计显示,自 2025 年 7 月以来,这些过时软件包在 npm 的下载量超过 1730 万次,其中五个位列 npm MCP 前 100 名。 ### 现有安全控制为何失效 这些服务器作为依赖项,从未出现在依赖文件中。EDR(端点检测与响应)将其视为受信任 Node 进程的常规 npm 安装行为;由于通过 npx 运行且无 CVE 编号,SCA(软件成分分析)无法生成清单文件,软件库存系统也无法注册。终端成为唯一能显示其存在的场所。 此外,让代理在安装前自行核查并非良策。Glow 高级研究员 Nadav Claude Cohen 指出,即使代理在 npm 上查到“软件包已过期”的提示,仍可能静默安装且不告知用户。 ### 谁能解决这一难题 Cohen 提出了四种潜在的修复路径: - **编排工具(Harness)制造商**:拒绝安装或警告过时服务器,并覆盖已安装实例。但这需要所有厂商协同,否则单点修复无效。 - **模型制造商**:更新模型知识库以剔除旧包名称。但因更新权重成本极高,此举可能性较低。 - **软件包所有者**:修复漏洞。这是保护继续使用者的唯一方法。 - **安全公司**:利用预执行钩子进行拦截。该方案无需等待其他方配合,可立即实施。 移除软件包并非可行选项。npm 规定,仅当过去一周下载量少于 300 次、单一所有者且无公开依赖时才可移除。以“server-github”为例,其上周下载量达 185,239 次且有 6 名所有者,不符合移除条件。Cohen 指出,npm 仅移除恶意软件包,尚无因漏洞移除的先例。 建议安全团队从排查引用过时 @modelcontextprotocol 服务器的 MCP 配置入手,在有官方服务器时进行切换,并将 npm 的“过时”状态纳入审批标准。 Glow 研发副总裁 Ophir Arie 表示:“模型的记忆现在变成了一个没有过时信息反馈的软件包管理器。”团队必须将代理的决策视为可疑行为,并加以严格控制。