武器化されたパッケージという脅威
ソフトウェア開発者を狙う攻撃は、もはや大規模な企業プラットフォームへの侵害を必要としません。巧みに偽装された1つのパッケージだけで、同等の壊滅的な被害をもたらすことができます。npmレジストリで最近発生したインシデントは、こうした現代的なセキュリティリスクを端的に示しています。悪意のあるコードは、稼働中の開発環境へ瞬く間に侵入できます。こうした環境には通常、クラウドインフラ、ソースリポジトリ、自動ビルドパイプラインへの重要なアクセストークンが保管されています。
悪意あるパッケージ公開の経緯
Microsoftは最近、オープンソースエコシステムに対する重大な悪用事例を報告しました。わずか4時間という短い時間帯に、1人のnpmコントリビューターが悪意のあるパッケージを14個公開したのです。これらのパッケージは、OpenSearch、Elasticsearch、そして複雑なDevOps構成向けの人気ライブラリを意図的に模倣していました。この攻撃には、「vpmdhaj」という偽名を使った新規メンテナーアカウントが利用されています。
標的となった認証情報
Microsoftによると、攻撃者はAWSおよびElastic Cloudへの機密アクセス認証情報が保管されることの多い、エンジニアの管理者用ワークステーションを重点的に狙っていました。また、不正なパッケージは@opensearchおよび@elastic名前空間内の正規ライブラリを巧みに偽装していました。この一連のキャンペーンが最終的に狙っていたのは、Amazon Web Services、HashiCorp Vault、GitHub Actions、そしてnpmレジストリ自体からのシークレット情報の窃取です。
対応策と緩和策のガイドライン
悪意のあるパッケージ14件はすでに公開リポジトリから削除されています。Microsoftは防御担当者への注意喚起として、問題のあるパッケージ名の一覧を公開しました。同社は、2026年5月28日以降にこれらのパッケージを含むビルドにさらされた可能性のあるシステムを監査するよう強く推奨しています。セキュリティチームは、侵害された可能性のあるAWS IAMトークン、HashiCorp Vaultシークレット、GitHubデプロイキーを直ちにローテーションすることが求められます。
欺瞞技術とメタスクワッティング
攻撃者は、開発者を騙すために2種類の異なる欺瞞手法を駆使しました。1つ目は、正規ライブラリに酷似したタイポスクワッティングです。2つ目は、OpenSearchやElasticsearchの公式補助ツールを装ったバイナリの偽装です。具体的には、opensearch-setup-toolやelastic-opensearch-helperといった偽パッケージが含まれていました。
プロジェクトの成熟度の偽装
さらに攻撃者は、信頼性を高めるために内部メタデータも巧みに操作していました。具体的には、ローカルのpackage.jsonファイル内に、本物のopensearch-jsのGitHubリポジトリへの直接リンクを埋め込んでいました。また、バージョン番号を1.0.7265のような高い値に意図的に引き上げることで、長い歴史を持つ信頼性の高いプロジェクトであるかのような印象を作り出していました。
実行ロジックと多段階ペイロード
インストールが完了すると、悪意のあるパッケージはネイティブのプレインストールフックを通じて自動的に実行されます。まず第1段階のダウンローダーが、ホスト名、OSアーキテクチャ、Node.jsのバージョン、アクティブな作業ディレクトリなど、ホスト環境の詳細な情報を収集します。その後、収集したメタデータがリモートのC2(コマンド&コントロール)サーバーへ送信されます。サーバーはこれに応じて、payload.binと呼ばれる第2段階のバイナリを展開します。
持続的な実行
Microsoftによると、メインのindex.jsファイルは、モジュールが呼び出されるたびにpayload.binを再実行していました。これによりマルウェアは複数のコンパイルサイクルを経ても持続的に実行され続け、開発環境に密かに居座り続けることが可能になっていました。
ステルス性の進化
ダウンローダーのより高度なバリアントは、さらに巧妙な隠密性を備えていました。まずスクリプトはホストシステムを調査し、Bunランタイムの有無を確認します。Bunが存在しない場合は、本物のBun v1.3.13環境をひそかにダウンロードします。そして最終的に、AWSやHashiCorp Vault、各種CI/CD環境から機密情報を抜き取るためのコアペイロードを実行します。
翻訳元: https://meterpreter.org/malicious-npm-packages/