Dependency Confusion
基本情報
要約すると、依存関係の混乱の脆弱性は、プロジェクトがスペルミス、存在しないライブラリ、または指定されていないバージョンを使用しており、使用されている依存関係リポジトリが公開リポジトリから更新されたバージョンを収集することを許可しているときに発生します。
スペルミス:
requests
の代わりに**reqests
**をインポート存在しない: 存在しない内部ライブラリである
company-logging
をインポート指定されていないバージョン: 内部の存在する
company-requests
ライブラリをインポートしますが、リポジトリは公開リポジトリをチェックして、より大きなバージョンがあるかどうかを確認します。
悪用
すべての場合において、攻撃者は単に被害企業が使用しているライブラリの名前を持つ悪意のあるパッケージを公開する必要があります。
スペルミス&存在しない
企業が内部ではないライブラリをインポートしようとしている場合、ライブラリのリポジトリはおそらく公開リポジトリでそれを検索しようとします。攻撃者がそれを作成している場合、あなたのコードと実行中のマシンはおそらく侵害される可能性が高いです。
指定されていないバージョン
開発者がライブラリのバージョンを指定しないか、メジャーバージョンのみを指定することは非常に一般的です。その後、インタプリタは、これらの要件に一致する最新バージョンをダウンロードしようとします。
ライブラリが既知の外部ライブラリ(例:python requests
)である場合、攻撃者はあまりできません。なぜなら、requests
というライブラリを作成することはできないからです(元の著者でない限り)。
ただし、この例のように、requests-company
のような内部のライブラリの場合、ライブラリリポジトリが外部からも新しいバージョンを確認できる場合、公開で利用可能な新しいバージョンを検索します。
したがって、攻撃者が企業がrequests-company
ライブラリバージョン1.0.1を使用していることを知っている場合(マイナーアップデートを許可)、requests-company
バージョン1.0.2を公開することができ、企業は内部のものの代わりにそのライブラリを使用することになります。
AWSの修正
この脆弱性はAWSのCodeArtifactで見つかりました(このブログポストの詳細を読む)。 AWSは、内部依存関係を外部リポジトリからダウンロードすることを避けるために、ライブラリが内部か外部かを指定できるように修正しました。
脆弱なライブラリの検出
依存関係の混乱に関する元の投稿では、著者が、JavaScriptプロジェクトの依存関係を含む数千の公開されたpackage.jsonファイルを検索しました。
参考文献
Last updated