SAP npm パッケージの汚染:依存関係インストール時にサイレント実行される悪意

Compromised SAP npm Packages Found Harvesting Developer and CI/CD Secrets

2026/04/30 gbhackers — SAP 開発者エコシステムを標的とする深刻なサプライチェーン攻撃を、セキュリティ研究者たちが特定した。TeamPCP と識別される脅威グループは、“Mini Shai Hulud” と名付けられた新たなキャンペーンにおいて、複数の正規 SAP npm パッケージを侵害した。この攻撃は、依存関係インストール時にサイレントに実行される、悪意のプレインストール・スクリプトの注入から始まる。

マルチステージ・ペイロードを活用する攻撃者は、開発者の認証情報および CI/CD シークレットを積極的に収集し、その他のリポジトリへと感染を拡大させる高度な伝播技術を用いている。

感染メカニズムと認証情報窃取

この攻撃者は、@cap-js/sqlite/@cap-js/postgres/@cap-js/db-service/mbt などの、広く使用される SAP パッケージの悪意のバージョンを作成した。

Compromised users by hours, UTC timezone (Source: WIZ)
Compromised users by hours, UTC timezone (Source: WIZ)

開発者が通常の npm インストール・コマンドを実行する際に、”setup.mjs” というドロッパー・ファイルを自動的に起動するプレインストール・スクリプトが、これらのライブラリには組み込まれている。

このドロッパーは通常の実行フローを回避し、Bun JavaScript ランタイムをダウンロードした後に、”execution.js” と呼ばれる大規模かつ高度に難読化されたペイロードを起動してから、パッケージ・インストールを完了する。

こうして実行されたマルウェアは、包括的な認証情報窃取ツールとして機能する。開発者の環境および CI/CD パイプラインを標的とし、GitHub トークン/npm 認証情報/Kubernetes アクセストークンに加えて、AWS/Azure/Google Cloud Platform のクラウド・シークレットを収集する。

さらに脅威アクターは、高度なメモリ抽出技術を用いてランナー環境から直接シークレットを抽出する。

興味深い点として挙げられるのは、このマルウェアがロシア語設定のシステムに対する初期チェックを実行する点である。システム・ロケールまたは環境変数がロシア語識別子で開始される場合にはジオフェンシングが機能し、ペイロードは即座に終了し、データ収集は回避される。

WIZ の報告によると、窃取された情報は RSA 公開鍵で暗号化され、GraphQL API を介して攻撃者が管理する公開 GitHub リポジトリへ送信される。

ブラウザ標的化と GitHub 汚染

このキャンペーンが示すのは、TeamPCP における戦術の顕著な進化である。今回のマルウェアに初めて組み込まれたものとして、Chrome/Safari/Edge/Brave といった主要 Web ブラウザからパスワードを直接窃取する機能がある。

主要な認証情報収集において、パーソナル・アクセス・トークンが取得できない場合のマルウェアは、ローカル GitHub リポジトリを汚染するフォールバック伝播ルーチンを開始する。それにより攻撃者は、最新の開発ツール向けに最適化された隠しコンフィグ・ファイルを配置する。

Claude Code ユーザーに対しては、新規セッションごとにドロッパーを実行する特定のフック・コンフィグを作成する。Visual Studio Code ユーザーに対しては、プロジェクトフォルダを開いた際に即座にペイロードを実行する、カスタマイズされたタスク・コンフィグを設定する。

セキュリティ・チームに対して強く推奨されるのは、アーティファクトストア/ロックファイル/CI ログを直ちに検索して、影響を受けるパッケージ・バージョンおよび関連する悪意のファイルを確認することだ。

それにより、不正なコミットや異常なリポジトリ・アクティビティについて GitHub 活動を継続的に監視し、すべての漏洩した可能性のある GitHub トークン/クラウド認証情報/CI/CD シークレットをローテーションする必要がある。

侵害指標
File TypePackageSHA-256 Hash
setup.mjsAll 4 Packages4066781fa830224c8bbcc3aa005a396657f9c8f9016f9a64ad44a9d7f5f45e34
execution.js@cap-js/postgreseb6eb4154b03ec73218727dc643d26f4e14dfda2438112926bb5daf37ae8bcdb
execution.js@cap-js/db-serviceeb6eb4154b03ec73218727dc643d26f4e14dfda2438112926bb5daf37ae8bcdb
execution.js@cap-js/sqlite6f933d00b7d05678eb43c90963a80b8947c4ae6830182f89df31da9f568fea95
execution.jsmbt80a3d2877813968ef847ae73b5eeeb70b9435254e74d7f07d8cf4057f0a710ac