Skip to content

feat: P0-4 工具执行期引入 WorkspacePlan 以收敛 TOCTOU 风险#138

Merged
minorcell merged 3 commits into
1024XEngineer:mainfrom
Cai-Tang-www:codex/p0-4-toctou
Apr 4, 2026
Merged

feat: P0-4 工具执行期引入 WorkspacePlan 以收敛 TOCTOU 风险#138
minorcell merged 3 commits into
1024XEngineer:mainfrom
Cai-Tang-www:codex/p0-4-toctou

Conversation

@Cai-Tang-www

@Cai-Tang-www Cai-Tang-www commented Apr 4, 2026

Copy link
Copy Markdown
Collaborator

背景

基于 issue #122(P0-4)落地工具执行期 TOCTOU 防护,目标是在不改动主链路分层(TUI -> Runtime -> Provider -> Tools)的前提下,把 sandbox 校验结果绑定到执行期消费。

Closes #122

本次改动

  • WorkspaceSandbox.Check 从“仅返回 error”升级为“返回 *WorkspaceExecutionPlan”。
  • ToolCallInput 新增 WorkspacePlan,由 ToolManager 透传到工具执行层。
  • 新增 tools.ResolveWorkspaceTarget(...),统一在工具层消费执行计划并做执行前复验。
  • filesystem_read_file / filesystem_write_file / filesystem_edit / bash 全部接入执行计划。
  • WorkspaceExecutionPlan.ValidateForExecution() 在执行前复验 anchor 路径与快照,识别校验后替换(TOCTOU)场景。
  • 新增文档:docs/tool-execution-toctou.md,说明防护边界与剩余限制。

测试补充

  • 新增 internal/tools/manager_toctou_test.go
    • 校验后替换 symlink 导致 read 越界
    • 校验后替换父目录导致 write 越界
    • 校验后替换 bash workdir
  • 新增 internal/tools/workspace_plan_test.go
    • fallback 路径解析
    • resolver 失败分支
    • plan 目标一致性校验
    • anchor 变更复验
    • target type 匹配/不匹配校验
  • 补充 internal/security/workspace_test.go
    • ValidateForExecution() 的空值、变更、成功路径
    • capturePathSnapshot() 常规/符号链接/异常路径
    • pathSnapshot.Equal() 等价与差异分支
  • 补充 internal/tools/bash/tool_test.go
    • call.Workdir 为空时回退到工具 root 的执行路径

验证结果

  • go test ./... -count=1
  • go test ./... -covermode=atomic -coverprofile=F:/Qiniu/neo-code/coverage.out -count=1
  • 总覆盖率:87.5%go tool cover -func F:/Qiniu/neo-code/coverage.out

风险与限制

  • 本次实现显著缩小 TOCTOU 窗口,但尚未引入跨平台 openat/no-follow/dirfd 级别的原子系统调用封装。
  • 上述限制已在文档中显式说明,后续可在安全执行器阶段继续增强。

@codecov

codecov Bot commented Apr 4, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 86.30137% with 20 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
internal/security/workspace.go 79.48% 10 Missing and 6 partials ⚠️
internal/tools/workspace_plan.go 87.09% 2 Missing and 2 partials ⚠️

📢 Thoughts on this report? Let us know!

@minorcell minorcell merged commit 545a447 into 1024XEngineer:main Apr 4, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat(security/tools): P0-4 处理工具执行期原子性与 TOCTOU 风险

2 participants