[错误]: allowed_tools 绕过了 denied_commands 和路径 deny 规则 (deny 应优先考虑)

作者: glitch-ux创建于 2026年6月22日更新于 2026年6月22日

页:1

PermissionChecker.valuate ()'在*检查用户配置的拒绝-命令 ' 模式和路径-规则 ' 拒绝规则之前,对允许 工具 ' * 中的任何工具返回允许。 因此,允许将“bash”或“write file”等广泛工具列入清单,使用户本身的否认政策无动于衷。

这与检查器中其他任何地方使用的设计相矛盾,其中否定优先于允许. 在允许列表之前,对内建的敏感-路径防护和明确的 " 拒绝使用的工具 " 清单进行了评估(甚至有一个测试,即test allowed tools does not bypass sensyl paths',声称允许列表不能绕过敏感路径)。 拒绝命令'和路径拒绝规则是不一致的例外。

QQ 受影响的代码

rc/openharness/permissions/checker.py' -- -- 在valuation()'中,第105行的允许单短路在路径拒绝规则环(第108至117行)和`拒绝命令'环(第119至126行)之前返回:

zz
# 明确的工具允许列表
如果工具  名称在 self.  settings.allowed tools 中:
返回权限决定( allowd= True, reason=f" {tool  name} 是明确允许的)

检查路径级规则
如果文件   path and self.  path rules:
...否认规则在这里 从来没有达到允许列表工具

# 请检查命令拒绝模式( 例如拒绝“ rm - rf / ” )
如果命令:
... # 被拒绝的  命令在这里永远无法为允许列表的工具取得
  • 复制

[Python] 从openharness.config.s设置导入路径规则配置,权限设置 从openharness.permissions 导入权限检查器, 权限模式

1) 被允许列名`bash' 绕过的命令被拒绝

s=权限设置. model construct () 模式=PermissionMode.DEFAULT,允许 tools= ["bash"],拒绝 tools= [], 已拒绝 commands= ["*rm -rf / *"], path rules= [], (中文(简体) ). 打印( 检查) 。 评价( P) "bash",是 read only=False,命令="rm-rf / -- no- preserve-root"). . . .

期望: 假 (匹配否定模式) - > 实际: 真

2) 通过允许列名`write file'绕过路径拒绝规则

s2=权限设置. model built () mode=PermissionMode.DEFAULT,允许 tools= ["write file"],拒绝 tools= [], 已拒绝 commands= [], path rules= [Path Rule Config( pattern="/etc/ *",允许=虚假], (中文(简体) ). 打印( PermissionChecker( s2) ) 评价( ) "write file",是 read only=false,文件 path="/etc/passwd"). allowed).

期望: 虚假( 匹配拒绝规则) - > 实际: 真


两本都印有 " True " 。 由于`被允许的 工具'为空,同一电话被正确拒绝,因此确认允许的短路是原因。

影响

用户通常允许将`bash'(或另一种变异工具)列入较平稳的会话清单,同时依靠`拒绝-命令'/`path-rules'作为防止破坏性或敏感行动的护栏,而这正是这一点最重要的配置。 由于LLM驱动工具的调用,这也削弱了防御深度以对抗即时注射定向的破坏性指令. 高度: 配置的否定规则
. . . . . . .

内容来源: HKUDS/OpenHarness