Claude Codeのソースコード全公開とOpenAI Codexのトークン窃取脆弱性が同時期に発覚
2026年3月末、AIコーディングツールのセキュリティに関する2つの大きな話題が重なった。AnthropicのClaude Codeはnpmレジストリ経由でソースコード全体が閲覧可能な状態になっていたことが発覚し、OpenAIのCodexはブランチ名パラメータのコマンドインジェクションでGitHubトークンが窃取可能だった脆弱性が公開された。
Claude Codeのnpmソースマップからの全ソース流出
発見の経緯
3月31日、セキュリティ研究者のChaofan Shou(@Fried_rice)が、npmに公開されていた @anthropic-ai/claude-code バージョン2.1.88に57MBのソースマップファイルが同梱されていることを発見した。
ソースマップはミニファイされたJavaScriptを元のソースコードにマッピングするデバッグ用ファイルで、ブラウザのDevToolsなどで使われる。Claude CodeのビルドツールであるBunのバンドラーはデフォルトでソースマップを生成するため、.npmignore や package.json の files フィールドで明示的に除外しない限りnpmパッケージに含まれてしまう。
流出した規模
| 項目 | 数値 |
|---|---|
| TypeScriptファイル数 | 約2,300 |
| コード行数 | 512,000行超 |
| ソースマップサイズ | 57MB |
| 組み込みツール数 | 約40 |
| スラッシュコマンド数 | 約50 |
流出したのはCLIクライアント側のコードであり、モデルの重み、学習データ、サーバーサイドのAPIシステムは含まれていない。
内部アーキテクチャ
ソースマップからClaude Codeの内部構成が詳細に判明した。
| モジュール | 規模 | 内容 |
|---|---|---|
| クエリエンジン | 約46,000行 | LLM APIの呼び出し、ストリーミング、キャッシング、オーケストレーション |
| ツールシステム | 約29,000行 | ファイル操作、Bash実行、Web取得、LSP連携など約40のパーミッションゲート付きツール |
| マルチエージェント | — | 「Swarms」と呼ばれる並列タスク実行機構。隔離されたコンテキストで複数のエージェントを同時に動かす |
| IDEブリッジ | — | VS CodeやJetBrains拡張とJWT認証で双方向通信 |
| 永続メモリ | — | セッション間でコンテキストをファイルベースで保持 |
ランタイムはNode.jsではなくBunを使用し、ターミナルUIはReact + Inkでコンポーネントベースのレンダリング、バリデーションはZod v4で統一されている。
未公開機能とフィーチャーフラグ
44個のフィーチャーフラグが見つかり、ビルド済みだが出荷されていない機能の存在が明らかになった。
注目を集めたのはBUDDYだ。たまごっち風のAIペット機能で、入力ボックスの横に吹き出しで表示される。種族やレアリティ階層、キャラクターのステータスシステム、帽子の着せ替え、アニメーションシーケンスまで実装されており、隠しコマンド /buddy でアクセスできる。
未公開モデル「Capybara」
コードベースから未発表のモデルファミリーへの参照も見つかった。
capybaracapybara-fastcapybara-fast[1m]
Anthropicが公式にアナウンスしていないモデル名だ。
テレメトリとユーザー行動追跡
ユーザーの行動を詳細に記録するテレメトリ機能も判明した。ユーザーが不満を表明したかどうかを検出するフラストレーション指標(プロファニティ検出)や、「continue」プロンプトの繰り返し回数など使用パターンのログが含まれていた。
Anthropicの対応
Anthropicはnpmから該当バージョンを取り下げたが、本稿執筆時点で公式声明は出していない。なお、これは初めてではない。2025年初頭にも同様のソースマップ流出が起きている。
OpenAI Codexのブランチ名コマンドインジェクション
脆弱性の概要
BeyondTrustのPhantom Labs部門が、OpenAI Codexにコマンドインジェクション脆弱性を発見した。タスク作成APIのHTTPリクエストで、GitHubのブランチ名パラメータに対する入力サニタイズが不十分だった。
攻撃の流れ
graph TD
A["攻撃者がブランチ名に<br/>悪意あるコマンドを埋め込む"] --> B["Codex APIにタスク作成<br/>リクエスト送信"]
B --> C["Codexがブランチ名を<br/>シェルコマンドに渡す"]
C --> D["入力サニタイズなし<br/>コマンドが実行される"]
D --> E["コンテナ内のauth.jsonから<br/>GitHubトークンを読み取り"]
E --> F["トークンをタスク出力<br/>または外部サーバーに送信"]
F --> G["被害者のリポジトリに<br/>読み書きアクセス"]
攻撃者はUnicodeの表意空間(Ideographic Space)を使ってブランチ名にコマンドを注入する。この文字は見た目は通常のスペースと同じだが、シェルに渡されるとコマンド区切りとして機能する。Codexのコンテナ内に保存されている auth.json からGitHub OAuthアクセストークンを平文で抽出できた。
影響範囲
ChatGPTのWebインターフェース、Codex CLI、Codex SDK、IDE拡張の全コンポーネントが影響を受けた。窃取されたトークンは被害者のプライベートリポジトリへの読み書きアクセス権を持つため、サプライチェーン攻撃の起点になり得る。
対応タイムライン
| 日付 | イベント |
|---|---|
| 2025-12-16 | BeyondTrust Phantom Labsが脆弱性を報告 |
| 2025-12-23 | OpenAIが初回ホットフィックスを適用(7日後) |
| 2026-01-30 | シェルコマンド保護の強化パッチ |
| 2026-02-05 | Critical Priority 1に指定、修正完了 |
報告から初回対応まで7日、完全修正まで約7週間。悪用された形跡は確認されていない。
GPT-5.4のCodexリポジトリからの漏洩
Codexの脆弱性とは別に、OpenAIの公開GitHubリポジトリ(openai/codex)からも情報が漏れている。
2月27日のPR #13050でフル解像度ビジョンサポートが追加された際、モデルの最小バージョンが (5, 4) と記述されていた。3月2日のPR #13212では /fast スラッシュコマンドと ServiceTier enumが追加され、ここにもGPT-5.4への参照があった。
OpenAIは5時間の間に7回のforce pushでバージョン番号を書き換え、従業員がモデルセレクタのドロップダウンにGPT-5.4が表示されているスクリーンショットを投稿した件も削除した。公式声明は出ていない。
Claude Codeは .npmignore にソースマップを追加するだけで防げた話だし、Codexはブランチ名のサニタイズという基本中の基本が抜けていた。どちらも高度な攻撃ではなく、ビルドパイプラインの設定ミスと入力バリデーションの欠如だ。