🏠 ホーム ニュース 📚 トピック解説 🏷️ タグ一覧 ℹ️ About
🔍 記事を検索
カテゴリ
📡 RSSフィード
Follow
X (Twitter) Threads
Quick Links
ニュース一覧 🏷️ タグから探す
🧠 Claude 🤖 Agent 💬 LLM 🔌 MCP 🛠️ Tool
Subscribe
📡 RSSフィード
Breaking News
2026.03.31 21:00 claude security

Claude Codeのソースコード流出、npmソースマップに51万行が丸見えだった件

🔓 ニュース
🔓 AI Heartland News
TL;DR
Anthropic Claude Codeのnpmパッケージにソースマップが含まれ、1,902ファイル・51万行超のTypeScriptソースが公開状態に。未公開プロジェクト「KAIROS」や107個のフィーチャーフラグなど、内部コードの全貌を解説する。

Anthropicが「うっかり」自社ツールの中身を全公開した

Anthropicが提供するAIコーディングツール「Claude Code」の中身が丸見えになった

ハッキングされたわけではない。Anthropicが自分でnpm(JavaScriptのパッケージ管理システム)にコードを公開するとき、「ソースマップ」という本来含めてはいけないファイルを一緒に入れてしまった。いわば設計図を製品と一緒に箱に入れて出荷してしまったようなものだ。

発見したのはセキュリティ研究者のChaofan Shou氏。対象は @anthropic-ai/claude-code v2.1.88で、1,902個のファイル・51万行以上のソースコードが読める状態だった。

発見から数時間でGitHubにアーカイブリポジトリが複数作られ、最大のものは15,000以上のスターと22,000以上のフォークを集めた。もう回収は不可能だ。

原因は「入れちゃいけないファイル」の消し忘れ

ソースマップとは、「圧縮・変換後のコード」と「元のコード」を対応づけるファイルだ。開発中のデバッグには便利だが、本番環境に含めると元のソースコードが丸見えになる。

流出がどのように起きたかを図にすると:

flowchart LR A["📝 TypeScript\nソースコード\n1,902ファイル"] -->|Bunでビルド| B["📦 バンドル済み\nJSファイル"] A -->|自動生成| C["🗺️ ソースマップ\n.mapファイル"] B --> D["📤 npm公開"] C -->|⚠️ 除去忘れ| D D -->|誰でもDL可能| E["👀 全ソース\n丸見え"] style C fill:#ff6b6b,stroke:#cc5555,color:#fff style E fill:#ff6b6b,stroke:#cc5555,color:#fff

npmでパッケージを公開する際は「このファイルだけ入れる」というホワイトリスト方式が推奨されている。しかしAnthropicは「このファイルは入れない」というブラックリスト方式を使っていたため、ソースマップがすり抜けてしまった。

同じ日にAxiosの供給チェーン攻撃も報告されており、npmエコシステムのセキュリティが改めて問われる1日になった。

51万行のコード、中身はこうなっていた

流出したソースコードの分析から、Claude Codeの内部構造が見えてきた。全体像を図にするとこうなる:

graph TD subgraph UI["🖥️ UI層"] A["main.tsx (785KB)\nReact + Ink\nターミナル描画"] end subgraph TOOLS["🔧 ツール層 — 29,000行"] B1["Bash実行"] B2["ファイル操作"] B3["Web検索"] B4["Git / LSP"] B5["エージェント生成"] B6["他35+ツール"] end subgraph ENGINE["⚡ クエリエンジン — 46,000行"] C["全LLM APIコール処理"] end subgraph FLAGS["🚩 フィーチャーフラグ"] D["107個の未公開機能スイッチ\nGrowthBookで管理\ntengu_ プレフィックス"] end A --> TOOLS A --> ENGINE ENGINE --> FLAGS style FLAGS fill:#ff6b6b22,stroke:#ff6b6b

「まだ誰にも見せてない機能」が107個も見つかった

ソフトウェア開発では「フィーチャーフラグ」という仕組みを使って、開発中の機能をコードに入れつつ無効化しておくことがある。スマホアプリで言えば「メニューには出てないけどコードの中には存在する隠し機能」のようなものだ。Claude Codeには107個ものフラグが見つかったとされている。

以下は、流出したコードの分析レポートやXのスレッドで報告された内容だ。Anthropicによる公式確認はなく、分析者の解釈が含まれている点に注意してほしい。

ただし、実際のソースコードには tengu_ プレフィックスのフラグが至るところに埋め込まれている。たとえば:

// src/commands/vim/vim.ts — エディタモード変更時のログ
logEvent('tengu_editor_mode_changed', {
  mode: newMode,
  source: 'command',
});

// src/utils/bash/parser.ts — Tree-sitterパーサーのロード
logEvent('tengu_tree_sitter_load', { success })

// src/hooks/useIdeLogging.ts — IDE連携イベント
logEvent(`tengu_ide_${eventName}`, eventData)

「tengu(天狗)」がアナリティクスイベントの共通プレフィックスとして使われていることが確認できる。

KAIROS — AIが勝手に動き出す?

最も話題になったのが「KAIROS」と呼ばれるプロジェクトだ。

今のClaude Codeは「ユーザーが指示を出す → AIが答える」という対話型。KAIROSはユーザーが何も言わなくてもAIが自律的に動く常駐アシスタントに進化させる計画だとされている。

flowchart LR subgraph NOW["📱 現在のClaude Code"] direction LR U1["👤 ユーザー"] -->|指示を出す| A1["🤖 AI"] A1 -->|答える| U1 end subgraph KAIROS["🚀 KAIROS(未公開)"] direction LR A2["🤖 AI"] -->|自分で判断| A2 A2 -->|通知する| U2["👤 ユーザー"] A2 -->|PR監視| G["📂 GitHub"] A2 -->|ファイル送信| U2 end NOW -.->|進化?| KAIROS style KAIROS fill:#1e293b,stroke:#ff6b6b

報告されたフラグ名から推測される機能:

機能 何ができるようになる?
常駐プロセス化 PCを立ち上げたらバックグラウンドで動き続ける
自律動作 ユーザーの入力を待たずに自分で判断して動く
プッシュ通知 「これやっておきました」とスマホに通知が来る
マルチチャネル ターミナルだけでなく複数の入力経路をサポート
15秒ルール 15秒以上かかる処理は後回しにして邪魔しない

実際のコードでは、KAIROSのフラグがUI制御にまで組み込まれている:

// src/components/Spinner.tsx — KAIROSモード時のUI切り替え
if (
  (feature('KAIROS') || feature('KAIROS_BRIEF')) &&
  (getKairosActive() || getUserMsgOptIn() &&
    (briefEnvEnabled ||
      getFeatureValue_CACHED_MAY_BE_STALE('tengu_kairos_brief', false))
  ) && isBriefOnly && !viewingAgentTaskId
) {
  return <BriefSpinner mode={props.mode} />;
}

feature('KAIROS') でフラグの有効/無効を判定し、有効な場合は専用UIに切り替わる。GrowthBookの tengu_kairos_brief がキルスイッチ(緊急停止用)として機能している点も興味深い。

autoDream — AIが「寝てる間に」記憶を整理する?

「Dream(夢見る)」と名付けられた機能の報告もある。人間が睡眠中に記憶を整理するように、AIがアイドル時に過去のセッションを振り返り、記憶を自動整理するというものだ。

sequenceDiagram participant U as 👤 ユーザー participant CC as 🤖 Claude Code participant M as 🧠 メモリ Note over U,M: 日中:通常の作業 U->>CC: コードのバグを直して CC->>M: セッション記録を保存 U->>CC: テストも書いて CC->>M: セッション記録を保存 Note over U,M: 夜間:autoDreamが発動 rect rgba(100, 100, 255, 0.1) CC->>CC: ① 24時間経過を検知 CC->>M: ② 過去5セッション以上を検索 CC->>M: ③ 重要な情報を統合 CC->>M: ④ 矛盾する古い記憶を修正 CC->>M: ⑤ インデックスを25KB以下に圧縮 end Note over M: 整理された記憶で次のセッションへ

ソースコードにも autoDream の実装が確認できる:

// src/utils/backgroundHousekeeping.ts — autoDreamの初期化
import { initAutoDream } from '../services/autoDream/autoDream.js'

// src/services/autoDream/consolidationLock.ts — 排他ロック
logForDebugging(
  `[autoDream] lock held by live PID ${holderPid} ` +
  `(mtime ${Math.round((Date.now() - mtimeMs) / 1000)}s ago)`
)

// src/services/autoDream/config.ts
// can read the auto-dream enabled state without dragging in
// the forked agent / task registry / message builder chain
// that autoDream.ts pulls in.

consolidationLock でプロセス間の排他制御を行い、複数のClaude Codeインスタンスが同時に記憶整理を始めないようにしている。Claude Codeの自動モードで既にメモリ機能は実装されており、その延長線上にある機能という解釈は自然だ。

Coordinator Mode — AI同士が役割分担する

マルチエージェント(複数のAIが協力して動く)の仕組みも報告されている。

flowchart TD C["🎯 Coordinator\n指揮官"] C -->|調査を依頼| E["🔍 Explore Agent\n調査員\n(読み取り専用)"] C -->|設計を依頼| P["📐 Plan Agent\n設計士\n(読み取り専用)"] C -->|検証を依頼| V["🔨 Verification Agent\n検証官"] V -->|"「壊すのが仕事」\n最初の80%に騙されるな"| R["✅ or ❌\n合否判定"] style V fill:#ff6b6b22,stroke:#ff6b6b

注目されたのはVerification Agentに与えられたとされるプロンプトだ。「あなたの仕事は実装が動くことを確認することではない — 壊すことだ」「最初の80%に騙されるな」と書かれているという。AIが自分自身の「見た目は動いてるからOK」というバイアスを対策している設計思想が読み取れる。

その他に報告されたフラグ

フラグ名 推測される機能 ひとことで言うと
VOICE_MODE 音声入出力 話しかけてコーディング
WEB_BROWSER_TOOL ブラウザ操作を内蔵 AIがWebページを見る
ULTRAPLAN 最大30分の超詳細プランニング クラウドで長考
ULTRATHINK 深い推論モード さらに深く考える
BUDDY たまごっち風コンパニオンペット エイプリルフール?
MCP_SKILLS MCPサーバーからスキル自動発見 プラグイン自動認識
TEAMMEM チーム共有メモリ チーム全員の記憶を共有
FORK_SUBAGENT サブエージェントのプロセス分離 AI分身が独立動作

使う側も気をつけたいリスク

不正リポジトリでの危険な操作

分析レポートでは、Claude Codeを不正なリポジトリで使う場合のリスクも指摘されている。

flowchart LR A["😈 悪意ある\nリポジトリ"] -->|git clone| B["💻 あなたのPC"] B -->|claude -p| C["⚠️ 信頼確認\nスキップ"] B -->|.mcp.json| D["⚠️ 設定ファイルに\n見せかけた\nコマンド実行"] C --> E["🔥 意図しない\nコード実行"] D --> E style E fill:#ff6b6b,stroke:#cc5555,color:#fff

知らないリポジトリで claude -pclaude doctor を安易に実行しないこと。 これはClaude Codeに限らず、あらゆるAIコーディングツールに共通するリスクだ。

皮肉な「アンダーカバーモード」

ソースコードからは、Anthropic社員がパブリックリポジトリで作業する際に、内部情報(モデルコードネーム、未リリースバージョン等)をコミットやPRから自動除去する仕組みの存在も報告されている。

内部情報の流出防止機能を実装していたのに、ソースマップ経由でコード自体が流出した — という皮肉は多くの人が指摘した。

5日で2回の情報流出

これは5日間で2度目の重大な情報流出だ。3月26日にはCMS設定ミスで未リリースモデル「Claude Mythos」の詳細、CEOイベント情報、3,000の未公開アセットが流出していた。

「AIセーフティ企業」を標榜する会社が自社ソフトウェアのセキュリティ管理に連続して失敗した形で、「AIの安全性を語る前に自社の安全性を」という声も上がっている。

同じミスを防ぐための3つの対策

技術的な話に戻ると、今回の事件からnpmパッケージを公開するすべての開発者が学べることがある。

flowchart TD subgraph BEFORE["❌ 今回のAnthropicの方式"] B1["ブラックリスト方式\n.npmignore で\n除外ファイルを指定"] --> B2["新しいファイルタイプ\nが漏れるリスク"] end subgraph AFTER["✅ 推奨される方式"] A1["ホワイトリスト方式\npackage.json の files で\n含めるファイルだけ指定"] --> A2["想定外のファイルは\n絶対に含まれない"] end style BEFORE fill:#ff6b6b15,stroke:#ff6b6b style AFTER fill:#22c55e15,stroke:#22c55e

パブリッシュ前の確認

# パッケージに含まれるファイルを事前確認
npm pack --dry-run

# ソースマップが含まれていないか検索
npm pack --dry-run 2>&1 | grep -i ".map"

ホワイトリスト方式の採用

{
  "files": [
    "dist/",
    "README.md",
    "LICENSE"
  ]
}

「入れないファイルを指定する」のではなく、「入れるファイルだけ指定する」。これだけで今回のような事故の大半は防げる。

CI/CDの検証ステップ

# GitHub Actionsでパブリッシュ前にソースマップを検証
- name: Check for source maps
  run: |
    if npm pack --dry-run 2>&1 | grep -q "\.map"; then
      echo "ERROR: Source maps found in package"
      exit 1
    fi

で、結局どこまで本当なのか

最後に大事な注意点。この記事で紹介した「KAIROS」「autoDream」「107個のフィーチャーフラグ」などの情報は、流出したソースコードの第三者による分析結果に基づいている。

flowchart LR subgraph FACT["✅ 確認済みの事実"] F1["ソースマップが\nnpmに混入"] F2["51万行のコードが\n公開状態に"] F3["Anthropicが\n即座に削除対応"] end subgraph MAYBE["⚠️ 第三者の分析・解釈"] M1["KAIROS計画の\n全体像"] M2["各フラグの\n機能推測"] M3["autoDreamの\n動作詳細"] end style FACT fill:#22c55e15,stroke:#22c55e style MAYBE fill:#eab30815,stroke:#eab308

フィーチャーフラグがコードに存在することと、その機能が実際にリリースされることは別の話だ。廃止された実験的機能やジョークコード(BUDDY のたまごっちなど)が含まれている可能性もある。

Anthropicからの公式声明は出されていない。

信じるか信じないかは、あなた次第だ。

OpenHandsのようなオープンソースAIコーディングツールでは、こうした「流出」の概念自体が存在しない。コードの透明性をどう考えるかという問いも、この事件は投げかけている。

参照ソース

よくある質問
Q. Claude Codeのソースコードはどうやって流出したのか
npmパッケージ@anthropic-ai/claude-code v2.1.88にソースマップファイル(.map)が含まれていた。Bunバンドラーがデフォルトでソースマップを生成する仕様で、設定ミスにより除去されなかった。ハッキングではなくビルド設定の不備。
Q. 流出した規模はどのくらいか
1,902個のTypeScriptファイル、512,000行以上のソースコード。ツール定義だけで29,000行、AIとの通信部分が46,000行。
Q. KAIROSプロジェクトとは何か
ソースコードから発見されたとされる未公開プロジェクト。Claude Codeを常駐AIアシスタントに進化させる計画とされるが、Anthropicからの公式確認はない。
Q. Anthropicの対応は
ソースマップを除去したnpmアップデートを即座にプッシュし、以前のバージョンをレジストリから削除。ただし調査時点で公式声明は出されていない。
Q. 開発者として学ぶべき教訓は
npm pack --dry-runでパブリッシュ前に内容を確認する。.npmignoreのブラックリスト方式よりpackage.jsonのfilesフィールドでホワイトリスト方式を使う。CI/CDにソースマップ検証ステップを追加する。
← Lil Agents:軽量で拡張可能なAIエージェントフレームワーク Anthropic、Claude Codeの全ソースコード(51万行)を誤公開。ビルド設定ミスで →