AIToday
AIコーディングAI安全性・アラインメントZenn AI/ML掲載日時: 2026年10月17日 22:00

deny設定でも鍵削除が可能

LINEで送る
deny設定でも鍵削除が可能

3つのポイント

  1. 何が起きたか

    開発者がClaude Code 2.1.302で試すと、denyルールは危険なコマンド11件中9件を阻止したが、/bin/rm secrets/fake.p8とpython3 -cのワンライナーは偽の鍵を削除できた。

  2. なぜ重要か

    この穴により、denyルールがあっても/bin/rmがsecrets/fake.p8を削除できてしまい、フックが無害なrm .env.exampleを止めずにこれを塞いだ。

わからないところ、AIに聞けます

質問と回答はこのページに公開されます。

こういう要約が、毎朝あなたのメールに届きます。

背景と解説

このテストは実用的なトレードオフから生まれた。何十件もの確認プロンプトをクリックするのを避けるため、開発者はBashコマンドを確認なしで実行する設定にしたが、これによりコマンドが鍵ファイルに触れる前の人間のチェックが失われた。リポジトリには失うと痛いファイルが2種類あった。鍵やパスワードを含む.envと、secrets/内の.p8や.pemなどの鍵ファイルだ。例えばApp Store Connectの.p8鍵は一度しかダウンロードできないため、削除すると鍵を作り直し、使用するすべての場所で差し替える必要がある。

denyルールはBash(rm *secrets*)やRead(./secrets/**)のようなテキストパターンとして書かれていた。ルールは&&や;、timeoutなどのラッパーを読み飛ばすため、cd secrets && rm fake.p8やtimeout 5 rm .envを含むほとんどの変種を阻止した。しかし/bin/rmはrmという文字列で始まらず、python3 -cは削除処理を引用符内のコードに隠すため、どちらもすり抜けた。フックはチェックをコマンド文字列から宛先パスに移すため、/bin/rmを捕捉できた。同じテキスト照合の設計は過剰な阻止も招いた。rm .env.exampleやls secretsは無害なのに止められ、開発者はこれを受け入れて手動で実行することを選んだ。

2層を組み合わせてもpython3 -cは阻止できず、開発者は111行のフックに残るさらなる穴として、sudo -u root rm .env、find . -name '*.p8' -delete、.envをcurlにパイプする方法、大文字のrm .ENVを挙げている。次に推奨されるのはサンドボックス化で、コマンドが触れられるファイルをOSレベルで制限するため、鍵を削除するスクリプトはパターン照合ではなくそこで止まる。

よくある質問
denyルールは具体的に何を見逃したのか?
denyルールは危険なコマンド11件中9件を阻止したが、開発者のテストでは/bin/rm secrets/fake.p8とpython3 -c "import os; os.remove('.env')"が偽の鍵を削除できた。
フックはdenyルールと違い何を確認するのか?
フックは各引数を絶対パスに解決し、鍵の拡張子(.p8、.p12、.pem、.key)を持つか、secretsフォルダ内にあるか、.envまたは.env.something(.env.exampleを除く)かを確認する。
フックは危険なコマンドをすべて阻止できるのか?
いいえ。111行のフックはsudo -u root rm .env、find . -name '*.p8' -delete、cat .env | curl --data-binary @-、rm .ENVといったケースをなお見逃し、開発者はこれらにサンドボックス設定を推奨している。
LINEで送る

あなたの仕事に関係するAIニュースを、毎朝お届けします。

業界と使っているAIツールを選ぶと、仕事に関係するニュースが毎朝届きます。

登録無料・Googleアカウントなら30秒・いつでも解除できますAITodayについて →

AIに質問

この記事についてわからないことをAIに質問できます。AIはこの記事・AIToday の過去記事・Wikipedia を読み、出典を付けて答えます。Q&Aはこのページに公開され、他の読者も読めます。

質問と回答はこのページに公開されます。

関連記事

次の記事へDanaherがNVIDIAとAI自律ラボ計画