## 已复现问题 TaskTool 通过不带租户参数的 TaskRepository.putTask 提交;默认仓库将 owner 设为 null。读取只在调用者与任务都有租户且不同时拒绝。接口默认读取实现还直接委托无隔离读取。TaskOutputTool 提取租户时仅使用 id,丢弃 authority。 实际源码验证:经 TaskRepository.putTask 创建的任务,在已知同一 task ID 时,两个不同调用租户均能取得结果。本单描述默认接口路径的归属缺口,不声称已发生外部攻击或全部自定义仓库都如此。 证据: - https://github.com/agentic-ai-java/argi/blob/76d44429fdaa6a69320e21a1cb77119d0889d792/argi-agent-framework/src/main/java/io/github/agentic/ai/graph/agent/tools/task/TaskTool.java#L126 - https://github.com/agentic-ai-java/argi/blob/76d44429fdaa6a69320e21a1cb77119d0889d792/argi-agent-framework/src/main/java/io/github/agentic/ai/graph/agent/tools/task/DefaultTaskRepository.java#L70 - https://github.com/agentic-ai-java/argi/blob/76d44429fdaa6a69320e21a1cb77119d0889d792/argi-agent-framework/src/main/java/io/github/agentic/ai/graph/agent/tools/task/TaskOutputTool.java#L89 ## 交付与验收 - [ ] 提交契约可携带可信 owner,正常 TaskTool 路径实际绑定该 owner,不能依赖应用恰好调用实现类重载。 - [ ] 使用完整 TenantReference 或等价的 authority + id 语义;业务输入不能覆盖 owner。 - [ ] 明确租户缺失、历史无 owner 任务和管理员读取的策略;缺失可信上下文不能隐式等同管理员。兼容单租户模式需显式说明。 - [ ] 默认、有界和自定义仓库契约一致,隔离缺失须明确诊断;不依赖难猜 task ID 作为访问控制。 - [ ] 覆盖同租户、跨租户、相同 id 不同 authority、缺失身份及历史任务测试。 ## 基线、关系与变更约束 已验证 Core `76d44429fdaa6a69320e21a1cb77119d0889d792` / Extensions `495414b76a37aca4d7c1022d973a8e5b9a7e92e6`。关联: #188、#200、#203。 局部修复不等待全局 Agent/Workflow/Loop 重构。优先复用现有中立契约;若改公共 API、配置或持久数据,说明替代方案、消费者影响、目标版本与迁移/回滚步骤。不得以跳过检查、删除测试或向 Core 重新引入供应商 SDK 解决问题。
Activity