一份报告指出,通过巧妙地组合 Copilot 的功能,可以绕过其计费机制,实现对昂贵付费模型的免费、无限制使用。其核心原理是利用免费模型作为起点,通过“子代理 (subagent)”和“工具调用”功能,将实际计算任务转交给付费模型执行,而系统计费却只认最初的免费模型,从而不产生费用。此外,通过设置高请求上限和脚本循环,也能以极低成本持续调用付费模型。
核心漏洞:利用子代理绕过计费
将多个机制组合在一起,就能实现对昂贵付费模型(如通常需要消耗 3 个高级请求的 Opus 4.5)的免费使用。其利用了以下几个系统特点:
- 子代理和工具调用本身不消耗任何“请求”额度。
- 请求的费用是根据会话开始时使用的初始模型来计算的。
- Copilot 内置了像 GPT-5 Mini 这样的免费模型。
- 用户可以为子代理定义一个代理配置文件,并为其指定任意模型。
操作步骤
- 选择免费模型启动:开始一个新的聊天会话,并将模型设置为一个免费模型,例如 GPT-5 Mini。
- 创建付费代理:创建一个代理配置文件,并将其模型设置为一个昂贵的付费模型,例如 Claude Opus 4.5。
- 通过子代理传递任务:在第一条消息中,指示免费模型使用
runSubagent工具启动一个子代理,并将真正的用户查询(例如“伦敦现在几点了?”)传递给这个子代理。
执行流程与结果
- 初始请求由 GPT-5 Mini (免费模型) 接收,不产生费用。
- 免费模型会创建一个子代理,这个创建动作本身也是免费的。
- 这个子代理会加载你预设的代理配置文件,该文件指定使用 Opus 4.5 (付费模型)。
- 最终,昂贵的付费模型完成了实际任务,但由于计费系统只认第一步的免费模型,整个过程几乎不消耗任何高级积分。
另一种滥用方式:循环调用
除了上述方法,还存在一种需要更多设置的滥用方式,可以实现长时间、大规模的调用。
- 提高请求上限:将
chat.agent.maxRequests(聊天代理的最大请求数)设置为一个非常高的值。 - 使用付费模型启动:直接使用一个付费模型(如 Opus 4.5)作为会话的初始模型。
- 构建循环脚本:创建一个自定义脚本,并通过提示词引导模型在工具调用中重复执行该脚本。
通过正确的提示词和脚本,可以创建一个循环,让付费模型在一次初始计费后被无限次地调用,而无需支付额外费用。
在测试中,单条消息触发了一个持续 3 小时以上的处理过程,启动了数百个 Opus 4.5 子代理来处理数百个文件,而最终只消耗了 3 个高级积分。如果不是手动停止,这个过程还会继续下去。
漏洞报告与处理
该漏洞最初已提交给微软安全响应中心(MSRC),案件号为 VULN-172488。然而,MSRC 多次坚称,绕过计费问题不属于其处理范围,并指示报告者将其作为公开的错误报告进行提交。