跳转到主要内容

CC Safety Net 无法防护哪些情况?

CC Safety Net 在受支持的工具调用运行前检查它们。它不隔离进程,不过滤网络流量,也看不到二进制文件内部的行为。它只保护能识别的凭证文件和你添加的拒绝路径,绕过已安装集成的命令完全不会被检查。 如果要应对数据外泄、不可信代码或需要完整隔离,请同时使用沙箱或操作系统权限。 面对对抗性或动态输入,standard 模式只提供尽力保护。下文有几项属于放宽,strict 或 paranoid 模式会将其关闭,本页会在相应位置说明。

各智能体的限制

CC Safety Net 自身无法完成分析时,每个集成都会阻止该调用。但 hook 进程崩溃、超时或无法启动,或者插件加载失败时会怎样,由智能体决定。“放行该调用”意味着 hook 坏掉后什么也保护不了。下表依据各智能体截至 2026 年 10 月的文档或源码整理。

命令分析限制

二进制文件内部行为

命令分析只能看到命令文本。some-tool --task destructive-cleanup 看起来是无害的,因为 CC Safety Net 无法检查任意二进制文件在运行时做了什么。这类威胁请改用沙箱。

未配置或不透明的命令代理

代你运行命令的工具(例如 rtk git reset --hard),只有在你把它声明为透明包装器之后才会被分析。改写或隐藏子命令的代理,即使声明了也无法展开。这两种情况下,只有一项并不完整的 回退文本扫描可能捕获该命令。

插件的 shell 工具在声明之前不被分析

CC Safety Net 认识每个受支持智能体自身的 shell 工具,但不认识社区插件添加的那些。它从不解析这类工具的 command,因此 dsh-ops 插件的 ops_bash 执行 git reset --hard 会被放行。请把这个工具声明为社区 shell 工具。 只有 DeepSeek Harness 会对此发出警告,做法是在每个会话中提示智能体一次。其他宿主不会有任何提示。

eval 和动态执行

本地命令输出的代码不在命令文本里,分析看不到它:
CC Safety Net 会扫描 bash -c 和解释器的代码参数,但看不到 destructive.sh 输出了什么。远程 payload 则直接拒绝,不会去读取,因此 eval "$(curl …)" 和 curl … | python3 - 都以这次下载本身为由阻止。各级别分别阻止什么,见生成命令的 eval 与 source。

脚本文件只做尽力读取

CC Safety Net 会读取 sh x.sh、source x.sh 和 ./x.sh 背后的 shell 脚本,并在脚本内部命中具体规则时阻止命令。分析在脚本的第一个结果处结束,所以脚本中靠前的一行只要是 CC Safety Net 无法验证的(例如 eval),就会隐藏它后面的全部内容。 解释器文件从不读取,所以无论文件里做了什么,python3 tool.py 都会被允许。文件也可能在检查和运行之间发生变化。完整规则见从文件运行的脚本。这类威胁请改用沙箱或操作系统权限。
以下情况下,外层命令的决策保持不变:
  • 文件不可读、大于 256 KB、不是普通文件,或者该命令已经读满 64 个脚本。
  • 同一命令中前面的部分可能写过这个路径。无法确定 cp 的目标时,CC Safety Net 就跳过这次读取。

解释器单行命令存在解析缺口

CC Safety Net 会扫描传给 python、node、ruby 和 perl 的 -c 或 -e 的代码。长格式 --eval、--execute、--print、--require,以及 --eval='code' 这种写法,可能不会被扫描。想一律阻止解释器单行命令(无论使用什么选项),请开启 paranoid interpreters。
在 standard 模式下,除 Python 外的所有解释器中,注释里的引号都可能让字符串字面量的起始位置发生偏移。CC Safety Net 会跳过 Python 的 # 注释,因此其中的引号和括号不影响扫描。strict 模式不受影响。解释器自己执行的根目录或主目录递归删除按代码文本匹配,因此即使这段调用根本不会执行,例如 python3 -c "print(\"shutil.rmtree('/')\")",也一样会被阻止。

PowerShell 只按子集读取

CC Safety Net 读取的是 PowerShell 的一个保守子集,而不是完整语言。在 posix shell 模式下,Remove-Item 规则只在嵌套的 powershell 或 pwsh -Command 脚本中生效。在 auto 模式下,ForEach-Object 和 Where-Object 会切换到 PowerShell 读取器,但它们的别名 % 和 ? 不会。见 PowerShell 命令。

Windows 命令提示符与嵌套 PowerShell

CC Safety Net 用文本检查读取 cmd /c 或 cmd /k 的命令体,而不是用 cmd 解析器。因此它可能阻止一条什么都不删除的命令,例如 cmd /c 'echo rmdir /s /q C:\'。它不会打开命令体运行的批处理文件,也不会对延迟扩展(!VAR!)求值。 对嵌套的 powershell 或 pwsh,CC Safety Net 只读取嵌套的 PowerShell 脚本中描述的那种形式。用 -File 运行或从 stdin 读取的脚本不会被读取,因此无论文件内容是什么,pwsh -File cleanup.ps1 都会被放行。

超出范围的防护

以下限制需要靠隔离而不是命令分析来解决,沙箱能覆盖其中大部分。

敏感路径的覆盖范围有限

机密保护阻止读取一组固定的凭证文件,以及你添加的拒绝路径。它不是通用的读取边界:
  • 文件名和扩展名都不在列表中的文件,CC Safety Net 识别不出其中的凭证。
  • standard 模式允许 test -f .env 这类只查元数据的检查,以及一些它视为“提及”的形式。见 standard 模式不算作读取的情形。strict 和 paranoid 会阻止它们。
  • standard 模式不会从文件名追踪到后续的读取,因此 python3 -c "for f in {'.env'}: print(open(f).read())" 会被放行。strict 会阻止它。
  • policy.json 中的 secret_protection.enabled: false 会关闭整个阶段,拒绝路径也一并失效。

没有完整的文件系统隔离

一次拒绝只拦下一次工具调用,并不强制文件系统权限。灾难性规则始终生效,但要获得完整保护,请使用操作系统权限、沙箱或写入代理(write broker)。

磁盘工具的覆盖是一份具名列表

磁盘规则只匹配具名命令。以下情形不经检查直接运行: 请为团队使用的工具添加自定义规则。

没有网络层

CC Safety Net 检查调用时不发出任何网络请求,也不过滤流量。有两条规则会从命令文本中读出目标地址。发往云元数据端点的请求在所有级别都会阻止;curl 或 wget 向非环回主机的上传只在 strict 和 paranoid 阻止。见网络命令。 这两条规则匹配的是自己列出的选项和主机,而不是实际连接。不在列表内的客户端、同一地址的十进制或十六进制写法、解析到该地址的 DNS 名称,以及指向它的重定向,都不在覆盖范围内。域名允许列表、由提示注入引发的外泄以及容器边界,请交给沙箱的网络限制。

符号链接 TOCTOU 风险

CC Safety Net 在判断 rm -rf 目标时会解析符号链接,而 shell 在此之后才运行 rm。如果符号链接在这期间被改指向别处,CC Safety Net 无法察觉。任何执行前 hook 都无法弥补这个缺口。想采取更严格的立场,paranoid rm 会阻止更多递归删除。

自定义规则配置不防篡改

只有 policy.json 受到保护,智能体无法改动。rule.json 和 rulebook 都是普通文件,运行时在每次工具调用时重新读取,因此能写入规则目录的智能体,可以改变下一次调用时执行的内容。对落盘的 rulebook.json 所做的编辑不会留下任何记录,并且一直生效,直到下一次 rule update 将其覆盖。

破坏性命令漏网后怎么办

按故障排除中的破坏性命令执行了,没有被阻止处理。
最后修改于 2026年11月4日