本文へスキップ

Claude Codeは安全?93件のインシデントから分かること

Markdownで表示Claudeで開くChatGPTで開くPerplexityで開く

質問もコピーされます。チャットが空で開いた場合は貼り付けてください。

TL;DR

Claude Codeは、設定すれば安全に使え、デフォルトのままでは危険です。2026年10月の新規インストールでは、サンドボックスはオフ、denyルールもhookもなく、あなたが承認したシェルコマンドは、ユーザーアカウントが書き込める場所ならどこにでも書き込めます。GitHubのissue、セキュリティアドバイザリ、セキュリティ系の記事から公開インシデント93件を分類しました。被害の原因は、頼んでいないgit reset --hardやデータベースのリセット、CLAUDE.mdにしか書かれていなかったルール、信頼できないリポジトリ・issue・プラグイン、そしてサブエージェントがサブエージェントを起動することでした。派手なrm -rf /はほとんどありません。作業をgitに入れ、サンドボックスを有効にし、denyルールとブロックするhookを1つ書き、本番の認証情報をエージェントの手の届かない場所に置いてください。

93

原因別に分類した公開インシデント、2025年6月〜2026年10月

GitHub issue、アドバイザリ、セキュリティブログ、Hacker News

19

データが完全に失われたと書かれたもの

ほかに11件は復旧したと書かれている

10

CLAUDE.mdにだけ書かれていたルールを破ったもの

プロンプトは助言、権限ルールは強制

Denysです。フルスタック・AIエンジニアで、Claude Codeを毎日使っています。ここでは2つのことを書きます。ほかの人に何が起きたか、そしてClaude Codeがそれに対して何を提供しているか(どの対策がデフォルトで有効かを含む)。そのうえで、穴をふさぐ設定を示します。

Claude Codeは安全?

安全性はモデルにあるのではありません。Claude Codeは、権限モード、権限ルール、任意のサンドボックス、任意のhookで、何を実行するかを決めます。Anthropicの権限のページははっきり書いています。ルールを強制するのはモデルではなくClaude Codeで、CLAUDE.mdの指示はClaudeが何を試みるかを左右するだけで、何が許可されるかは変えません。

だから正直な答えは、設定しだいです。セキュリティのページは、作業ディレクトリの境界を権限プロンプトだと説明し、「承認したBashコマンドは、ユーザーアカウントが書き込める場所ならどこにでも書き込める」と付け加えています。サンドボックスのページには「サンドボックスはデフォルトでオフ」とあり、オンにしても対象はシェルコマンドだけで、ファイルツール、MCPサーバー、hookはその外で動く、とあります。セキュリティのページのAnthropic自身の結びの言葉は「あらゆる攻撃に完全に耐えられるシステムはない」です。

ほかの人に何が起きたか:インシデント93件

2026年10月31日に、Claude Codeが被害を出した、または出しかけた公開報告を集めました。GitHubのissueとセキュリティアドバイザリが63件、セキュリティ・エンジニアリング系ブログの記事が26件、Hacker Newsのスレッドが4件で、期間は2025年6月〜2026年10月です。ミラー経由でしか見られないRedditのスレッドは除きました。各報告に1つの種類を付け、報告者が書いていれば権限モードとデータが失われたかどうかも記録しました。GitHubの本文と照合した61件の引用のうち、60件は一字一句一致しました。

インシデント93件(種類別)。GitHub issue、アドバイザリ、ブログ、Hacker News。2025.06〜2026.10。サンドボックス・権限の回避:15、gitの作業が消失:14、シークレットの漏えい:12、ファイルの削除:11、データベースの破損:9、悪意あるMCPサーバー・プラグイン:9、サブエージェントの費用暴走:9、プロンプトインジェクション:5、その他:9。
図1. 公開インシデント報告93件(GitHub issueとアドバイザリ63件、ブログ記事26件、Hacker News 4件)、2025年6月〜2026年10月、2026年10月31日に収集。

19件はデータが完全に失われたと書き、11件は復旧したと書き、36件は誰かが被害を受ける前に見つかった穴(多くは修正済みのアドバイザリ)を説明し、27件は書いていません。93件中56件は権限モードを書いていないため、この集合から「YOLOモード」が被害の起きる場所かどうかは分かりません。見えるのは、5つのパターンです。

1. エージェントが、誰も頼んでいない破壊的なコマンドを実行する。 lintエラーを直している最中にgit checkout HEAD -- .を実行し、未コミットの1時間分の作業を捨てました(#11821)。セッション開始時に、未pushのコミットの上からgit reset --hard origin/mainを実行しました(#34327)。バックアップのない本番データベースにdrizzle-kit push --forceを実行し(#27063)、本番へのPrismaのリセットを受け入れ(#33183)、ある記事では、フォルダに古い本番のstateファイルがある状態でterraform destroyを実行しました。どれもrm -rf /ではありません。ツール自身の確認を飛ばすフラグが付いた、普通のコマンドです。

2. CLAUDE.mdにしかないルール。 10件の報告は、エージェントが書かれたルールを破ったものです。150行のセキュリティの節があるのに本物のAPIキーをコミットし(#2142)、「絶対にコミットしない」ルールの後にコミットし(#34774)、grepでトークンを出力して、後になってから気づきました(#44868)。ある報告者は、CLAUDE.mdがエージェントの書き込めるリポジトリの中にあることを指摘しています(#23870)。ドキュメントと一致します。プロンプトは助言、ルールは強制です。

3. denyルールが止めるのはコマンドであって、目的ではない。 Bash(rm *)を拒否していても、エージェントはPythonのワンライナーでファイルを削除しました(#39459)。権限のページも、テキストマッチングについて同じことを書いています。git -C . pushは、git pushのルールには一致しません。

4. 信頼できないテキストとコードに、あなたと同じ権限が与えられる。 リポジトリ自身の設定ファイルが、信頼ダイアログの前にhookを実行してAPIキーを送信できました(Check Point、CVE-2025-59536)。GitHub issueの中のプロンプトによって、Claude CodeのGitHub Actionがランナーの環境変数を読み、APIキーを明かしました(Microsoft)。隠れたhookを持つマーケットプレイスのプラグインが、攻撃者のサーバーにコードを送り(PromptArmor)、10月には、改ざんされたClaude Code拡張機能のコピーがCursorのマーケットプレイスに置かれていました(Cursor)。修正されたものは修正済みですが、パターンは残ります。

5. サブエージェントがサブエージェントを起動する。 1つのセッションで600ドル以上が消えました(#72732)。別のセッションでは、ユーザーが/exitと入力する前に約242のエージェントが起動しました(#69332)。#72732のメンテナーの返信によると、同時実行サブエージェント数とネストの深さの上限は2.1.217と2.1.219で追加されました。

Claude Codeが提供するものと、デフォルトで有効なもの

以下の対策はすべて実在し、ドキュメントにあります。重要なのは3列目です。

対策 何をするか デフォルト、2026年10月
権限モード Manualは編集とコマンドの前に確認し、auto modeはあなたの代わりに分類モデルが承認する v2.1.283以降、対話セッションの開始モードはauto mode
auto modeの分類器 危険と判断した操作をブロックする auto modeでオン。Anthropicの2026年3月の数値:実際の出しゃばった操作52件のうち17%を見逃した
deny、ask、allowルール 一致するツール呼び出しを、すべてのモードでブロックまたは確認させる 自分で書くまで何もない
Bashサンドボックス シェルコマンドのファイルとネットワークをOSレベルで制限する オフ。シェルのみ。拒否しない限り~/.sshを読む
Hook 各ツール呼び出しの前に自分のスクリプトが走り、ブロックできる なし
チェックポイントと/rewind Claudeのファイル編集を元に戻す オン。ただしBashだけが変更したファイルは追跡されない
信頼ダイアログ、.mcp.jsonの承認 フォルダやプロジェクトのMCPサーバーを信頼する前に確認する 対話ではオン。-pセッションはどちらも表示しない
管理設定 組織がモード、ルール、hookを固定する 会社が展開しない限り、なし

1回のツール呼び出しが通る経路です。赤い段階は、新規インストールでは空かオフの部分です:

  1. Claudeがツール呼び出しを提案するファイル編集、シェルコマンドの実行、MCPサーバーの呼び出し。
  2. PreToolUse hook自分のスクリプトが呼び出し全体を見て、ブロックできます。デフォルトではなし。
  3. denyとaskのルール書かれたとおりのコマンドと照合します。デフォルトではなし。
  4. 権限モードManualはあなたに聞き、auto modeは分類器に聞き、bypassは誰にも聞きません。
  5. サンドボックスファイルとネットワークのOSレベルの制限で、対象はシェルコマンドのみ。デフォルトではオフ。
  6. 呼び出しは、あなたのユーザーの権限で実行されるこの先で助けになるのは、gitとバックアップだけです。
図2. 提案されたツール呼び出しからファイルまでの層と、2026年10月時点のClaude Codeでのデフォルト。

--dangerously-skip-permissionsにはドキュメントに専用の一文があります:「Claude Codeが被害を出せない、コンテナやVMのような隔離された環境でのみ、このモードを使うこと。」

denyルールとhookは、どちらもコマンドをテキストとして判断するので、書き方を変えたコマンドはすり抜ける可能性があり、hookはあなたの全権限で動きます。だからこの2つは1つの層で、git、バックアップ、分離した認証情報がほかの層です。

Claude Codeを安全に設定する方法

1分あたりの価値が高い順です。

  1. 始める前に、そして頻繁にコミットする。 チェックポイントは、シェルコマンドが変更したファイルをカバーしません。gitはカバーします。
  2. 本番の認証情報を、エージェントのフォルダに置かない。 ある報告では、ローカルの.envに本番の認証情報がコメントアウトされずに残っていたため、サブエージェントの使い捨てスクリプトがすべてのテーブルにDELETE FROMを実行しました(#64056)。エージェントが壊せる開発用データベースは構いません。届いてしまう本番データベースが、インシデントになります。
  3. 破壊するコマンドにdenyルールを書く。 bypassを含むすべてのモードで適用されます:
{
  "permissions": {
    "deny": [
      "Bash(git reset --hard *)",
      "Bash(git push --force *)",
      "Bash(git push -f *)",
      "Bash(git checkout -- *)",
      "Bash(git clean *)",
      "Bash(terraform destroy *)",
      "Bash(drizzle-kit push --force *)",
      "Bash(prisma migrate reset *)",
      "Read(./.env)",
      "Read(./.env.*)"
    ]
  },
  "sandbox": {
    "enabled": true,
    "allowUnsandboxedCommands": false
  }
}
  1. サンドボックスをオンにし(/sandbox)、上のようにサンドボックス外での再試行をオフにする。サンドボックスは~/.sshとクラウドの認証情報フォルダをデフォルトで読むので、filesystem.denyReadを追加してください。
  2. テキストのルールが見逃すものに、PreToolUse hookを1つ追加する。 denyルールにはgit -C . push --forceやPythonでの削除が見えませんが、コマンド全体を見る短いスクリプトなら見えます。最も痛い5つのコマンドから始めてください。
  3. 信頼できない内容はコードとして扱う。 知らないリポジトリはコンテナかVMで開き、CIの実行には範囲を絞ったトークンを渡し、-pセッションには信頼ダイアログが出ないことを覚えておいてください。プラグインやMCPサーバーはあなたの権限で動きます。Anthropicは「MCPサーバーのセキュリティ監査も管理も行わない」と述べています。
  4. 長い実行に上限をかける。 無人の作業には--max-budget-usdを使い、サブエージェントの数を見ておいてください。

エージェントがSupabaseの上で作る場合も、キーについて同じ考え方が当てはまります。スクリプトで使うsecret keyはすべてのポリシーを素通りします。これはanon keyとservice role keyの違いで示しました。AIで作ったアプリがよく間違える点の全体はバイブコーディングのセキュリティリスクに、長い実行でエージェントがどう失敗するかはマルチエージェントのオーケストレーションで壊れたものにあります。

よくある質問

Claude Codeは私のファイルを削除できる? できます。Manualモードでは先に確認しますが、承認したコマンドはユーザーが届くあらゆる場所に届きます。自動承認のモードでは、確認されないこともあります。上の報告のうち11件はファイルの削除です。いつでも効く対策は、gitとバックアップです。

--dangerously-skip-permissionsは安全? Anthropicのドキュメントによれば、失って困るものが何もないコンテナかVMの中でだけです。このモードでも、denyルールとhookは適用されます。プロンプトは適用されません。

auto modeは安全? 反射的にすべてを承認するよりは安全です。Anthropicは、誤検知率0.4%を測定し、2026年3月のテストでは実際の出しゃばった操作の17%を見逃したと述べ、「重要なインフラに対する、慎重な人間のレビューの代わりにそのまま使えるものではない」と評しています。

Claude Codeは、学習のために私のコードをAnthropicに送る? 商用条件(Team、Enterprise、API)では、オプトインしない限り、コードやプロンプトで学習しないとAnthropicは述べています。個人向けプランでは、自分で管理する設定です。詳細はデータ利用のページにあります。

auto modeは--dangerously-skip-permissionsと同じ? 違います。Anthropicは、このフラグの代わりにauto modeを作りました。分類器がシェルコマンド、ネットワーク呼び出し、サブエージェントの起動を引き続き確認し、連続3回、または合計20回拒否すると停止して、あなたに制御を戻します。フラグは何も確認しません。

© 2026 Denys Zaichenko. 元の記事: https://madsalt.tech/ja/blog/is-claude-code-safe/