FlawOpen

flawopen.com/リファレンス/Dependency Confusion

Dependency Confusion:パッケージ取得元の混同が起きる仕組み

High Severity CWE-829: Inclusion of Functionality from Untrusted Control Sphere ソフトウェアサプライチェーン
やさしい説明 — 名前が似ている仕入先

チームが仕入先カタログから部品を注文するとします。異なる仕入先が同じ商品名を使い、規則で正規の仕入先を指定していなければ、ビルドは意図しない部品を受け取ることがあります。Dependency Confusionは、組織が信頼するつもりのないレジストリや名前空間からパッケージを解決してしまう取得元選択の失敗です。

Boundary: パッケージ名、名前空間、レジストリ設定、ロックファイルの出所
Failure: リゾルバーが意図しない取得元から同名パッケージを取得する可能性
Impact: 未審査のサードパーティコードがビルドに入り、許可時はインストールスクリプトも実行される
Remediation: 明示的な名前空間とレジストリの方針、審査済みロックファイル、最小権限のビルド

Dependency Confusionの発生メカニズム

挙動はパッケージマネージャーと設定によって異なります。pipの公式文書は、プライベートな--index-urlと公開の--extra-index-urlの併用により、同名の公開パッケージが選ばれる可能性を警告しています。npmはscopeまたは既定設定でレジストリを選択し、常に公開版と非公開版を比較して大きい方を選ぶわけではありません。共通の原因は取得元方針の曖昧さです。スクリプトが有効なら、ビルドジョブの権限で実行されます。

pip.conf と requirements.txt(曖昧な取得元)リスクのある設定
[global]
index-url = https://packages.example.internal/simple
extra-index-url = https://pypi.org/simple

corp-auth-utils
.npmrc と package.json(scopeの明示的なルーティング)対策例
@corp:registry=https://packages.example.internal/repository/npm/

{
  "dependencies": {
    "@corp/billing-engine": "1.2.0"
  }
}

Dependency Confusionの発生経路

エンジニアリング上の防御策

関連するセキュリティ記事とインシデント分析:セキュリティディレクトリ →

参考資料

関連項目 Docker ソケット公開のリスクと対策 GitHub Actionsのスクリプトインジェクション対策 Cosign GHSA-fx35-mq7g-6g98:Bundle 検証回避