SAPのnpmパッケージmbtと@cap-jsの不正な版の公開

カテゴリ
マルウェア
目次
  1. 経緯
    1. 不正な版の動作
    2. mbtの公開に使われたトークン
    3. trusted publisherを経た公開
    4. 攻撃者の帰属の評価
  2. 時系列
  3. 影響範囲
  4. 対応と現状
  5. 未公表の事項
  6. 注
  7. 出典
  8. 更新記録
  9. 関連記事

StepSecurityの2026年4月29日の報告によると、SAPのnpmパッケージ4本(mbt、@cap-js/sqlite、@cap-js/postgres、@cap-js/db-service)に、インストール時にBunランタイムを起動して認証情報を盗むプログラムを実行する不正な版が公開された⁠[9]。不正な版は、npmのレジストリの記録の版の一覧に残っていない⁠[4、5、6、7]。

経緯

不正な版の動作

StepSecurityの報告では、不正な版はどれも同じpreinstallフックを持ち、ローダーのsetup.mjsはバイト単位で同一だった⁠[9]。フックが起動するのは、11.6 MBの難読化された認証情報窃取プログラムである⁠[9]。盗んだ認証情報は、被害者自身のGitHubアカウントに作るリポジトリで持ち出される⁠[9]。そのリポジトリには「A Mini Shai-Hulud has Appeared」と記されている⁠[9]。

Aikidoは、@cap-js/sqlite 2.2.2の通常のファイルが正規の2.2.1とバイト単位で一致したと報告した⁠[11]。改変はインストールフックと追加のペイロードだけだった⁠[11]。

StepSecurityの報告では、ペイロードが到達できるすべてのリポジトリへのコミットで加えるのは、2つの設定ファイルである⁠[9]。Claude CodeのSessionStartフックを悪用する.claude/settings.jsonと、「runOn: folderOpen」を指定した.vscode/tasks.jsonで、リポジトリを開くとペイロードが再び実行される⁠[9]。持ち出すデータはAES-256-GCMで暗号化し、鍵はペイロードに埋め込んだRSA-4096の公開鍵で包む⁠[9]。システムのロケールがruなら処理を終える⁠[9]。

mbtの公開に使われたトークン

StepSecurityの報告によると、mbt 1.2.48は、正規のmbtの公開と同じcloudmtabotのサービスアカウントで公開された⁠[9]。mbtはOIDCのtrusted publishingを使ったことがなく、静的なnpmの自動化トークンに頼っていた⁠[9]。StepSecurityは、攻撃者がこのトークンを得た経路は公開リポジトリのデータからは見えないと書いた⁠[9]。

Aikidoは、CircleCIでプルリクエストのビルドにnpmトークンが露出していたことを、公開された手がかりが有力な原因として指すと報告した⁠[11]。4月29日、SAP/cloud-mta-build-toolで「feat: ci speedup」という短命のドラフトのプルリクエストが開かれ、数分で閉じられ、ブランチは後に強制プッシュされた⁠[11]。このプルリクエストのビルドでは、CircleCIがCLOUD_MTA_BOT_NPM_TOKENなどを含むプロジェクトの秘密を伏せ字で列挙していた⁠[11]。Aikidoは、このビルドを最初の認証情報窃取の最も有力な手がかりとした⁠[11]。

trusted publisherを経た公開

StepSecurityの報告では、攻撃者はSAPの開発者のGitHubアカウントを侵害し、cap-js/cds-dbsのupdate/releasesブランチにコミットを押し込んだ⁠[9]。最初のコミットは、release-please.ymlをmain以外のブランチで動くように変え、公開の手順を手動のOIDCトークン交換に置き換えた⁠[9]。このトークン交換は、npmトークンを二重のbase64でワークフローのログに出した⁠[9]。コミットの作者名はclaudeで、署名の無い偽装の名義だった⁠[9]。

StepSecurityは、npmのtrusted publisherの設定が特定のブランチやワークフローでなくリポジトリ全体を信頼していたため、この手口が成り立ったと説明した⁠[9]。公開の後、後片付けのコミットがOIDCトークン交換のコードを消した⁠[9]。ワークフローの実行は取り消され、ブランチは強制的に戻された⁠[9]。それでも、不正なパッケージは既にレジストリに届いていた⁠[9]。

The Hacker Newsは、cds-dbsのチームが2025年11月にnpmのOIDCのtrusted publishingに移行していたとするSafeDepの説明を報じた⁠[19]。

攻撃者の帰属の評価

StepSecurityの報告では、今回の攻撃はShai-Huludキャンペーンの第3波で、2025年9月の最初の波と、11月のThe Second Comingに続く⁠[9]。

Wizは、過去に複数のライブラリを侵害したTeamPCPの運用者によるものと高い確度で評価した⁠[10]。根拠には、持ち出した秘密の暗号化に使うRSAの公開鍵が共通であることを挙げた⁠[10]。ロケールがruなら終了する確認はCheckmarxとBitwardenの侵害にもあり、npmのインストールフックはBitwarden CLIの侵害と同じだと書いた⁠[10]。2025年秋のShai-Huludの活動への言及はあるが、確定的に結び付けることも、別の主体と言うこともできないとした⁠[10]。

目次へ

時系列

時系列
日付主体内容資料
2026年4月29日9時55分-mbt 1.2.48が公開された(UTC)⁠[4]
2026年4月29日10時3分Socketmbt 1.2.48を検知した(UTC)⁠[12]
2026年4月29日11時23分攻撃者cap-js/cds-dbsのupdate/releasesブランチに最初のコミットを作った(UTC)⁠[9]
2026年4月29日11時25分-@cap-js/sqlite 2.2.2が公開された(UTC)⁠[5]
2026年4月29日11時33分Socket@cap-js/sqlite 2.2.2を検知した(UTC)⁠[12]
2026年4月29日12時14分-@cap-js/postgres 2.2.2と@cap-js/db-service 2.10.1が公開された(UTC)⁠[6、7]
2026年4月29日12時20分Socket@cap-js/postgres 2.2.2と@cap-js/db-service 2.10.1を検知した(UTC)⁠[12]
2026年4月29日13時46分-@cap-js/sqlite 2.4.0、@cap-js/postgres 2.3.0、@cap-js/db-service 2.11.0が公開された(UTC)⁠[5、6、7]
2026年4月29日16時15分-mbt 1.2.49が公開された(UTC)⁠[4]
2026年4月29日17時45分WizTeamPCPの関与の確認を報告に追記した(UTC)⁠[10]
2026年4月29日StepSecurity影響を受けたリポジトリにGitHubのissueを立て、SAPのセキュリティチームに直接通知した⁠[9]
2026年4月29日StepSecurity、Wiz、Aikido、Onapsis、Sophos観測の報告を公開した⁠[9、10、11、12、13]
2026年4月30日SAPSecurity Note 3747787を出した⁠[12]
2026年4月30日-早朝〜午前(日本時間)にSAPのパッケージがnpmから順に取り下げられ、@cap-js/sqliteが早く、ほかは遅れた⁠[14]
2026年7月15日GitHub(CNA)CVE-2026-46421を公開した⁠[8]

目次へ

影響範囲

CVE-2026-46421の記録の説明によると、SAP Cloud Application Programming Modelは企業向けのクラウドアプリケーションを作るツールで、cap-js/cds-dbsはそのSQLデータベースサービスのモノレポである⁠[8]。

npmのレジストリの記録では、mbtのリポジトリはSAP/cloud-mta-build-toolを、@cap-jsのパッケージはcap-js/cds-dbsを指す⁠[4、5、6、7]。mbtの記録は2019年2月12日に作られた⁠[4]。@cap-jsの記録の作成は、@cap-js/sqliteが2023年4月4日、@cap-js/postgresと@cap-js/db-serviceが6月23日だった⁠[5、6、7]。

Onapsisは、不正なパッケージを入手できたのは4月29日の2〜4時間で、クリーンな版が出て感染した版を置き換えたと書いた〔注1〕⁠[12]。

Wizの報告では、侵害された利用者と攻撃者が作った持ち出し用のリポジトリの量は、Shai-HuludやShai-Hulud 2.0より大幅に少ないとみられる⁠[10]。

表1:報道が伝えた規模の数値
項目値示した組織資料
週間ダウンロード数の合計50万超SecurityWeek⁠[17]
週間ダウンロード数の合計55万超Socket(heise onlineの記事)⁠[20]
説明文を持つリポジトリの数1,100超(記事の執筆時点)The Hacker News⁠[19]
盗んだ認証情報を収めたリポジトリの数1,800超(SAP・Lightning・Intercomを含むMini Shai-Huludの攻撃)Ox Security(SecurityWeekの記事)⁠[18]

目次へ

対応と現状

SAPは、SAP CommunityのSAP社員のブログ欄に、CAPの開発者にSAP Note 3747787が示す解決策の適用を求める投稿を掲載した⁠[1]。SAPはsap.comにFAQの文書も掲載している⁠[2]。cap-js/cds-dbsのリポジトリには、GitHub Security AdvisoryのGHSA-pvw4-cvr4-97p8が掲載された⁠[3]。

Onapsisの報告によると、Security Note 3747787は、npmに配られた不正なオープンソースパッケージを扱うノートである⁠[12]。

CVE-2026-46421の記録では、影響を受ける製品は@cap-jsのパッケージで、mbtは含まれていない⁠[8]。弱点の種類はCWE-506(埋め込まれた悪意あるコード)で、CVSS 4.0の基本値は9.3(Critical)である⁠[8]。

記録の説明によると、不正なパッケージは認証情報を集め、自己増殖を試みた⁠[8]。修正版は@cap-js/sqliteが2.4.0以上、@cap-js/postgresが2.3.0以上、@cap-js/db-serviceが2.11.0以上で、既知の回避策は無い⁠[8]。侵害された版を入れたことがあれば、そのマシンで使える全認証情報を侵害されたものとみなし、更新する必要がある⁠[8]。対象の認証情報には、npmトークン、クラウドの認証情報、SSH鍵、GitHubのPATが挙がっている⁠[8]。

目次へ

未公表の事項

  • 攻撃者がmbtの公開に使われたnpmトークンを入手した経路
  • 不正な版をインストールした利用者と組織の数
  • mbtについてのCVEの採番
  • SAPの社内のシステムと顧客のデータへの影響
  • 攻撃者の帰属についてのSAPの見解

注

  • 〔注1〕Onapsisがsocket.devの報告として載せた表では、置き換えの時刻は@cap-jsのパッケージが13時33分、mbtが15時40分(UTC)だった⁠[12]。

出典

当事者

関係組織

  • [4]npm, Inc.『mbt』(2019年2月12日公開、2026年11月7日閲覧)
  • [5]npm, Inc.『@cap-js/sqlite』(2023年4月4日公開、2026年11月7日閲覧)
  • [6]npm, Inc.『@cap-js/postgres』(2023年6月23日公開、2026年11月7日閲覧)
  • [7]npm, Inc.『@cap-js/db-service』(2023年6月23日公開、2026年11月7日閲覧)

調査・観測

報道機関

更新記録

  • 2026年5月3日:公開した。
  • 2026年5月4日:heise onlineの5月4日の記事(出典20)を加え、「影響範囲」の表1を改めた。
  • 2026年5月12日:GMO Flatt Securityの報告の5月12日の更新(出典14)を加え、「時系列」を改めた。
  • 2026年7月15日:CVE Programの7月15日のCVE-2026-46421の記録(出典8)を加え、「時系列」「影響範囲」「対応と現状」「未公表の事項」を改めた。

目次へ