各レベルが追加するブロック
一部の重大な保護は、選択した安全レベルに依存しません。root と home の再帰削除、Git メタデータ保護、正規の
policy.json 保護は、破壊的コマンドの master switch とルールごとの off override を無視します。Git コマンド
これらの Git 操作は、未コミットの作業を破棄し、復旧履歴を破壊し、または共有 state を書き換えるためブロックします。
force flag と create/reset flag の両方で branch を変更する Git コマンド(例えば
git checkout -Bf、git switch -Cf --discard-changes)は、強制 branch reset として扱い、ブロックします。
Git SSH 環境変数 override
Git は、network 操作中に任意の program を実行するため、GIT_SSH_COMMAND、GIT_SSH、GIT_SSH_VARIANT を使用できます。CC Safety Net は、任意のコマンドを実行できるため、network subcommand と組み合わせたこれらの override をブロックします。
ファイルシステムコマンド
rm -rf の対象は、次の first-match 順序で分類します。未対応の Windows UNC または device 対象、root または home、保護対象の Git メタデータ、一時 path、動的対象、設定済み allow path、作業ディレクトリとしての home、作業ディレクトリ自身、作業ディレクトリ内、作業ディレクトリ外です。一時 path はすべてのレベルで許可します。作業ディレクトリ内の他の path は、paranoid rm が有効でなければ許可します。安全な形式については、許可されるコマンドを参照してください。
破壊的コマンドを POSIX function に隠しても動作は変わりません。function を呼び出した場所で、caller の cwd を使用して body を解析します。call は quote('cleanup')、time/! prefix、eval を通して解決します。呼び出されない definition は不活性です。call 解決と scope については、POSIX shell functionを参照してください。
Git メタデータと動的対象は、設定済み allow path より先に分類します。そのため、destructive_command_protection.allow_paths の項目が Git メタデータ保護を緩和することはなく、検証不能な対象にも適用されません。
デバイスとディスクの破壊
CC Safety Net は、すべての安全レベルでdd、mkfs、shred を解析します。これらのルールは重大ルールではないため、破壊的コマンドの master switch とルールごとの off override を適用できます。
dd ルールを発生させるのは、device への書き込みだけです。device から file への読み取り(dd if=/dev/sda of=./backup.img)と、file-backed image に対する mkfs.ext4 disk.img は許可します。3 つのルールは wrapper と carrier にも適用します。bash -c "dd if=/dev/zero of=/dev/sda"、sudo mkfs.ext4 /dev/sda、env dd of=/dev/sda if=/dev/zero、eval "shred secret" はすべてブロックされます。
Git メタデータ
実行ディレクトリに最も近い祖先.git、解決後の Git ディレクトリ、hooks サブツリーを保護します。この確認は設定読み込み前に実行するため、無効化できません。
symlink の
.git directory と hooks directory は、lexical alias と canonical alias の両方で保護します。存在しない Git directory を参照する .git marker もブロックします。POSIX shell の末尾 * glob は dot-entry に一致しないため、repository root の rm -rf ./* は .git を対象にしません。ただし、rm -rf .git/worktrees/* と PowerShell wildcard は対象にします。
境界:この guard は、実行ディレクトリに最も近い祖先 Git control plane を対象にします。実行ディレクトリの下にネストした他の repository と、解決済み set 外の Git-internal path は対象外です。
正規の policy.json
正規の user policy file、~/.cc-safety-net/policy.json、または変数が設定されている場合の $CC_SAFETY_NET_HOME/policy.json の変更や削除は常にブロックします。この確認は設定の読み込み前に実行するため、保護対象 policy で無効にすることはできません。拒否結果に安全レベルと config state はありません。reason 文字列は正確に次のとおりです。
- 直接の write、edit、patch target。
- 正確な shell operand と write redirection。
- 対応する environment-variable、relative、既存 symlink alias。
- policy directory またはその祖先に対する再帰
rm。 - file、directory、または祖先を source とする
mv。
[, cat, file, grep, head, jq, less, ls, more, rg, sed, stat, tail, test, wc は許可します。
PowerShell Remove-Item
PowerShell support は、Remove-Item とその alias、および既存の cross-shell rule を中心とした保守的な subset です。一般的な PowerShell parser ではありません。ルールは powershell と auto shell mode で適用します。posix mode は意図的に適用しませんが、git.reset-hard と rm.recursive-force-root-or-home などの cross-shell rule は引き続き適用します。
alias と省略 parameter を解決するため、
ri . -r -fo もブロックします。invocation-operator 形式(& Remove-Item ...、& { ... }、. { ... })、literal 文字列を持つ iex / Invoke-Expression、$(...) subexpression も解析します。line comment(#)と block comment(nested を含む <# ... #>)は無視しますが、その後にある実コマンドは引き続きブロックします。不正または深さ上限を超えた block comment と subexpression は fail-closed です。
-WhatIf は PowerShell が実際には何も削除しないため、ブロックを無効にします。-WhatIf、-WhatIf:$true、省略形 -wi は、通常ならブロックする Remove-Item . -Recurse -Force をすべて許可します。明示的な -WhatIf:$false は再度ブロックします。上の strict 専用行には 1 つ例外があります。Remove-Item $HOME -Recurse -Force は動的対象ではなく root/home 対象として分類されるため、standard でブロックします。機密パス
機密パス保護は、コマンド解析前に実行する別の guard stage です。対応する command、path、search(grep/glob)、patch 形式に適用し、unknown tool の任意の text を shell コマンドとして扱うことなく unknown tool も確認します。 書き込みだけではなく、組み込み機密 set の読み取りもブロックします。cat .env、env cat .env、sudo command cat .env、strings id_rsa、xxd .env、base64 .env、dd if=.env、cat ~/.ssh/id_rsa、bash -c "cat .env"、node -e 'require("child_process").execSync("cat .env")' はすべてブロックされます。
command-shape extraction は上限付きで構造的です。構造的な shell-syntax 上限では fail-closed になり、無効な parse では throw します。設定済み deny path は組み込みルールより前に一致させ、standard-mode の allowance で緩和することはありません。
すべての rule id と family、保護対象 path、2 つの Coding CLI tier、match 順序、exemption については、機密情報保護のリファレンスを参照してください。機能全体は secret_protection.enabled: false で無効にでき、個別ルールは secret_protection.overrides で on または off にできます。ポリシーを参照してください。
Shell ラッパーとインタープリター 1 行コード
bash -c または sh -c などの shell interpreter で wrapper されたコマンドもブロックします。ネストした wrapper を最大 10 階層まで再帰解析します。この深さを超えるコマンドは、通過させず拒否します。
Interpreter の 1 行コードに埋め込まれた破壊的 code は、既定で検出してブロックします。CC Safety Net は interpreter の
-c または -e flag に渡された code を抽出し、埋め込まれた破壊的操作を scan します。そのため、agent は Python または Node call に os.system("rm -rf /") を入れて hook を通過させることができません。
解析する interpreter は、
python、python2、python3、node、ruby、perl です。ブロックを発生させるのは埋め込まれた破壊的コマンドであり、1 行コードの形式だけなら既定で許可します。
すべての interpreter 1 行コードをブロックする
内容に関係なく interpreter 1 行コードをブロックするには、CC_SAFETY_NET_PARANOID_INTERPRETERS=1 を設定します。危険な code がなくても、すべての python -c、node -e、ruby -e、perl -e 1 行コードをブロックします。python -c "print(1)" は standard と strict で許可され、ここではブロックされます。モードを参照してください。
strict と paranoid の heredoc
fail-closed 機能が有効な場合、heredoc コマンドは次の条件をすべて満たす場合だけ許可します。
- コマンドに heredoc が 1 つある。
- heredoc が標準入力にある。
- delimiter が quote されている。
- コマンドに他の入力 redirection がない。
- consumer が literal の
cat、tee、git apply、git commit、gh pr create、gh issue createのいずれかである。
解析できないコマンドテキスト
heuristic scan は、
rm -rf、git reset --hard、git reset --merge、git clean -f、git checkout --force、git checkout --、git push --force、git push --delete、git branch -D、git tag -d、git stash drop、git stash clear、--staged なしの git restore、find -delete、dd of=/dev/、mkfs /dev/、shred <arg> を確認します。一致した場合は、ルール raw-text.dangerous-command で拒否します。text が echo または rg で始まる場合、find、dd、mkfs、shred pattern は除外するため、これらの文字列を echo または ripgrep invocation に quote しても scan を発生させません。
explain コマンドを使用すると、CC Safety Net が特定のコマンドをブロックまたは許可する正確な理由を追跡できます。flag については CLI コマンド、JSON schema については explain トレースを参照してください。