メインコンテンツへスキップ

CC Safety Net では防げないものは何ですか?

CC Safety Net は、対応するツール呼び出しを実行前に検査します。プロセスの封じ込めやネットワーク通信のフィルタリングはせず、バイナリの内部で何が起きるかも見えません。保護するのは、認識できる資格情報ファイルと自分で追加した拒否パスだけで、インストール済みの連携を迂回するコマンドは一切検査しません。 データ流出、信頼できないコード、完全な封じ込めが問題なら、サンドボックスや OS の権限を併用してください。 standard モードは、敵対的な入力や動的な入力を確実に防げるわけではありません。以下の制限のいくつかは strict または paranoid モードで閉じられる緩和で、該当する箇所ではその旨を明記しています。

エージェント固有の制限

CC Safety Net 自身が解析を完了できない場合、どの連携も呼び出しをブロックします。一方、フックのプロセスがクラッシュした、タイムアウトした、起動できなかった、あるいはプラグインの読み込みに失敗したときの動作は、エージェント次第です。「呼び出しを許可」は、フックが壊れていると何も保護されないことを意味します。表は、各エージェントのドキュメントまたはソースコードに基づく 2026 年 10 月時点の動作です。

コマンド解析の制限

バイナリ内部の動作

コマンドの解析が見るのは、コマンド文字列だけです。CC Safety Net は任意のバイナリが実行時に何をするかを検査できないため、some-tool --task destructive-cleanup は無害に見えます。この種の脅威にはサンドボックスを使ってください。

未設定または不透明なコマンドプロキシ

rtk git reset --hard のように代わりにコマンドを実行するツールを CC Safety Net が解析するのは、それを透過ラッパーとして宣言した後だけです。子コマンドを書き換えたり隠したりするプロキシは、宣言しても透過できません。どちらの場合も、そのコマンドを拾える可能性があるのは、完全ではないフォールバックのテキストスキャンだけです。

プラグインのシェルツールは、宣言するまで解析されない

CC Safety Net は、対応する各エージェント自身のシェルツールは把握していますが、コミュニティ製プラグインが追加するツールは知りません。そうしたツールの command はパースされないため、dsh-ops プラグインの ops_bash で実行する git reset --hard は許可されます。そのツールをコミュニティ製のシェルツールとして宣言してください。 これを警告するのは DeepSeek Harness だけで、セッション中 1 回だけエージェントに通知します。ほかのホストは何も知らせません。

eval と動的実行

ローカルのコマンドが出力するコードはコマンド文字列に含まれないため、解析からは見えません。
CC Safety Net は bash -c やインタープリターのコード引数をスキャンしますが、destructive.sh が何を出力するかは見えません。リモートのペイロードは読み取らずに拒否するため、eval "$(curl …)" や curl … | python3 - はダウンロードそのものを理由にブロックされます。各レベルが何をブロックするかは、生成されたコマンドの eval と sourceを参照してください。

スクリプトファイルの読み取りは可能な範囲にとどまる

CC Safety Net は sh x.sh、source x.sh、./x.sh が実行するシェルスクリプトを読み取り、その中にルールと具体的に一致する箇所があればブロックします。解析はスクリプト内で最初に出た結果で終わるため、eval のように CC Safety Net が検証できない行が前方にあると、それ以降の内容は見えなくなります。 インタープリター向けのファイルは一切読まないため、python3 tool.py はファイルの内容にかかわらず許可されます。また、検査から実行までの間にファイルが変わることもあります。ルールの全体はファイルから実行するスクリプトで説明しています。この脅威に対しては、サンドボックスや OS の権限を使ってください。
次の場合は、外側のコマンドの判定がそのまま残ります。
  • ファイルが読み取れない、256 KB を超える、通常のファイルではない、またはそのコマンドがすでに 64 個のスクリプトを読み終えている。
  • 同じコマンドの前の部分がそのパスに書き込んだ可能性がある。cp の宛先を特定できない場合、CC Safety Net は読み取りを省きます。

インタープリターのワンライナーにはパースの隙間がある

CC Safety Net は、python、node、ruby、perl の -c や -e に渡されたコードをスキャンします。長形式の --eval、--execute、--print、--require や、--eval='code' の形はスキャンされないことがあります。フラグにかかわらずインタープリターのワンライナーをすべてブロックするには、paranoid のインタープリターチェックを有効にしてください。
standard モードでは、Python 以外のインタープリターで、コメント内の引用符によって文字列リテラルの開始位置がずれることがあります。CC Safety Net は Python の # コメントを読み飛ばすため、その中の引用符や括弧は結果に影響しません。strict モードは影響を受けません。インタープリター自身が実行するルートやホームの再帰削除は、コードのテキストで一致を判定します。そのため python3 -c "print(\"shutil.rmtree('/')\")" のように、その呼び出しが何も実行しない場所にあってもブロックされます。

PowerShell は一部の構文だけを読み取る

CC Safety Net が読み取るのは、PowerShell の言語全体ではなく、保守的に絞った一部の構文です。シェルモードが posix の場合、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 は、入れ子の PowerShell スクリプトで説明する形のときだけ読み取ります。-File で実行するスクリプトや標準入力から読むスクリプトは読み取らないため、pwsh -File cleanup.ps1 はファイルの内容にかかわらず許可されます。

保護の対象外

ここに挙げる制限には、コマンドの解析ではなく封じ込めが必要です。その多くはサンドボックスでカバーできます。

機密パスの対象範囲は限られている

シークレット保護がブロックするのは、決まった資格情報ファイルの集合と、自分で設定した拒否パスの読み取りです。汎用の読み取り境界ではありません。
  • 名前も拡張子も一覧にないファイルに置かれた資格情報は、認識されません。
  • 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 は、拒否パスも含めてこのステージ全体を無効にします。

完全なファイルシステムの封じ込めはできない

拒否で止まるのはツール呼び出し 1 回分で、ファイルシステムの権限を強制するものではありません。致命的な操作に対するルールは常に適用されますが、完全な保護が必要なら、OS の権限、サンドボックス、書き込みブローカーを使ってください。

ディスクツールの対象は列挙したコマンドに限られる

ディスクのルールが一致するのは、名前を挙げたコマンドだけです。次のものは検査されずに実行されます。 チームで使うツールについてはカスタムルールを追加してください。

ネットワークの層を持たない

CC Safety Net は呼び出しを検査する間にネットワーク通信を行わず、通信のフィルタリングもしません。ただし 2 つのルールが、コマンドテキストから通信先を読み取ります。クラウドのメタデータエンドポイントへのリクエストはどのレベルでもブロックされます。ループバック以外のホストへの curl や wget によるアップロードは、strict と paranoid でのみブロックされます。ネットワークコマンドを参照してください。 これらが照合するのは、ルールが挙げているオプションとホストであり、実際の接続ではありません。一覧にないクライアント、同じアドレスを 10 進数や 16 進数で表記したもの、そのアドレスに解決される DNS 名、そこへのリダイレクトは、いずれも対象外です。通信先ドメインの許可リスト、プロンプトインジェクションによる情報流出、コンテナ境界には、サンドボックスのネットワーク制限を使ってください。

シンボリックリンクの TOCTOU リスク

CC Safety Net は rm -rf の対象を分類するときにシンボリックリンクを解決し、その後でシェルが rm を実行します。その間にシンボリックリンクの参照先が差し替えられても、CC Safety Net は検出できません。実行前のフックではこの隙間を塞げません。より厳しくしたい場合は、paranoid の rm チェックを使うと、より多くの再帰削除をブロックします。

カスタムルールの設定に改ざん耐性はない

エージェントから保護されているのは policy.json だけです。rule.json とルールブックは、ツール呼び出しのたびにランタイムが読み直す通常のファイルです。そのため、rules ディレクトリに書き込めるエージェントは、次の呼び出しから適用される内容を変えられます。取り込み済みの rulebook.json を編集しても記録は残らず、次の rule update で上書きされるまでその内容が適用されます。

破壊的なコマンドがすり抜けたときの対処

トラブルシューティングの破壊的なコマンドがブロックされずに実行されたの手順に従ってください。
最終更新日 2026年11月4日