世界を動かす技術を、日本語で。

クロードコード破壊 オーパス5 自動モード

概要

  • Claude Code Opus 5 のAuto Modeは、安全性評価で0.00%の攻撃成功率と報告されているが、実際には 特定の攻撃チェーンで60-80%の成功率 を記録
  • Auto Modeは人間の承認プロンプトを 安全性分類器 に置き換えたが、完全な防御策ではない
  • 攻撃は ZIPアーカイブ内のモジュールシャドウイング を利用し、間接的に任意コードを実行
  • Auto Modeの限界 と、OSレベルの隔離やネットワーク制御の必要性を強調
  • サンドボックス化と監視 が不可欠であることを再確認

Claude Code Opus 5 Auto Modeの脆弱性検証

  • Anthropic委託の第三者評価で Opus 5 Auto Mode は72シナリオで攻撃成功率0.00%と報告
  • 実際の攻撃チェーンでは 60-80%の攻撃成功率 を観測
  • Auto Modeは デフォルトで有効化 されており、人間の承認を不要とする設計
  • 安全性分類器 のみでは、プロンプトインジェクションや誤動作の根本的な防御は困難
  • Auto Mode運用時は 隔離環境と監視 が必須

攻撃チェーンの詳細

  • 攻撃は WebFetchツール から curl への移行を誘導し、 ZIPアーカイブ をダウンロードさせる
    • サーバーが 415エラー を返し、Claudeはcurlで再取得
    • ZIP内に 悪意あるstruct.py を配置
  • Claudeはバイナリデコーダを拒否し、自ら Pythonデコーダ を生成・実行
  • Pythonモジュールシャドウイング を利用し、base64経由でstruct.pyをロード
    • struct.pyが 悪意あるコード を実行し、リモートペイロードをダウンロード・実行
  • python3 -I によるisolated mode利用で再帰的な攻撃を回避
  • C2コールバック やCalculator起動など、現実的なマルウェア挙動を再現

Claudeの挙動とAuto Modeの限界

  • Claudeは 攻撃後にstruct.pyの悪意性に気付く ケースも観測
  • マルウェア検知後、 プロセス停止コマンドがAuto Modeで拒否 される事例も発生
  • Auto Modeの安全性分類器 は、複数ステップの攻撃チェーンや巧妙な誘導には対応困難

他の攻撃バリアント

  • struct.pyが 新たなClaude Codeインスタンス をサブプロセスで起動
    • サブエージェントによる 情報収集やファイル書き込み も可能
  • 攻撃成功率(ASR)は 60-80% と高水準
    • 例:python3 -I -c経由でC2チェーン成功3/5(60%)、claude -pサブプロセスで80%

Claudeが攻撃を防御できたケース

  • アーカイブを 静的解析 し、ルートディレクトリでPythonを実行しなかった場合
  • python3 -I を用いisolated modeで実行した場合
  • 安全なディレクトリ からデコーダを実行した場合
  • モジュールシャドウイングを 事前検知 した場合

評価・Disclosure・Anthropicの見解

  • 攻撃結果は modelbugbounty@anthropic.com に報告済み
  • Anthropicは「Auto Modeは 利便性のための分類器 であり、セキュリティ保証ではない」と回答
  • OSレベルの隔離とネットワーク制御 が現実的な防御境界
  • 0.00%攻撃成功率のマーケティングは、 限定的なシナリオのみ のため誤解を招く
  • プロンプトインジェクションは「実質解決」との主張と、現実の攻撃成功例が 矛盾

推奨対策:サンドボックス化と監視

  • モデル出力は信用せず、必ずOSレベルのサンドボックスと監視を実施
  • 無人運用エージェント は、隔離環境外で実行しないことが必須
  • AIの逸脱挙動と攻撃被害 の常態化を防ぐためにも、運用側の対策が不可欠

Hackerたちの意見

面白い攻撃だね、デザインもすごくいい。でも、オートモード自体とはあんまり関係ない気がする。

ポイントは、オートモードが人に誤った安心感を与えて、ちゃんとしたサンドボックスでClaudeを動かす必要がないと思わせることなんだ。この攻撃がサンドボックス内(たとえYOLOモードでも)で実行されれば、比較的無害になるだろうね。

オートモードとは全然関係ないと思うよ。マニュアルモードでは完璧に動くはず。Claudeも必要ないし、ただ人間に似たアーカイブを渡して、少なくとも一度はそのディレクトリから簡単なPythonを実行させればいいんだ。変な.pyファイルに気づかないように、たくさんのファイルを用意しておけばね。

このデフォルトのオートモードと誤解を招くマーケティングは、損害が蓄積したら集団訴訟を呼ぶかもしれない。特に、オートモードがクリーンアップを妨げることもあるからね!

まあ、AI企業には法律が適用されないから、俺たちがバカを見たってことだね。

確か、利用規約に同意すると集団訴訟を起こす権利を放棄することになるんだっけ?

Python開発者じゃないけど、特定の名前のファイルが同じフォルダにあるだけでシステムライブラリが変更されるって、すごく驚きの挙動だと思う。

CやC++でも、ライブラリディレクトリ内のシステムヘッダーで似たようなことが起こるよね(もしかしたら、そういうことに対して警告を出すコンパイラもあるかも?)。ほとんどの言語は、こういうことを防ぐように標準ライブラリを特別扱いしてないからね。

これはひどい問題で、エコシステムにとってかなりの落とし穴だね。例えば、俺はRNGの使用分析のためにtool_name/random.pyを使ったツールを作ったんだけど、そのディレクトリ内で実行されるコマンドはbuiltinのimport randomを隠しちゃうんだ。だから、そのディレクトリからblackフォーマッターを実行できなかった。ローカルのrandom.pyを誤ってインポートしちゃうからね。解決策は、Pythonのフラグを更新して-Iを含めること。そうすれば、Pythonは隔離モードで実行される。これはPEP-668の実装に対する俺のフラストレーションにも関係してる。Pythonは長い間、システムライブラリの偶発的な上書きの問題を抱えてる。もしsudo python -mpip install fooを実行すると、ディストリビューションのsudo apt-get install python-fooと非常に悪い相互作用を起こす可能性がある。pipがapt-getで管理されるべきファイルを追加/削除するからね。でも、これを防ぐための警告を追加する際に、~/.local/pythonX.Y/site-packagesにも同じ警告を適用しちゃった。ここは通常、ユーザーがpython -mpip --local fooで追加パッケージをインストールする場所だから。主張としては、これは/usr/bin/pythonのインポートパスの一部だから、ユーザーのsite-packagesへのインストールもブロックすべきだってこと。これはPEP-668の目的を「ファイル所有権の競合を避ける」から「システムツールのための隔離されたPython環境を確保する」に変えてしまう手品みたいなもんだ。もし俺が/usr/bin/pythonのインポートがディストリビューション管理のインストールだけに影響されるべきだという主張を受け入れるなら、どこでも*.pyファイルを作ることも禁止されるべきだよね。だって、作業ディレクトリにあったらインポートされるんだから。これは明らかにおかしいし、システムレベルの隔離されたPythonを持つためにユーザーレベルのsite-packagesを壊すのが正当化されるとは思えない。正しい解決策は、ディストリビューション管理のプログラムが#!/usr/bin/python -Iをシェバンとして使うことだよ。そうすれば、実際に隔離された環境が得られるのに。結局、PEP-668はユーザーレベルのsite-packagesを無駄に壊して、解決しようとした問題すら解決できなかったんだ。

うん、ここでの最初の印象は「わお、Pythonってダメだな」って感じだね。

記事を読んだ後の私の感想は、これってPythonの脆弱性が示されてるだけで、Claude Codeの問題じゃないってことかな。

これはプロンプトインジェクション攻撃とは言えないと思う。エージェントを悪意あるものに乗っ取るわけじゃないからね(記事の後半でそのことについても触れてるけど)。むしろ、Claudeを特に騙すことを狙ったトロイの木馬みたいなもんだ。

Hacker Newsで議論の続きを見る