プライベート リポジトリ内のパッケージの存在を確認できる NPM に対する攻撃

NPM には、閉じられたリポジトリ内のパッケージの存在を検出できる欠陥が確認されました。 この問題は、リポジトリにアクセスできないサードパーティから既存のパッケージと存在しないパッケージをリクエストするときの応答時間が異なることが原因で発生します。 プライベート リポジトリ内のどのパッケージにもアクセスできない場合、registry.npmjs.org サーバーはコード「404」のエラーを返しますが、要求された名前のパッケージが存在する場合は、顕著な遅れを伴ってエラーが発行されます。 攻撃者はこの機能を使用して、辞書を使用してパッケージ名を検索することにより、パッケージの存在を判断できます。

パブリック リポジトリと内部リポジトリの依存関係名の交差部分を操作する依存関係混合攻撃を実行するには、プライベート リポジトリのパッケージ名の決定が必要になる場合があります。 攻撃者は、どの内部 NPM パッケージが企業リポジトリに存在するかを知ることで、同じ名前で新しいバージョン番号を持つパッケージをパブリック NPM リポジトリに配置することができます。 アセンブリ中に内部ライブラリが設定でリポジトリに明示的にリンクされていない場合、npm パッケージ マネージャーはパブリック リポジトリの優先順位が高いと見なし、攻撃者が準備したパッケージをダウンロードします。

GitHub は XNUMX 月にこの問題について通知を受けましたが、アーキテクチャ上の制限を理由に、攻撃に対する保護を追加することを拒否しました。 プライベート リポジトリを使用している企業は、攻撃者が重複する名前のパッケージを配置できないように、パブリック リポジトリ内で重複する名前が存在するかどうかを定期的にチェックするか、プライベート リポジトリ内のパッケージの名前を繰り返す名前で自社に代わってスタブを作成することをお勧めします。

出所: オープンネット.ru

コメントを追加します