Strapi CMSプラグインになりすましている36個の悪質なnpmパッケージを含む、調整されたサプライチェーン攻撃が発見されました。Redis遠隔コード実行(RCE)、認証情報収集、永続的なコマンド・アンド・コントロール(C2)マルウェアなど、多様なペイロードを配信しています。
このキャンペーンは、4つのダミーnpmアカウント(umarbek1233、kekylf12、tikeqemif26、umar_bektembiev1)を使用して実行されました。
同じペイロードを再利用する典型的なnpmスパムキャンペーンとは異なり、この作戦は8つの異なるマルウェア亜種を展開しており、特定の組織を狙ったアクティブで進化する攻撃の可能性を示しています。
レポートによると、悪質なパッケージは急速に連続して公開され、それぞれが新しい機能をもたらしました。最初のパッケージであるstrapi-plugin-cron(02:02 UTC)は、Redis設定の誤りを悪用してRCEを実現しました。
cronジョブを注入し、PHPウェブシェルをデプロイしてNode.jsリバースシェルを展開し、SSHキー永続性を試みたほか、低レベルコマンドを使用してローディスクデータにアクセスしました。
その直後、strapi-plugin-config(02:47 UTC)がDockerコンテナからのエスケープを試みることで攻撃を拡大しました。
オーバーレイファイルシステムのパスを特定し、ホストアクセス可能なディレクトリにペイロードを書き込み、Pythonベースのリバースシェルを起動しながら、Elasticsearchおよび暗号資産ウォレットの認証情報などの機密データを抽出しました。
03:01〜03:37 UTCの間に、strapi-plugin-server、database、core、hooksなどのいくつかのパッケージが直接リバースシェル機能を導入しました。
これらのペイロードは本番システムでのみ選別的に実行され、ホスト名チェック(例:「prod」)を使用して、攻撃者が管理するインフラストラクチャにポート4444および8888で再度接続されました。
悪質なStrapi npmパッケージ
後の亜種は大規模なデータ流出に焦点をシフトさせました。strapi-plugin-monitorパッケージは8段階の認証情報収集ルーチンをデプロイし、環境変数、PostgreSQL接続文字列、Redisデータ、ウォレットファイルをターゲットにしました。2.5分ごとにポーリングする短時間のC2ループを維持しました。
より高度なstrapi-plugin-events(03:46 UTC)は、.envファイル全体の流出、ファイルシステム全体のシークレット検出、Redisダンプ、Kubernetes シークレット盗難を含む11段階の攻撃を実行しました。また、ネットワーク偵察を実行し、5分間隔でより長いC2ループを確立しました。
04:45 UTCで、strapi-plugin-seedはハードコードされた認証情報を使用してPostgresQLデータベースを直接ターゲットにしました。
ウォレット、トランザクション、デポジットに関連する機密テーブルを抽出し、Guardianianなどの暗号資産サービス、exchange、custodyにリンクされたデータベースについて特にプローブしました。
後のパッケージは永続性メカニズムを導入しました。[email protected]は、/tmpに隠されたNode.jsエクスプロイトをデプロイし、cronで継続的に実行されるよう設定されました。
後続のバージョンである3.6.9は、ファイルレス実行技術を使用してリバースシェルを起動し、/opt/secrets/および/var/www/などの機密ディレクトリをターゲットにしました。埋め込まれたコメントでJenkins CIパイプラインを参照していました。
影響とターゲティング
- CONFIG SETを使用したRedis悪用により、cronジョブ、ウェブシェル、SSHキーを書き込みます。
- オーバーレイファイルシステムの悪用によるDockerエスケープの試み。
- bashおよびPythonを介したリバースシェル。
- 認証情報と秘密鍵を抽出するためのローディスクアクセス。
- PostgreSQLデータベースダンプと列挙。
- .envファイル、設定、シークレットの流出。
- KubernetesおよびDockerシークレット収集。
- 永続的なC2通信とバックドアインストール。
キャンペーンが暗号資産決済プラットフォームを具体的にターゲットにしていた証拠があり、Guardarian関連インフラストラクチャへの繰り返しの言及が示唆されています。
このインシデントは、対戦相手がペイロードをリアルタイムで継続的に適応させてアクセス、永続性、データ流出を最大化するnpmベースのサプライチェーン攻撃の増大する高度性を強調しています。
侵害インジケーター(IoC)
| パッケージ | バージョン | 著者 |
|---|---|---|
| strapi-plugin-cron | 3.6.8 | umarbek1233 |
| strapi-plugin-config | 3.6.8 | umarbek1233 |
| strapi-plugin-server | 3.6.8 | umarbek1233 |
| strapi-plugin-database | 3.6.8 | umarbek1233 |
| strapi-plugin-core | 3.6.8 | umarbek1233 |
| strapi-plugin-hooks | 3.6.8 | umarbek1233 |
| strapi-plugin-monitor | 3.6.8 | umarbek1233 |
| strapi-plugin-events | 3.6.8 | umarbek1233 |
| strapi-plugin-logger | 3.6.8 | umarbek1233 |
| strapi-plugin-health | 3.6.8 | kekylf12 |
| strapi-plugin-sync | 3.6.8 | kekylf12 |
| strapi-plugin-seed | 3.6.8 | kekylf12 |
| strapi-plugin-locale | 3.6.8 | kekylf12 |
| strapi-plugin-form | 3.6.8 | kekylf12 |
| strapi-plugin-notify | 3.6.8 | kekylf12 |
| strapi-plugin-api | 3.6.8 | kekylf12 |
| strapi-plugin-api | 3.6.9 | kekylf12 |
| strapi-plugin-sitemap-gen | 3.6.8 | tikeqemif26 |
| strapi-plugin-nordica-tools | 3.6.10 | tikeqemif26 |
| strapi-plugin-nordica-sync | 3.6.8 | tikeqemif26 |
| strapi-plugin-nordica-cms | 3.6.8 | tikeqemif26 |
| strapi-plugin-nordica-api | 3.6.8 | tikeqemif26 |
| strapi-plugin-nordica-recon | 3.6.8 | tikeqemif26 |
| strapi-plugin-nordica-stage | 3.6.8 | tikeqemif26 |
| strapi-plugin-nordica-vhost | 3.6.8 | tikeqemif26 |
| strapi-plugin-nordica-deep | 3.6.8 | tikeqemif26 |
| strapi-plugin-nordica-lite | 3.6.11 | tikeqemif26 |
| strapi-plugin-nordica | 3.6.10 | umar_bektembiev1 |
| strapi-plugin-finseven | 3.6.8 | umar_bektembiev1 |
| strapi-plugin-hextest | 3.6.8 | umar_bektembiev1 |
| strapi-plugin-cms-tools | 3.6.8 | umar_bektembiev1 |
| strapi-plugin-content-sync | 3.6.8 | umar_bektembiev1 |
| strapi-plugin-debug-tools | 3.6.8 | umar_bektembiev1 |
| strapi-plugin-health-check | 3.6.8 | umar_bektembiev1 |
| strapi-plugin-guardarian-ext | 3.6.8 | umar_bektembiev1 |
| strapi-plugin-advanced-uuid | 3.6.8 | umar_bektembiev1 |
| strapi-plugin-blurhash | 3.6.8 | umar_bektembiev1 |
翻訳元: https://gbhackers.com/36-malicious-strapi-npm/