2026年3月31日、Anthropic の Claude Code でソースコード漏洩インシデントが発生しました。npm レジストリに含まれたソースマップファイル(.map)を通じて、ソースコード全体が公開された形です。
何が起きたのか
セキュリティ研究者の Chaofan Shou 氏が、@anthropic-ai/claude-code パッケージのバージョン 2.1.88 に、本来デバッグ用の 59.8MB のソースマップファイルが含まれていることを発見しました。このソースマップには、Anthropic の Cloudflare R2 ストレージバケット上の zip アーカイブへの参照が含まれていました。そこから完全な TypeScript ソースコードを復元できる状態だったのです。
数時間以内に、約 512,000 行・約 1,900 ファイルの TypeScript コードベースが GitHub にミラーされ、多数の開発者によって分析が行われました。
ソースマップとは
ソースマップ(.map ファイル)は、ミニファイ(コードの圧縮・難読化)やバンドルされた JavaScript を元のソースコードにマッピングするためのファイルです。開発時のデバッグを容易にする目的で生成されますが、プロダクションビルドに含めると、元のソースコード全体が読み取り可能な形で公開されてしまいます。
なぜ漏洩したのか
Claude Code は Bun をランタイムおよびバンドラーとして使用しています。ビルド設定でソースマップ生成が有効化されていました。しかし、.npmignore や package.json の files フィールドで .map ファイルを除外する設定が漏れていたことが原因です。公開された npm パッケージには cli.js.map が含まれ、その sourcesContent フィールドにバンドル対象の全 .ts / .tsx ファイルがそのまま格納されていました。
ソフトウェアエンジニアの Gabriel Anhaia 氏は次のように指摘しています。「.npmignore や package.json の files フィールドの設定ミス一つで、すべてが公開されてしまう」
公開された内容
漏洩したコードベースから以下の情報が明らかになりました。
- 規模: 約 1,900 の TypeScript ファイル、512,000 行以上のコード
- ツールシステム: 約 40 の組み込みツール、権限ゲート付きの機能(29,000 行)
- クエリエンジン: LLM オーケストレーション処理(46,000 行)
- マルチエージェント: 並列タスク処理のためのエージェントスポーン機能(“swarms”)
- IDE ブリッジ: JWT 認証による双方向通信システム
- スラッシュコマンド: 約 50 のコマンド(
/commit,/review-prなど) - フィーチャーフラグ: 未リリース機能を制御する 44 のフラグ
- 技術スタック: Bun ランタイム、React + Ink(ターミナル UI)、Zod v4 バリデーション
Anthropic の対応
Anthropic の広報担当者は次のようにコメントしました。
「本日、Claude Code のリリースに一部の内部ソースコードが含まれていました。これはリリースパッケージングの問題であり、ヒューマンエラーによるものです。セキュリティ侵害ではありません。顧客データや認証情報の漏洩はありません。再発防止策を展開中です。」
なお、2025年初頭にも同様のソースマップの露出があり、その際にパッチが適用されていたと報告されています。
教訓:npm パッケージ公開時のソースマップ対策
このインシデントは Anthropic 固有の問題ではなく、npm パッケージを公開するすべての開発者に当てはまるリスクです。以下に具体的な対策をまとめます。
バンドラー設定でソースマップ生成を無効化する
Bun の Bun.build() ではデフォルトで sourcemap: "none" ですが、開発用に有効化している場合は本番ビルドで明示的に無効化しましょう。
| |
.npmignore でソースマップを除外する
| |
package.json の files フィールドで公開ファイルを明示する
| |
CI/CD パイプラインでの検証
公開前に npm publish --dry-run を実行して、パッケージに含まれるファイル一覧を確認しましょう。
| |
まとめ
ソースマップの混入は、設定ファイルの一行の漏れで起こりうる身近なリスクです。npm パッケージを公開する際は、バンドラー設定・.npmignore・files フィールドの三重チェックで、意図しないファイルの公開を防ぎましょう。