事件经过
AgentVCR记录/重放组件使用path.join()将调用者提供的录音带名称与.json后缀拼接,并立即读取/写入该路径,未检查结果是否保持在cassettePath下。由于Node的path.join规范化嵌入的‘..’段,遍历名称会逃逸基础目录。演示的读取原语和写入原语受限于进程可访问的JSON文件,但在多代理测试/编排部署中,录音带名称通常来自不可信来源,使代理的记录/保存状态成为任意JSON读写通道。
影响分析
代理记录/重放是使代理行为确定性和可检查性的常用方法;如果录音带名称不可信,同一机制在AI代理编排控制台内变为任意JSON文件读写原语,实现配置/策略篡改以及从代理自身运行时内部泄露凭证或状态。
攻击途径
AgentVCR通过path.join(cassettePath, name + '.json')构建录音带文件路径,无规范化与包含检查。控制名称参数的攻击者提供相对遍历序列(../../...),使load()读取任意.json文件并返回其内容,save()写入或覆盖任意.json文件——足以伪造编排器自身的策略文件(展示了一个精心制作的信任级别条目,使代理获得操作员置于拒绝阈值以下的授权)并使合法代理持有的令牌失效。
受影响系统
network-ai npm包,AgentVCR(lib/agent-vcr.ts),5.13.4至5.15.4;在5.15.5中修复
缓解措施
升级至network-ai >= 5.15.5(公告确认的修复范围在5.15.5之前);停止从不可信输入派生录音带名称,或将其验证/限制在配置的录音带目录内。