コンテンツにスキップ

Dependency Confusion

依存関係の混乱

説明

依存関係の混乱 (Dependency confusion) または置換攻撃は、リモートコード実行につながる可能性のある新しい攻撃手法です。この攻撃は通常、ビルド環境、CI/CD パイプライン、および開発者のワークステーションに影響を与えます。

ほとんどのプログラミング言語では、サードパーティの依存関係を取得するために外部パッケージ管理システムを利用できます。

パッケージマネージャーは通常、内部専用のパッケージをホストするためにプライベートリポジトリをデプロイする機能を提供します。

ビルドプロセス中、パッケージマネージャーはプライベートリポジトリを優先するのではなく、バージョンが最も高いものを優先します。攻撃者は、パブリックリポジトリに悪意のあるパッケージを作成し、ビルド時に悪意のあるパッケージが確実に関使用されるように十分に高いバージョンを使用することで、この動作を悪用する可能性があります。

推奨事項

プロジェクトの依存関係を管理する場合、より良い構成とセキュリティのためにスコープ付きパッケージ (scoped packages) を活用することが不可欠です。NPM の場合は、次の手順に従ってスコープ付きパッケージを作成し、スコープ付きレジストリを設定し、スコープの乗っ取りを防ぎ、依存関係を効果的に定義します。

1. スコープ付きパッケージを作成する:

まだ作成していない場合は、プロジェクト用のスコープ付きパッケージを作成します。手順 に従ってこれを行うことができます:

  1. npm の「Sign In」ページでアカウントの詳細を入力し、Sign In をクリックします。
  2. ページの右上隅にあるプロフィール写真をクリックし、Add an Organization をクリックします。
  3. 組織作成ページの Name フィールドに、組織の名前を入力します。組織名は、組織のスコープにもなります。
  4. Name フィールドの下で、「Unlimited private packages」有料プランまたは「Unlimited public packages」無料プランのいずれかを選択し、Buy または Create をクリックします。
  5. (オプション) 組織への招待ページで、組織にメンバーとして追加するユーザーの npm ユーザー名またはメールアドレスを入力し、招待するチームを選択して、Invite をクリックします。
  6. Continue をクリックします。

2. スコープ付きレジストリの設定:

.npmrc ファイルに次の行を追加して、スコープ付きレジストリを設定します:

@[ORG]:registry = https://reg.[ORG].internal/

3. スコープの乗っ取りを防止する:

使用しようとしているスコープ (@ORG) が保護されており、攻撃者に乗っ取られないことを確認します。これには、所有権の確認や、関連する組織またはユーザーアカウントの制御の維持が含まれます。

4. 依存関係の定義:

前に定義したスコープを必ず使用して、package.json ファイル内で依存関係を定義します。例:

{
  "name": "@org/dep1",
  "version": "1.2.3",
  "description": "Scoped dependency 1",
  "dependencies": {
    "@ostorlab/dep2": "1.2.3"
  }
}

これらの実行可能な手順に従うことで、スコープ付きパッケージを効果的に活用し、レジストリ構成を確保し、権限のないエンティティによるスコープ乗っ取りのリスクを軽減できます。

リンク

標準

  • OWASP_MASVS_L1:
    • MSTG_CODE_5
  • OWASP_MASVS_L2:
    • MSTG_CODE_5
  • PCI_STANDARDS:
    • REQ_2_2
    • REQ_6_2
    • REQ_6_3
    • REQ_11_3
  • OWASP_MASVS_v2_1:
    • MASVS_CODE_3
  • SOC2_CONTROLS:
    • CC_2_1
    • CC_4_1
    • CC_4_2
    • CC_6_6
    • CC_7_1
    • CC_7_2
    • CC_7_4
    • CC_7_5
    • CC_8_1
    • CC_9_1