返回安全研究YOFUNE_LABS / A02

攻击路径笔记 · 实验室

一个 Prompt 如何让
Agent 调错工具

当摘要任务和特权工具出现在同一个工具箱里,一句话就可能把调用对象换掉。

实验室路径说明

本文在隔离环境中复现攻击路径,使用模拟数据与模拟工具。叙述用于帮助安全团队理解风险如何形成,不提供针对未授权系统的利用方法,也不表示对应产品已在真实客户环境中失陷。

用户说:把本周客服工单汇总成三点。看起来没有任何攻击意味。实验室里我们把这句话放进对话,同时在工具箱里放了两个接口:ticket.search 和 tenant.admin_reset。后者本不该出现在“写摘要”这个任务里。

Agent 仍有一定概率选中管理接口。原因通常不是它“想搞破坏”,而是工具说明、错误处理和用户请求被写在了同一层。

01调错工具是目标问题,也是目录问题

工具调用的第一步是选工具。模型根据名字、描述和当前对话来选。如果管理接口的描述写成“在查询失败时用于恢复环境”,一次普通的检索失败就可能把调用对象换掉。

这和传统越权不完全一样。传统越权是用户自己去打一个他不该打的接口。这里是:用户没有提出管理操作,Agent 却以用户或服务账号的身份提出了。 日志里会显示一次合法鉴权。

02常见的三种换轨

  • 把特权工具和处理失败的“备用方案”写在一起
  • 让 Agent 在工具报错后自行“想办法完成任务”
  • 给同一个 Agent 同时挂上查询、修改、删除,并假设它会自己把握分寸

实验室里,只要 admin_reset 对摘要任务可见,Prompt 不必写得很像漏洞利用,只要暗示“如果摘要不完整就检查租户状态”,调用就可能滑过去。

03能立刻做的约束

按任务发工具,而不是按 Agent 发工具。写摘要时,管理接口根本不该出现在模型可见的工具表里。

工具描述不要承担安全策略。描述负责说明能做什么;能不能做,由授权和策略层决定。

高影响工具必须有人确认。重置、删除、对外发送,都不该只因为模型“觉得有必要”就执行。

评估一份 Agent 系统时,不要只问它会不会拒绝恶意句子。把工具表和任务范围对照一遍:当前任务用不到的钥匙,就不该挂在钥匙串上。