悪意ある Next.js リポジトリが VS Code 経由で開発者を標的に
概要
Microsoft Defender Experts は、悪意ある Next.js リポジトリを使ったキャンペーンを確認しました。これらはしばしば採用選考の持ち帰り課題を装い、通常の VS Code 操作やアプリ起動フローを通じて開発者を侵害します。リポジトリはフォルダーを開いた時やプロジェクト実行時に攻撃者管理の JavaScript を自動実行し、ソースコード、環境変数、クラウド資格情報を漏えいさせる可能性があり、サプライチェーンと開発者端末のセキュリティに対する重大な脅威となります。
はじめに: なぜ重要なのか
開発者のワークステーションやビルド環境は、ソースコード、署名資材、そして環境変数内のシークレット(API トークン、クラウド資格情報)を保持していることが多く、価値の高い標的です。Microsoft Defender Experts は、悪意ある Next.js リポジトリをばらまくキャンペーンを報告しています。これらはしばしば採用関連の「持ち帰り」課題として偽装され、通常の開発者ワークフローに紛れ込み、確実にコード実行を引き起こすよう設計されています。
新たな情報 / 主な調査結果
Microsoft は、共通の命名規則と再利用されたローダーロジックを持つ複数の関連リポジトリを確認しました。初期の誘導手口はさまざまですが、最終的な挙動は共通しています。すなわち、攻撃者が管理する JavaScript を実行時に取得してメモリ上で実行し、その後段階的な C2 へ移行します。
1) フォルダーを開いた際の VS Code ワークスペース実行
一部のリポジトリには、runOn: "folderOpen" が設定された .vscode/tasks.json が含まれています。開発者がそのプロジェクトを開いて(かつ信頼すると)、タスクが自動的に実行され、JavaScript ローダーを取得して実行する Node スクリプトが起動します(観測された配信先には Vercel が含まれます)。
2) アプリ実行時のビルド段階での実行
別の亜種では、開発者がプロジェクトを起動したとき(たとえば npm run dev)に実行されます。これらのリポジトリは、一見正常なアセット(例: 改ざんされた jquery.min.js)に悪意あるロジックを埋め込んでいます。このアセットは base64 の URL をデコードし、ローダーを取得し(こちらも配信元として Vercel が頻出)、それをメモリ上で実行します。
3) env の流出と動的 RCE を伴うバックエンド起動時の実行
3 つ目の経路は、サーバー初期化またはモジュール import 時に有効化されます。リポジトリには AUTH_API=<base64> のような .env 値が含まれている場合があります。起動時、バックエンドコードはそのエンドポイントをデコードし、process.env を攻撃者に送信した後、動的コンパイルを使って返された JavaScript を実行します(例: new Function("require", response.data)(require))。これにより機密性の高い設定が漏えいする可能性があり、攻撃者主導で追加ペイロードを配信できるようになります。
Stage 1 の登録 → 段階的な command-and-control
いずれの経路でも、実行は最初の「registrar」ステージに収束します。この段階ではホストのプロファイリングを行い、登録エンドポイントをポーリングして、その後のアクティビティを関連付けるための instanceId を受け取ります。テレメトリでは、初期ステージング後も攻撃者管理インフラへの継続的なコールバック(port 300 への HTTP 通信を含む)が確認されています。
IT 管理者とセキュリティ チームへの影響
- 開発者エンドポイントでのリスク上昇: ワークスペース タスクが信頼されると、リポジトリを開くだけでコードが実行される可能性があります。
- 資格情報の露出: バックエンド起動経路では、環境変数(クラウドキー、データベース資格情報、CI トークン)が流出する可能性があります。
- 検知が困難: メモリ上での実行と段階的ローダーにより、ディスク上に明確な痕跡が残りにくくなります。
対応項目 / 次のステップ
- 開発者向けガイダンス: 持ち帰り課題や見覚えのないリポジトリは信頼しないこと。確認が終わるまで VS Code で「Trust」をクリックしないようにします。
- リポジトリの点検:
.vscode/tasks.json(特にrunOn: "folderOpen")、.vscode/配下の不審な Node スクリプト、既知の正常ハッシュと一致しない minified ライブラリを重点的に確認します。 - シークレット衛生管理:
.env内の長期有効なシークレットへの依存を減らし、可能な場合は managed identities や短命トークンを使用し、露出した可能性のある資格情報はローテーションします。 - 検知と制御: Node.js プロセスによる異常な外向き接続(例: 開発ツールからステージング ドメインへの通信後に未知の C2 へ接続)を監視し、開発者端末やビルド エージェントからの外向き通信制限も検討します。
- ハンティング: Microsoft が示した命名「ファミリー」や構造的な再利用パターン(ほぼ重複したリポジトリ、類似ローダー、繰り返し使われるステージング エンドポイント)を基に、コードホスティング環境や社内ミラーを検索します。
Microsoftテクノロジーの最新情報を入手