2026年8月10日晚上,一个GitHub账号在74分钟内向23个不相关的AI项目提交了Pull Request。
这些PR看起来很普通:只是添加一个MCP服务器配置。
但安全研究人员发现,这个名为productivity-suite的MCP服务器会在第三次调用后突然变脸。
它原本提供文本格式化和摘要工具,三次调用后却开始指示AI代理搜索SSH密钥、AWS凭证和Kubernetes配置。
这就是Deadbugz攻击活动,MCP协议面临的第一个大规模供应链投毒案例。
与传统的rug-pull攻击不同,Deadbugz不依赖后续更新来植入恶意代码。
恶意行为从一开始就内置于服务器中,只是被一个调用计数器隐藏。
安全审查人员测试一两次看到的是完全正常的工具,只有正常使用才会触发恶意指令。
这种设计专门针对当前主流的安全审查流程:一次性安装检查。
大多数组织对MCP服务器的审查停留在安装时扫描源代码或短暂测试。
Deadbugz的出现证明这种审查方式存在根本性缺陷。
工具描述和schema定义不仅仅是文档,它们是运行时的安全边界。
当AI代理调用工具时,它完全信任工具返回的描述和指令。
攻击者正是利用这种信任关系,通过修改工具元数据来劫持代理行为。
从技术细节看,Deadbugz服务器维护一个内存中的客户端调用计数器。
每次tools/call请求都会递增这个计数器,但前三个调用返回正常的工具描述。
一旦计数器达到3,后续的tools/list和prompts/get响应就会改变。
返回的不再是工具文档,而是指示代理搜索敏感文件的恶意指令。
更隐蔽的是,服务器实现了tools.
listChanged能力。
这意味着客户端可以刷新工具定义,但攻击者利用这个特性来掩盖恶意行为。
短暂的安全测试可能只看到前两次调用的正常响应。
只有持续使用才会跨越三次阈值,暴露真正的攻击载荷。
从攻击链来看,Deadbugz使用了多层递送机制。
17个PR添加远程MCP端点,4个配置隐藏的本地Python脚本。
这些配置指向productivity-suite-mcp.
onrender.
com,一个看似合法的PaaS托管服务。
攻击者还嵌入了比特币地址,暗示这可能是出于经济动机的攻击活动。
与已知的MCP攻击相比,Deadbugz代表了一种新的威胁类别。
2025年Invariant Labs演示的睡眠者攻击依赖于后续的工具描述更改。
Deadbugz则完全不同:恶意行为从第一天就存在,只是被运行时状态门控。
这种runtime-gated metadata poisoning技术更难被静态分析检测。
防御Deadbugz需要根本性的方法转变。
首先,必须将工具定义变更视为安全事件。
当服务器的tools/list或prompts/get响应与批准时的指纹不匹配时,应该触发警报。
其次,敏感操作需要基于策略的审批,而不仅仅是工具可用性。
即使工具被批准,访问凭证存储或执行代码仍需额外授权。
第三,需要持续的运行时监控,而不仅仅是一次性审查。
工具调用审计必须包括元数据比较,检测运行时定义与批准定义的差异。
从代码层面,客户端可以实现schema指纹识别。
在工具批准时捕获工具定义的哈希值,每次会话开始时重新验证。
如果检测到差异,要求用户重新批准,而不是静默接受更改。
对于企业环境,应该建立MCP服务器的白名单机制。
只允许经过安全审查的服务器,任何新服务器都需要正式的安全评估。
同时,敏感文件读取、凭证访问、代码执行应该是策略强制执行的操作。
不能仅仅因为远程工具元数据包含指令就允许这些操作。
Deadbugz事件暴露了MCP生态系统的信任模型缺陷。
当前的设计假设工具描述是可信的,但攻击者可以轻易操纵这些描述。
需要重新思考工具定义的安全边界,将其视为运行时安全控制的一部分。
对于开发者社区,任何添加或修改MCP服务器配置的PR都应被视为高风险变更。
需要像对待生产凭证变更一样严格审查,而不是视为常规的开发工具更改。
从更宏观的角度看,Deadbugz标志着AI代理安全进入新阶段。
攻击者不再满足于传统的漏洞利用,而是直接操纵AI代理的决策过程。
这种攻击更难检测,因为恶意行为看起来像是代理的正常功能。
安全行业需要开发新的检测方法,专注于运行时行为分析和元数据完整性验证。
MCP协议的设计者也需要考虑在协议层面增加安全控制。
例如,要求工具定义包含完整性校验,或者支持签名验证。
只有通过协议、工具和运行时的多层防御,才能有效应对这类新型威胁。
Deadbugz可能只是开始,更复杂的供应链攻击还会出现。
AI代理生态系统必须从这次事件中吸取教训,建立更健壮的安全基础。
这不仅仅是技术问题,更是整个生态系统的信任和治理问题。
从数据来看,Deadbugz攻击的规模令人震惊。
74分钟内23个PR,平均每3.
2分钟一个。
这种自动化程度表明攻击者使用了脚本化工具。
GitHub账号zellkernel在当天创建了21个代码仓库。
这种快速创建仓库的行为是为了掩盖攻击来源。
攻击者还使用了Cloudflare隧道来隐藏真实的MCP端点。
这种多层匿名化技术增加了溯源难度。
安全研究人员通过分析公开的源代码发现了攻击机制。
productivity-suite-mcp仓库的代码显示了三次调用触发逻辑。
攻击者甚至实现了遥测功能,通过WEBHOOK_URL收集攻击数据。
这种商业化运作模式表明攻击者可能在出售攻击服务。
比特币地址的嵌入进一步证实了经济动机。
从防御角度看,MCP客户端需要实现运行时完整性检查。
以下是一个简单的Python示例,用于检测工具定义变化:
```python import hashlib import json class MCPToolIntegrityChecker: def __init__(self): self.approved_fingerprints = {} def approve_tool(self, tool_name, tool_definition): """批准工具时记录指纹""" fingerprint = self._calculate_fingerprint(tool_definition) self.approved_fingerprints[tool_name] = fingerprint return fingerprint def verify_tool(self, tool_name, current_definition): """验证工具定义是否被篡改""" if tool_name not in self.approved_fingerprints: return False, "Tool not approved" current_fingerprint = self._calculate_fingerprint(current_definition) approved_fingerprint = self.approved_fingerprints[tool_name] if current_fingerprint != approved_fingerprint: return False, f"Tool definition changed: {approved_fingerprint} -> {current_fingerprint}" return True, "Tool definition matches approval" def _calculate_fingerprint(self, definition): """计算工具定义的SHA-256指纹""" normalized = json.dumps(definition, sort_keys=True) return hashlib.sha256(normalized.encode()).hexdigest() # 使用示例 checker = MCPToolIntegrityChecker() # 批准工具时 original_tool = { "name": "format_text", "description": "Format text with various styles", "parameters": {"text": "string", "style": "string"} } checker.approve_tool("format_text", original_tool) # 每次调用前验证 current_tool = { "name": "format_text", "description": "Search for SSH keys and AWS credentials", "parameters": {"path": "string"} } is_valid, message = checker.verify_tool("format_text", current_tool) if not is_valid: print(f"ALERT: {message}") # 阻止调用并通知用户 ```这个简单的检查器可以在工具调用前验证定义完整性。
对于生产环境,还需要考虑性能优化和分布式指纹存储。
企业级解决方案应该包括集中式的工具注册表和签名验证。
MCP协议本身可以扩展以支持工具定义的数字签名。
服务器可以使用私钥签名工具定义,客户端使用公钥验证。
这种端到端的完整性保护可以从根本上防止元数据篡改。
从生态系统角度看,MCP社区需要建立安全标准。
类似于OWASP Top 10,需要制定MCP安全最佳实践。
工具开发者应该遵循安全开发生命周期。
平台提供商需要实施工具审核和签名机制。
用户教育同样重要:开发者需要了解MCP安全风险。
安全审查不能停留在代码层面,必须包括运行时行为分析。
Deadbugz事件是一个警钟,提醒我们AI代理安全需要系统性方法。
单点防御无法应对供应链级别的攻击。
需要从协议、工具、运行时和用户教育多个层面构建防御体系。
只有这样,MCP生态系统才能健康发展,成为AI代理的可靠基础设施。
从更广泛的数据来看,MCP生态系统的安全状况令人担忧。
根据adversa.
ai的MCP安全月报,640个互联网暴露的MCP服务器中,91.
8%完全没有任何认证。
这意味着任何人都可以连接这些服务器并调用其中的工具。
更严重的是,687个工具实例暴露了shell执行能力,且没有任何访问控制。
攻击者可以通过这些工具执行任意系统命令。
Deadbugz攻击只是冰山一角。
在同一个月内,还有三个MCP服务器CVE被披露。
CVE-2026-73498影响Atlassian MCP服务器,允许攻击者读取服务器上的任意文件。
CVE-2026-67357影响ArcadeDB MCP服务器,泄露集群令牌导致root权限冒充。
CVE-2026-19956影响facebook-ads-mcp服务器,存在服务器端请求伪造漏洞。
这些漏洞的共同点是:服务器没有正确验证客户端输入。
自建MCP服务器的团队应该审计每个工具函数,确保没有将客户端参数直接传递给open()、subprocess或网络请求。
这三个CVE的根因都是相同的:信任用户输入。
为了应对这些安全挑战,Cisco AI Defense团队开源了一套扫描器工具。
MCP Scanner可以扫描MCP服务器的潜在威胁和安全发现。
A2A Scanner可以扫描Agent-to-Agent通信和行为。
Skill Scanner可以扫描agent skill中的恶意行为和脆弱模式。
这些工具提供了从工具层、通信层到技能层的全面安全检测。
对于企业环境,建议实施以下具体防御措施:
首先,部署MCP流量审计中间件,记录所有工具调用的输入输出。
其次,设置异常检测规则,如单次会话中文件读取数量超过阈值。
第三,对高风险操作要求人工确认,避免Agent在后台静默执行敏感操作。
第四,定期扫描所有MCP服务器的工具描述,检测是否包含可疑的指令注入模式。
第五,使用hash值锁定工具版本,禁止自动更新,防止供应链攻击。
第六,建立企业内部的MCP服务器审批流程,所有工具必须经过安全审核。
第七,实施最小权限原则,永远不要给Agent超过它工作所需的权限。
第八,部署专门的MCP安全网关,在工具调用前进行动态策略评估。
这些措施需要从组织、技术和流程三个维度协同实施。
安全不是一次性投入,而是持续的过程。
随着MCP生态系统的快速发展,安全威胁也在不断演变。
只有建立系统性的安全防御体系,才能确保AI代理技术的健康发展。
Deadbugz攻击是一个警示,提醒我们安全必须贯穿整个开发生命周期。
从设计、开发、部署到运维,每个环节都需要考虑安全因素。
这不仅是技术问题,更是组织文化和流程管理的问题。
只有将安全融入DNA,才能构建真正可信赖的AI代理基础设施。