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

Claude Codeセキュリティ事件を切り分ける:ソース漏洩とaxios攻撃の違いと対処法

🔍
// なぜ使えるか
SNSで混同されている2つのインシデントを、感染チェックコマンドとコード例付きで正確に切り分け、今すぐ何をすべきか示す。

同じ日・同じレジストリ、でも全く別の問題

3月31日、Claude Codeに関連して2つのセキュリティインシデントが報告された。SNSでは「Claude Codeがハッキングされた」と混同されて拡散したが、原因・影響・対応策は全く異なる

flowchart TB subgraph E1["事件① ソースマップ混入"] direction TB A1["📝 ビルド設定ミス"] --> B1["🗺️ .mapファイルが\nnpmに混入"] B1 --> C1["👀 51万行のソース\nが閲覧可能に"] C1 --> D1["⚠️ 攻撃研究コスト低下\n(即時被害なし)"] end subgraph E2["事件② axiosサプライチェーン攻撃"] direction TB A2["🔓 メンテナアカウント\n乗っ取り"] --> B2["💀 RAT入りaxios\nをnpmに公開"] B2 --> C2["📦 npm install で\nマルウェア実行"] C2 --> D2["🔥 機密情報窃取\n(実害の可能性)"] end style D1 fill:#eab30822,stroke:#eab308 style D2 fill:#ff6b6b22,stroke:#ff6b6b
  事件① ソースマップ漏洩 事件② axiosマルウェア
原因 Anthropicのビルド設定ミス axiosメンテナのアカウント乗っ取り
影響範囲 Claude Codeの開発コードが閲覧可能 npm installした全プロジェクト
緊急度 中(直接被害なし) 高(RAT感染の可能性)
対応 Anthropic側で対応済み ユーザー自身で感染チェックが必要
Claude Code固有か Yes(Anthropicのパッケージ) No(axios依存の全パッケージが対象)

事件①:ソースマップが「設計図ごと出荷」してしまった

Claude Code v2.1.88のnpmパッケージに、Source Mapファイル(.map)が誤って同梱された。

Source Mapとは、圧縮・難読化されたコードと元のソースコードの「対応表」だ。開発時のデバッグには便利だが、本番に含めると元のコードが丸見えになる。

■ リーク前のnpmパッケージ(12MB単一ファイル)
var X6=function(K8){return K8.split("").reverse().join("")};
var Q3=X6("edoCresu")+"."+K8("noitcennoc");
→ 変数名が無意味な記号。解読には専用ツールと膨大な労力が必要

■ ソースマップ適用後(元のTypeScript)
const reverseString = (input: string): string => {
  return input.split("").reverse().join("");
};
const endpoint = reverseString("userCode") + "." + "connection";
→ 変数名・コメント・構造がすべて復元。1,900ファイル・51万行が読める状態
flowchart LR A["📝 TypeScript\n1,902ファイル\n512,000行"] -->|Bunでビルド| B["📦 minified JS\n12MB・1ファイル"] A -->|Bun自動生成| C["🗺️ .mapファイル"] B --> D["📤 npm publish"] C -->|".npmignoreで\n除外し忘れ"| D D --> E["👀 誰でも\nnpm installで取得"] style C fill:#ff6b6b,stroke:#cc5555,color:#fff

なぜ起きたのか:ブラックリスト vs ホワイトリスト

Anthropicは .npmignore(ブラックリスト方式)でパッケージから除外するファイルを管理していた。Bunバンドラーがデフォルトで .map を生成する仕様と噛み合わず、漏れた。

// ❌ ブラックリスト方式(Anthropicが使っていた方法)
// .npmignore に書かれていないファイルタイプは全部入る
// → 新しいファイルタイプ(.map等)が漏れるリスク

// ✅ ホワイトリスト方式(推奨)
// package.json
{
  "files": [
    "dist/index.js",    // ← これだけ入る
    "README.md",
    "LICENSE"
  ]
  // ↑ ここに書いていないファイルは絶対に含まれない
}

漏洩の影響:攻撃者の「研究コスト」が下がった

漏洩したのはCLIツールの開発コードのみ。AIモデル本体やユーザーデータは含まれていない。

ただし、セキュリティモデル・権限制御の実装・内部API構造・107個のフィーチャーフラグが可視化されたことで、攻撃者が脆弱性を探すコストは劇的に低下した。詳細はClaude Codeソースコード流出の全貌で解説している。

事件②:axiosサプライチェーン攻撃 — こちらが本当に危険

週1億ダウンロードのHTTPライブラリ「axios」のメンテナアカウントが乗っ取られ、RAT(Remote Access Trojan)入りの偽バージョンがnpmに公開された。

sequenceDiagram participant 攻撃者 participant npm participant 開発者PC Note over 攻撃者: 18時間前から準備 攻撃者->>npm: ① plain-crypto-js(偽ライブラリ)を登録 攻撃者->>npm: ② axiosメンテナのアカウント乗っ取り 攻撃者->>npm: ③ RAT入りaxios v1.14.1 / v0.30.4 を公開 Note over npm: 汚染期間: 3/31 09:21〜12:29(JST) 開発者PC->>npm: npm install(通常の依存解決) npm-->>開発者PC: axios v1.14.1 + plain-crypto-js Note over 開発者PC: postinstallスクリプトで自動実行 開発者PC->>開発者PC: ④ OS判定 → RAT設置 開発者PC->>開発者PC: ⑤ マルウェア自己削除(痕跡消去) 開発者PC->>攻撃者: ⑥ 機密情報を外部送信

このマルウェアの特徴

plain-crypto-js/
├── package.json          # postinstall でスクリプト自動実行
└── scripts/
    ├── install.js        # OS判定 + RAT配置
    ├── macos_payload     # → /Library/Caches/com.apple.act.mond
    ├── windows_payload   # → %PROGRAMDATA%\wt.exe
    └── linux_payload     # → /tmp/ld.py

事件①の対応:ソースマップ漏洩はユーザー側の対応不要

ソースマップ漏洩はAnthropic側のビルド設定ミスであり、ユーザー環境への直接的な被害はない。Anthropicはソースマップを除去したアップデートを即座にプッシュし、以前のバージョンをレジストリから削除済み。

ユーザー側で必要な対応はない。ただし、Claude Codeのセキュリティモデルや内部実装が公開されたことで、今後新たな脆弱性が発見される可能性はある。通常通りアップデートを適用しておけば問題ない。

# Claude Codeを最新版に更新(念のため)
claude update

事件②の対応:axiosマルウェアの感染チェック手順

こちらはユーザー自身での確認が必要。axiosに依存するnpmパッケージすべてが対象で、Claude Code固有の問題ではない。

Step 1:axiosのバージョンを確認する

# npm の場合
npm list axios
# pnpm の場合
pnpm list axios
# yarn の場合
yarn list --pattern axios

# → [email protected] または [email protected] が出たら汚染バージョン
# → [email protected][email protected] 以前なら安全

Step 2:マルウェア本体の存在確認

# plain-crypto-js(RAT本体)が存在するか
ls node_modules/plain-crypto-js 2>/dev/null \
  && echo "🔴 感染の可能性あり" || echo "✅ 見つからない"

# 複数プロジェクトを一括チェック
find ~/projects -name "package-lock.json" -exec grep -l "plain-crypto-js" {} \;
flowchart TD A["axiosを使っている?"] -->|No| B["✅ 影響なし"] A -->|Yes| C{"3/31 09:21〜12:29 JST に\nnpm install した?"} C -->|No| D["✅ 汚染期間外\n念のためStep 2も推奨"] C -->|"Yes / 不明"| E["Step 2: バージョン確認"] E --> F{"v1.14.1 or v0.30.4\nが見つかった?"} F -->|No| G["✅ 汚染バージョンなし"] F -->|Yes| H["🔴 Step 3: RAT痕跡確認"] style B fill:#22c55e22,stroke:#22c55e style D fill:#22c55e22,stroke:#22c55e style G fill:#22c55e22,stroke:#22c55e style H fill:#ff6b6b22,stroke:#ff6b6b

Step 3:RAT痕跡の確認

# macOS
ls -la /Library/Caches/com.apple.act.mond 2>/dev/null \
  && echo "🔴 RAT検出" || echo "✅ 見つからない"

# Windows(PowerShell)
# Test-Path "$env:PROGRAMDATA\wt.exe"

# Linux
ls -la /tmp/ld.py 2>/dev/null \
  && echo "🔴 RAT検出" || echo "✅ 見つからない"

Step 4:感染確定時の対応

# 1. マルウェアの除去
rm -f /Library/Caches/com.apple.act.mond        # macOS
rm -rf node_modules/plain-crypto-js

# 2. クリーンインストール
rm -rf node_modules package-lock.json
npm install

# 3. 認証情報のローテーション(最重要)
# RATがアクセスした可能性があるもの全て:
ローテーション対象 確認場所 操作
APIキー .env, 環境変数 各サービスのダッシュボードで再発行
SSHキー ~/.ssh/ ssh-keygen で新規作成 → GitHubに登録し直し
AWSクレデンシャル ~/.aws/credentials IAMコンソールでキーローテーション
CI/CDシークレット GitHub Actions, etc. リポジトリ設定から再設定
npmトークン ~/.npmrc npm token revokenpm login

注意:これはClaude Code固有の問題ではない

axiosの汚染はnpmエコシステム全体に影響するサプライチェーン攻撃だ。Claude Codeに限らず、axiosを依存関係に持つすべてのNode.jsプロジェクトが確認対象になる。自分のプロジェクトの package-lock.json をチェックしよう。

再発を防ぐ:npmパッケージ公開の3つのガード

今回の事件①(ソースマップ漏洩)を他人事にしないために。npmパッケージを公開するなら、この3つを入れておく。

ガード1:パブリッシュ前の中身確認

# パッケージに何が含まれるか事前確認
npm pack --dry-run

# ソースマップが混入していないかチェック
npm pack --dry-run 2>&1 | grep -i "\.map"
# → 何も出なければOK。出たら除外が必要

ガード2:package.jsonでホワイトリスト管理

{
  "name": "my-package",
  "files": [
    "dist/",
    "README.md",
    "LICENSE"
  ]
}

.npmignore のブラックリスト方式は「書き忘れ」が起きる。files フィールドなら「書いたものだけ入る」。

ガード3:CIにソースマップ検証を追加

# .github/workflows/publish.yml
- name: ソースマップ混入チェック
  run: |
    if npm pack --dry-run 2>&1 | grep -q "\.map"; then
      echo "::error::ソースマップがパッケージに含まれています"
      exit 1
    fi

- name: パッケージサイズ異常検知
  run: |
    SIZE=$(npm pack --dry-run 2>&1 | tail -1 | awk '{print $NF}')
    echo "パッケージサイズ: $SIZE"
    # ソースマップ混入時はサイズが異常に大きくなる

教訓:パニックではなく切り分けが大事

flowchart LR subgraph WRONG["❌ SNSで起きたこと"] W1["2つの事件が混同"] --> W2["Claude Codeが\nハッキングされた!"] W2 --> W3["Codexに移行すべき!"] end subgraph RIGHT["✅ 正しい対応"] R1["事件を切り分ける"] --> R2["自分の影響範囲を\n特定する"] R2 --> R3["該当するなら\n感染チェック+対処"] end style WRONG fill:#ff6b6b11,stroke:#ff6b6b style RIGHT fill:#22c55e11,stroke:#22c55e

パニックではなく、事実の切り分けと段階的な対応。それが、この手のインシデントを乗り切る最善策だ。

参考リンク

よくある質問
Source Mapの漏洩で、ユーザーデータは流出したのか?
いいえ。漏洩したのはClaude CodeのCLIツール開発ソースコード(1,900ファイル)のみ。AIモデル本体やユーザーデータは含まれていない。
ネイティブ版(curl版)を使ってれば、axiosマルウェアの影響はないのか?
影響がないと考えられる。ネイティブ版はAnthropicのCDNからビルド済みバイナリを直接ダウンロードするため、npmの依存解決を経由しない。ただしAnthropicからの公式声明は未確認。
axiosのマルウェア汚染期間は日本時間でいつか?
3月31日の日本時間09:21~12:29(UTC 00:21~03:29)。この時間帯にnpm installを実行した環境が対象。
plain-crypto-jsフォルダが見つかったら、どう対処すべきか?
クリーンインストールを前提に対応。見つかった場合、APIキー・SSHキー・クラウド認証情報・CI/CDシークレット・.envの値をすべてローテーション必須。RATが機密情報にアクセスしている可能性がある。
Claude Code本体に脆弱性があるのか?
いいえ。axiosは外部ライブラリで、Claude Code固有の問題ではない。axiosに依存するすべてのnpmパッケージが対象。
広告
🔌
MCP対応ツール特集
Claude Codeと連携できるMCPサーバーの日本語解説まとめ
X 🧵 Threads Facebook LINE B! はてブ
🔔 AI速報、毎日Xで配信中
Claude Code・MCP・AIエージェントの最新ニュースをいち早くお届け
@peaks2314 をフォロー
Next Read →
🔗 Google Colab×MCPで実現するAI開発環境の統合。Model Context Protocol対応
関連記事
🔓 Claude Codeのソースコード流出、npmソースマップに51万行が丸見えだった件
Anthropic Claude Codeのnpmパッケージにソースマップが含まれ、1,902ファイル・51万行超のTypeScriptソースが公開状態に。未公開プロジェクト「KAIROS」や107個のフィーチャーフラグなど、内部コードの全貌を解説する。
2026.03.31
← OpenCode:13万超のスターを集めたAIコード生成・検証フレームワーク Google Colab×MCPで実現するAI開発環境の統合。Model Context Protocol対応 →