⚠️

npmパッケージの自己増殖型サプライチェーン攻撃について

に公開

緊急対応が必要:npmパッケージの連鎖感染型攻撃

一昨日から話題になっているnpmパッケージに関する重大なセキュリティ問題について、エンジニア以外の方でも問題の内容や影響が分かるようにまとめたものです。

まず、「サプライチェーン攻撃」の言葉の意味ですが小売業で用いられるそれと類義ですが、ソフトウェアの提供元から開発者、プロダクト、ユーザーへの提供までの一連のプロセス(ソフトウェアサプライチェーン)を指してそう呼んでいるものです。

脅威の概要

Javascriptのパッケージ管理ツールnpmに悪意のあるパッケージが公開され、npmを利用する広範な環境で連鎖的に脅威が拡散されています。

  • 影響範囲: 187以上のパッケージが侵害
  • 攻撃手法: 自己増殖型マルウェア(ウイルスのように他のパッケージに感染)
  • 主要ターゲット: @ctrl/tinycolor、Nx、CrowdStrike名前空間のパッケージ
  • 被害内容: AWS、GCP、GitHub認証情報の窃取、GitHub Actions経由のバックドア設置

初期の報告例

Self-propagating supply chain attack hits 187 npm packages

Ongoing npm Software Supply Chain Attack Exposes New Risks

npmパッケージとは?

npm(Node Package Manager) は、JavaScriptのパッケージ管理ツールです。世界中の開発者が作成したライブラリやツールを共有・利用するためのプラットフォームで、現代のWeb開発には欠かせない存在です。

重要: npmパッケージは単なるコードライブラリではありません。以下のような様々な形で私たちの開発環境に影響を与えます:

  • VSCode拡張機能: 多くの拡張機能がnpmパッケージとして配布
  • CLIツール: コマンドラインで使用する開発ツール
  • フレームワーク: React、Vue、Angularなどの主要フレームワーク
  • ビルドツール: Webpack、Vite、Rollupなどのバンドラー

タイムライン

2025年8月26日:S1ngularity 攻撃開始。攻撃者はNxリポジトリ内の脆弱なGitHub Actionsワークフローを悪用し、npm公開トークンを盗み出しました。複数のNxパッケージの悪意のあるバージョンがnpmに公開されました。インシデントはsonatype-2025-003584として追跡されています。

2025年8月26日~27日:侵害されたNxパッケージ内の悪意のあるインストール後スクリプト(telemetry.js)が、開発者マシンをスキャンして認証情報、シークレット、SSHキー、暗号ウォレットファイルを探し出し、攻撃者が管理するGitHubリポジトリにデータを流出させました。数万件のファイルと2,000件を超える個別のシークレットが漏洩しました。

2025年8月27日~28日:流出した秘密情報を含む公開リポジトリが作成され、多くのリポジトリに「s1ngularity-repository」という名前が付けられました。GitHubは、攻撃者が作成した多くのリポジトリを無効化し、検出次第削除しました。

2025年9月8日:別件ながら重大なキャンペーンが発覚しました。18種類の人気npmパッケージ(debug、chalkなどを含むがこれらに限定されない)を標的とした、大規模なnpmサプライチェーン攻撃です。アップデートに悪意のあるコードが挿入されていました。これらのパッケージは合計で毎週数十億回ダウンロードされており、広範な脆弱性への懸念が高まっています。

2025年9月9日:Sonatypeは、侵害を受けた人気npmパッケージ(Chalk / debugキャンペーン)に関する調査結果を公開しました。インシデントはsonatype-2025-003716として追跡されています。

2025年9月16日:180以上のnpmパッケージが侵害された新たなキャンペーンが発生しました。Sonatypeのリリース整合性システムは、新たに影響を受けた項目を継続的に検出しています。インシデントはsonatype-2025-003810として追跡されています。

https://www.sonatype.com/blog/ongoing-npm-software-supply-chain-attack-exposes-new-risks?utm_source=chatgpt.com の英訳抜粋です。

補足

  • 8月末には S1ngularity 攻撃として兆候がすでに出ていたが、
    ワーム全体(Shai-Hulud)としての全貌が明らかになったのは 9月中旬
  • 攻撃は、TruffleHog を悪用してシークレットを窃取し、それを利用して別パッケージへ感染を拡大する仕組みを持っていた。

影響範囲:開発PCを超えた組織全体への脅威

直接的な影響

  • 開発者のPC: 認証情報の窃取、ファイルシステムのスキャン
  • CI/CD環境: GitHub Actions経由でのバックドア設置
  • クラウド環境: AWS、GCP、Azure等の認証情報漏洩

間接的な影響(他者への波及)

  • 顧客システム: 開発したアプリケーションを通じて顧客環境に影響
  • パートナー企業: 共有しているコードやライブラリ経由での感染拡大
  • オープンソースコミュニティ: 公開しているパッケージを通じて世界中の開発者に影響

ビジネスへの影響

  • 法的責任: 顧客データの漏洩による損害賠償
  • 信頼失墜: セキュリティインシデントによる企業イメージの悪化
  • コンプライアンス違反: 各種規制への違反による制裁金

攻撃の流れ

直接原因

  1. 開発者が悪意のあるパッケージをインストール
  2. パッケージが認証情報を窃取
  3. 窃取した認証情報でクラウド環境にアクセス

根本原因

  1. パッケージの信頼性検証不足: 外部ライブラリの安全性確認が不十分
  2. 自動更新の盲信: パッケージの自動更新機能を悪用
  3. 権限の過剰付与: 開発環境に過度な権限を付与
  4. 監視体制の不備: 異常な動作の検知ができていない
🔗 この場合の「サプライチェーン攻撃」とは?

管理者層向け:なぜこの攻撃が深刻なのか

組織全体への影響

  1. 開発停止リスク

    • パッケージの信頼性が失われ、開発作業が停滞
    • セキュリティ対応にリソースが集中
  2. データ漏洩リスク

    • クラウドサービスの認証情報が窃取される可能性
    • 顧客データや機密情報への不正アクセス
  3. コンプライアンス違反

    • セキュリティインシデントの報告義務
    • 顧客への影響説明と対策報告
  4. 外部への影響拡大

    • 開発したアプリケーションを通じて顧客環境に被害
    • パートナー企業やオープンソースコミュニティへの感染拡大
    • 企業の信頼失墜と法的責任の発生

なぜ「連鎖感染」が危険なのか?

従来の攻撃: 1つのパッケージが問題 → そのパッケージだけを避ければ安全
今回の攻撃: 1つのパッケージが感染 → 他のパッケージにも自動的に感染 → 被害が指数関数的に拡大

具体例:

  • 開発者がAパッケージをインストール
  • AパッケージがBパッケージを自動的に更新
  • BパッケージがCパッケージを自動的に更新
  • 結果:開発者はAパッケージしかインストールしていないのに、B、Cパッケージも感染

対処指針(Shai-Hulud 事案対応)

8/26以降にリリースされたパッケージに注意が必要です。
通常の脆弱性対策は最新バージョンへのアップデートですが、今回に限っては最新版に脆弱性が存在する可能性があります。

1. 影響範囲の調査

  • 利用している npm パッケージをすべて洗い出し、8/26 以降に更新されたものを重点的に確認。
  • 依存関係ツリー(直接・間接)を含めて調査。
  • 該当パッケージがセキュリティアドバイザリや各種ベンダー報告で「影響あり」とされていないか突合せ。

2. シークレットのローテーション

  • npm publish トークン、GitHub Actions など CI/CD の認証情報、API キー、SSH キーを一斉に見直し。

  • 不要なトークンは無効化、必要なものは即時ローテーション。

  • AWS: IAMキーの即座変更

  • GCP: サービスアカウントキーの再生成

  • GitHub: Personal Access Tokenの再発行

  • その他: すべてのAPIキー・トークンの変更

3. バージョン固定(Pinning)

  • package.jsonpackage-lock.json / yarn.lock を正しく commit し、既知の安全バージョンに固定。
  • 最新版=安全ではない点に注意。攻撃混入が報告されていないバージョンに留める。

4. 新バージョン導入時の検証

  • いきなり本番に反映せず、ステージング環境で差分コードレビュー・静的解析・挙動確認を行う。
  • postinstall スクリプトやネットワークアクセス処理を特に重点チェック。
  • 問題なければ本番に反映。

5. VSCode 拡張機能の確認

  • 開発者個々人の VSCode にインストールされている拡張機能も調査対象に含める。
  • Marketplace 由来の拡張は内部で npm パッケージを利用することが多く、攻撃経路となる可能性がある。
  • 不要な拡張は削除し、利用必須なものは 更新履歴や配布元の信頼性を確認。
  • セキュリティベンダーやコミュニティで不審と報告されている拡張がないか確認。

6.他npmパッケージ使用の確認

  • CLIツール: create-react-app、Vue CLI等
  • ビルドツール: Webpack、Vite、Rollup等
  • フレームワーク: Next.js、Nuxt.js等

7.CI/CDパイプラインの確認

  • GitHub Actionsのワークフロー確認
  • 不正なアクションの実行履歴チェック
  • 権限設定の見直し

将来的には↓

9. 内部レジストリ / ミラー利用

  • Verdaccio / Nexus / GitHub Packages などを利用して 検証済みパッケージのみ配布する仕組みを導入。
  • 公開 npm レジストリから直接取得する運用を避ける。

10. モニタリングと監査

  • npm audit / Snyk / Sonatype / Socket.dev 等で依存関係を継続的にスキャン。
  • 不審なバージョンアップや依存関係追加を監視し、検知したら即調査。

11. チーム内共有と教育

  • 「単なるアップデート=安全」ではないことを全員に周知。
  • サプライチェーン攻撃やシークレット管理について啓発を行い、2FA の徹底を推奨。

報告されているパッケージの一例

@ctrl/tinycolor関連

  • @ctrl/tinycolor(週200万回ダウンロードの人気パッケージ)

Nx関連(モノレポ管理ツール)

  • nx: 21.5.0, 20.9.0, 20.10.0, 21.6.0, 20.11.0, 21.7.0, 21.8.0, 20.12.0
  • @nx/devkit: 21.5.0, 20.9.0
  • @nx/enterprise-cloud: 3.2.0
  • @nx/eslint: 21.5.0
  • @nx/js: 21.5.0, 20.9.0
  • @nx/key: 3.2.0
  • @nx/node: 21.5.0, 20.9.0
  • @nx/workspace: 21.5.0, 20.9.0

CrowdStrike名前空間

  • CrowdStrikeのnpm名前空間で公開されたパッケージ

その他

  • その依存関係にあるすべてのパッケージ

今後の予防策

短期的対策(1週間以内)

  1. パッケージ管理ポリシーの策定

    • 新規パッケージ導入時の承認プロセス
    • 定期的な依存関係の監査
  2. セキュリティツールの導入

    # 推奨ツール
    npm install -g npm-audit-ci
    npm install -g snyk
    
  3. 開発者向けガイドライン作成

    • 安全なパッケージ選択基準
    • インシデント発生時の対応手順

中長期的対策(1ヶ月以内)

  1. セキュリティ監視の強化

    • リアルタイム脆弱性監視
    • 異常なパッケージ動作の検知
    • VSCode拡張機能の監視
  2. 組織的な体制整備

    • セキュリティ責任者の明確化
    • インシデント対応チームの設置
  3. 開発環境のセキュリティ強化

    • VSCode拡張機能の承認プロセス
    • CLIツールの使用制限
    • サンドボックス環境での開発

📚 参考資料


⚠️ 重要: この連鎖感染型攻撃は進行中です。定期的に最新情報を確認し、必要に応じて追加の対策を実施してください。

Discussion