Strapi CMSを標的とした悪意のあるnpmパッケージ、バックドア設置と認証情報窃取を確認
サイバーセキュリティ研究者らが、npmレジストリ内でStrapi CMSプラグインを装った36個の悪意のあるパッケージを発見しました。これらのパッケージには、RedisおよびPostgreSQLデータベースを悪用し、リバースシェルを展開し、認証情報を窃取し、永続的なインプラントを確立するために設計された悪意のあるペイロードが含まれています。

**SafeDep**は、「各パッケージには3つのファイル(package.json、index.js、postinstall.js)が含まれており、説明、リポジトリ、またはホームページがなく、バージョン3.6.8を使用して成熟したStrapi v3コミュニティプラグインのように見せかけています。」と報告しています。
### 正規プラグインを装う
悪意のあるパッケージは、「strapi-plugin-」で始まり、それに「cron」、「database」、「server」などの用語が続く命名規則に従っています。これは開発者を騙してダウンロードさせることを意図しています。公式のStrapiプラグインは「@strapi/」の下にスコープされていることに注意することが重要です。
これらのパッケージは、「umarbek1233」、「kekylf12」、「tikeqemif26」、「umar_bektembiev1」という4つのソックパペットアカウントによって13時間かけてアップロードされました。特定されたパッケージには以下が含まれます。
* strapi-plugin-cron
* strapi-plugin-config
* strapi-plugin-server
* strapi-plugin-database
* strapi-plugin-core
* strapi-plugin-hooks
* strapi-plugin-monitor
* strapi-plugin-events
* strapi-plugin-logger
* strapi-plugin-health
* strapi-plugin-sync
* strapi-plugin-seed
* strapi-plugin-locale
* strapi-plugin-form
* strapi-plugin-notify
* strapi-plugin-api
* strapi-plugin-sitemap-gen
* strapi-plugin-nordica-tools
* strapi-plugin-nordica-sync
* strapi-plugin-nordica-cms
* strapi-plugin-nordica-api
* strapi-plugin-nordica-recon
* strapi-plugin-nordica-stage
* strapi-plugin-nordica-vhost
* strapi-plugin-nordica-deep
* strapi-plugin-nordica-lite
* strapi-plugin-nordica
* strapi-plugin-finseven
* strapi-plugin-hextest
* strapi-plugin-cms-tools
* strapi-plugin-content-sync
* strapi-plugin-debug-tools
* strapi-plugin-health-check
* strapi-plugin-guardarian-ext
* strapi-plugin-advanced-uuid
* strapi-plugin-blurhash
### 悪意のあるコード実行
悪意のあるコードは`postinstall`スクリプトフック内に埋め込まれています。このスクリプトは、「npm install」プロセス中にユーザーの操作なしに自動的に実行されます。インストールユーザーの権限で実行され、CI/CD環境やDockerコンテナでrootアクセスを悪用する可能性があります。
### ペイロードの進化
ペイロードはキャンペーン中に進化しました。
1. **Redisの悪用:** リモートコード実行のためにローカルでアクセス可能なRedisインスタンスを武器化し、crontabエントリを挿入します。これにより、リモートサーバーからシェルスクリプトがダウンロードおよび実行され、Strapiの公開アップロードディレクトリにSSH経由でPHPウェブシェルとNode.jsリバースシェルが書き込まれます。また、Elasticsearchや仮想通貨ウォレットのシードフレーズなどの秘密情報をディスクからスキャンし、Guardarian APIモジュールを外部に送信しようとします。
2. **Dockerエスケープとリバースシェル:** Redisの悪用とDockerコンテナのエスケープを組み合わせて、ホストにシェルペイロードを書き込みます。Pythonリバースシェルを直接起動し、Redis経由でアプリケーションのnode_modulesディレクトリにリバースシェルトリガーを書き込みます。
3. **リバースシェルの展開:** リバースシェルを展開し、Redis経由でシェルダウンローダーを書き込みます。
4. **認証情報の窃取:** 環境変数とPostgreSQLデータベース接続文字列をシステムからスキャンします。
5. **偵察の拡大:** 環境ダンプ、Strapi設定、Redisデータベースの抽出、ネットワークトポロジーのマッピング、Docker/Kubernetesの秘密情報、暗号化キー、仮想通貨ウォレットファイルを収集します。
6. **PostgreSQLの悪用:** ハードコードされた認証情報を使用してターゲットのPostgreSQLデータベースに接続し、Strapi固有のテーブルをクエリして秘密情報を取得します。また、仮想通貨関連のパターンをダンプし、6つのGuardarianデータベースに接続しようとします。
7. **永続的なインプラント:** 特定のホスト名(「prod-strapi」)へのリモートアクセスを維持するために、永続的なインプラントを展開します。
8. **認証情報の盗難:** ハードコードされたパスをスキャンし、永続的なリバースシェルを生成することで、認証情報の盗難を容易にします。
SafeDepは、「8つのペイロードは明確な物語を示しています。攻撃者は積極的に開始し(Redis RCE、Dockerエスケープ)、それらのアプローチが機能しないと判断し、偵察とデータ収集に方向転換し、ハードコードされた認証情報を使用して直接データベースにアクセスし、最終的にターゲットを絞った認証情報の盗難による永続的なアクセスを確立しました。」と述べています。
### 標的型攻撃か?
ペイロードの性質、デジタル資産への焦点、ハードコードされたデータベース認証情報とホスト名の使用は、仮想通貨プラットフォームに対する標的型攻撃を示唆しています。リストされたパッケージのいずれかをインストールしたユーザーは、侵害されたとみなし、すべての認証情報をローテーションする必要があります。
### 最近のサプライチェーン攻撃
この発見は、オープンソースエコシステムを標的としたサプライチェーン攻撃の急増と一致しています。
* 「ezmtebo」という名前のGitHubアカウントは、CIログやPRコメントを通じて秘密情報を盗む認証情報窃取ペイロードを含む256件以上のプルリクエストを送信しました。
* 「dev-protocol」GitHub組織は、ウォレットの秘密鍵を盗み、SSHバックドアを開くタイポスクワッティングされたnpm依存関係を持つ悪意のあるPolymarket取引ボットを配布するために乗っ取られました。
* Emacsパッケージ「kubernetes-el/kubernetes-el」が侵害され、GitHub ActionsワークフローのPwn Request脆弱性を悪用してリポジトリのGITHUB_TOKENを盗み、破壊的なコードを挿入しました。
* 「xygeni/xygeni-action」GitHub Actionsワークフローは、侵害されたメンテナ認証情報を使用して、リバースシェルバックドアを仕掛けるために侵害されました。Xygeniはその後、新しいセキュリティ制御を実装しました。
* npmパッケージ「mgc」は、アカウント乗っ取りを通じて侵害され、プラットフォーム固有のペイロード(Linux用のPythonトロイの木馬とWindows用のPowerShellバリアント)を取得するドロッパーが含まれる悪意のあるバージョンがプッシュされました。この攻撃は、UNC1069に起因する最近のAxiosを標的としたサプライチェーン攻撃と重複しています。
* 「express-session-js」という名前の悪意のあるnpmパッケージは、「express-session」のタイポスクワッティングであり、リモートアクセス型トロイの木馬(RAT)を取得するドロッパーを含んでいます。
* PyPIパッケージ「bittensor-wallet」(バージョン4.0.2)は、ウォレットキーを外部に送信するバックドアを展開するために侵害されました。
* 「@azure/service-bus-node」という名前の悪意のあるnpmパッケージには、JSON KeeperからRATを取得してデータ窃取と永続的なアクセスを行うドロッパーが含まれており、Socket.IOライブラリを使用して「216.126.237[.]71」に接続します。