[错误]: 默认情况下,内置的文件工具(读/写/编辑)不包含在工作区根目录中

作者: Jiangrong-W创建于 2026年6月19日更新于 2026年6月19日
标签bug

发生了什么事?

内置文件工具解决一个模型提供路径到绝对主机路径,然后直接读取或写入,而无需检查解析路径是否留在工作空间(存储)根内. 这是一个缺失的深入防御边界,而不是沙盒出逃:工作空间封隔只在is docker sandbox 活()'分支内执行(它称为validate sandbox path'),Docker沙盒默认被禁用(SandboxSettings.uplied = False'). 因此,在默认情况下,未放放箱的配置中,不存在将这些工具保存在寄存器内部的故障安全边界,一个提供绝对路径或./'的模型可以被引导(例如通过即时注入或简单的错误)到达预定工作目录外的文件.

受影响的组成部分:`src/openharness/tools/'中的档案工具家庭。 决定性的汇,每条路径一个:

  • " 读取 " -- -- " src/openharness/tools/file read tool.py " , " path.read bytes() " 水槽(约行52)。 只读工具由“ PermissionChecker. valuate” 自动分配, 仅使用证书拒绝列表/ 可选路径规则, 因此一个工作外的读取返回文件正文时没有提示 。
  • write file'-src/openharness/tools/file write tool.py',`path.write text(.)'沉槽(约行59)。
  • edit file'-src/openharness/tools/file edit tool.py',`path.write text(更新.)' " 水槽 " (在沙盒和非沙盒分支中都有)。

对于write file' /edit file',交互式的UI dos gate写在许可提示和编辑-diff批准后。 然而,运出的非交互式跑道员——run task worker'(供背景队友使用,即SubprocessBackend.spawn teammate'发射装置为-task-worker')和run print mode'——安装一个许可回调器,总是返回`True',不通过编辑-核准提示。 在自动核准的路径上, 快速/ 批准不再位于工具与水槽之间, 因此缺失的工作空间边界也可以被写入/编辑, 而不仅仅是读取 。

** 默认情况下,read file'/write file'/edit file'应包含在工作空间根上,因此在任何读取或写作发生之前,一个解决了的路径(通过绝对路径./' transversal,或逃脱的同义链接)被以明显的错误拒绝,而不管DockerZ沙盒是否活跃并独立于批准路径。 经营者如果合法地需要联系回购之外,应当能够明确选择退出或扩大允许的根,而不是作为沉默的默认。

  • 复制步骤

这是差距的一般形状(故意非武器化——没有特定的目标文件):

  1. 在其默认配置中运行 OpenHarness(Docker sandbox已禁用, " SandboxSettings.uplied = False " )。
  2. **读取路径:**有代理调用`read file'的路径,在工作空间根外解决——例如绝对路径,或 . . . . . . .

内容来源: HKUDS/OpenHarness