「公式パッケージなら安全」——その前提が崩れたとき、被害は一気に広がる。2026年4月末、SAP公式のnpmパッケージ複数件が改ざんされ、インストールするだけでクラウド認証情報からKubernetesシークレットまで根こそぎ奪われる攻撃が報告された。SAPのエコシステムを利用する開発チームは、今すぐ影響範囲を確認してほしい。

何が起きたか

セキュリティ研究者AikidoとSocketが報告したところによると、以下のSAP公式パッケージの特定バージョンに悪意あるコードが混入していた(現在はNPM上でdeprecated=非推奨):

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

これらはSAPのCloud Application Programming Model(CAP)やCloud MTA Builderとして、エンタープライズ開発で広く使われているパッケージだ。

攻撃の仕組み

改ざんされたパッケージには、npmの preinstall フックを悪用した悪意あるスクリプトが仕込まれていた。npm install を実行するだけで、ユーザーが何も意識することなく攻撃コードが走る。

動作フロー:

  • GitHubからBun JavaScriptランタイムをダウンロード
  • 難読化された execution.js ペイロードを実行
  • 開発者マシンとCI/CD環境から認証情報を収集・外部送信

窃取対象は広範囲にわたる:

  • npmおよびGitHubの認証トークン
  • SSHキーと開発者認証情報
  • AWS・Azure・Google Cloudのクラウド認証情報
  • Kubernetesの設定ファイルとシークレット
  • CI/CDパイプラインのシークレットと環境変数

特に注目すべきは、CIランナーのメモリを直接読み取る手法だ。Linuxの /proc/<pid>/mem を参照してRunnerプロセスからシークレットを抽出し、CIプラットフォームのログマスキングを完全にバイパスする。この手法はBitwarden・Checkmarxへの過去の攻撃でも確認されており、同一構造だとSocketは指摘している。

収集データは暗号化されたうえで、被害者のGitHubアカウントに「A Mini Shai-Hulud has Appeared」という説明文付きリポジトリとして公開される。さらに、窃取したnpm・GitHub認証情報を使って他のパッケージに同じ悪意あるコードを注入し、自己増殖を試みる設計になっている。

今回の侵害の起点については、CircleCIジョブの設定ミスを経由してNPMトークンが漏洩した可能性が指摘されている。本攻撃は「TeamPCP」と呼ばれる脅威アクターと中程度の確信度で結び付けられており、Trivy・Checkmarx・Bitwarden への攻撃でも類似の手口が確認されている。

実務への影響

今すぐ確認すること

SAP CAPやCloud MTAを利用しているプロジェクトでは、以下を即座に実施してほしい:

  • バージョン確認npm list @cap-js/sqlite @cap-js/postgres @cap-js/db-service mbt を実行し、問題バージョンが含まれていないかチェック
  • 認証情報のローテーション:該当期間にnpm installを実行した環境では、クラウド認証情報・GitHubトークン・SSHキーをすべて無効化してローテーション
  • CI/CDシークレットの棚卸し:疑いがあるパイプラインのシークレットは即時ローテーション

中長期的な対策

  • npm cipackage-lock.json の徹底:CI上では npm ci で固定バージョンのみインストールし、ロックファイルを必ずコミット管理する
  • preinstallスクリプトの制限.npmrcignore-scripts=true を設定することで、ライフサイクルスクリプトを無効化できる(正規ビルドスクリプトへの影響は要確認)
  • NHI(Non-Human Identity)の最小権限管理:CI/CDで使用するトークン・サービスアカウントは最小権限で運用し、定期的にローテーションする仕組みを整備する
  • SCA(Software Composition Analysis)ツールの導入:パッケージのインストール前に挙動やシグネチャを検証するツールをパイプラインに組み込む

筆者の見解

今回の攻撃が改めて示したのは、CI/CDパイプラインそのものがセキュリティ境界であるという現実だ。

「公式パッケージだから安全」という前提は、もはや成り立たない。攻撃者はサプライチェーンを経由して、組織のあらゆるシークレットにアクセスできる状況を作り出している。しかも自己増殖するロジックまで仕込まれており、一度感染が広がれば連鎖的な被害が発生する構造だ。

私が特に気になるのは、Non-Human Identity(NHI)の管理状況だ。CI/CDパイプラインには大量の機械アカウントやトークンが漂っているが、これらを適切に管理できている組織はまだ少ない。クラウド認証情報・GitHubトークン・Kubernetesシークレットがそれぞれバラバラに管理されている状態では、このような攻撃が成功するのは時間の問題だと言わざるを得ない。

業務の自動化を進めるためにNHIの活用は避けられないが、管理の仕組みが追いついていなければ、自動化が攻撃者の突破口になってしまう。Just-In-Timeアクセス(必要なときだけ必要な権限を付与する) の原則をNHIにも適用することが、現代の開発現場では必須の考え方になるはずだ。

また今回の侵害の入り口が「CircleCIジョブの設定ミスによるトークン漏洩」であった点も示唆に富む。CI設定のミスは「珍しい事故」ではなく、チームのどこかで必ず発生しうるヒューマンエラーだ。トークンが漏れたとしても被害が最小化される設計をあらかじめ組み込んでおく——その発想がゼロトラスト的なパイプライン設計の本質だと思っている。

「サプライチェーン攻撃は大企業の話」と思っていた方も、今回のSAP案件を機に自社のnpm管理とCI/CDシークレット管理を一度見直してみてほしい。


出典: この記事は Official SAP npm packages compromised to steal credentials の内容をもとに、筆者の見解を加えて独自に執筆したものです。