Skip to content

spawn 的 list/wait/cancel 缺少 session 隔离,存在跨会话泄露和误杀 #1525

Description

@fanchen777

问题

全局唯一 SubagentManager(cmd/gateway.go:307)的内存 map 混放所有 agent/用户/会话的子任务,list/wait 只按父 agent key 过滤,不看 session。且 cancel id="all"(subagent_control.go:49)遍历整个 map,跨 agent 全杀。而 OriginSessionKey 在 spawn 时已记录(subagent_spawn.go:89),却没被用于过滤。

风险

chat B 的 list 能看到 chat A 的任务(含任务文本前 60 字符);wait 会被 A 的任务阻塞
cancel id="all" 误杀全进程所有运行中的子任务
open agent 一个 agent 服务多用户:用户 B 可读到用户 A 的任务文本,跨用户信息泄露

修复建议

list/wait/cancel 按 OriginSessionKey 过滤(字段已存在,改动仅涉及 subagent_control.go 和 subagent_spawn_tool_actions.go)。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    P1-highData loss, core logic broken — fix in sprintarea:securitySecurity, injection, permissionsbugSomething isn't workingmaintain:bug-confirmedBug confirmed by github-maintain automationmaintain:triagedTriaged by maintain workflow

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions