OstorlabがDependency Confusionを検出
Dependency Confusionは、重大度の高い影響をもたらす新しい攻撃です。本記事では、この脆弱性とその他のサプライチェーン攻撃の概要を紹介します。

Alex Birsen氏は、流出したプライベートパッケージ名を利用して、ビルド環境、CI/Dパイプライン、開発者のワークステーションを侵害できることを示す新しい研究を発表しました。
この新しい脆弱性は、一般にDependency Confusion(依存関係の混乱)またはSubstitution Attack(置換攻撃)と呼ばれる、サプライチェーン攻撃の一種です。
根本原因は外部のパッケージ管理システムにあります。これらのシステムは通常、社内専用のパッケージをホストするためのプライベートリポジトリをデプロイできるようになっています。
ビルドプロセスにおいて、パッケージマネージャーはプライベートリポジトリを優先するのではなく、最も高いバージョンを持つリポジトリを優先します。
攻撃者はこの挙動を悪用し、パブリックリポジトリに悪意のあるパッケージを作成して十分に高いバージョンを付けることで、ビルド時にその悪意のあるパッケージが確実に使われるようにできます。
Sonatypeは、脆弱性の公表から数日以内に、悪意のあるペイロードでこの脆弱性を悪用する新しいパッケージが430%増加したことを検出したと報告しています。
依存関係の乗っ取りはあらゆるソフトウェアに影響しますが、特にモバイルアプリケーションは、プライベートパッケージ名を流出させていることが多いため影響を受けやすくなっています。
Ostorlabは、流出した依存関係名の検出に対応し、NPMにおいてDependency Confusionに対して脆弱なものを報告するようになりました。
Ostorlabチームは、その他のパッケージマネージャー、具体的にはCocoapods、Maven、Gradle、Cordova、Xamarin Nuget、Flutterにおける悪用可能性と検出可能性を調査しています。
脆弱な場合はどうすればよいか
NPMパッケージでは、パッケージにスコープを設定できます。公開npmレジストリ上のスコープ付きパッケージは、そのスコープに関連付けられたユーザーまたは組織のみが公開でき、そのスコープ内のパッケージは非公開にすることができます。また、スコープ名を特定のレジストリに紐付けることもできます。
{
"name": "@ostorlab/dep1",
"version": "1.2.3",
"description": "Scoped dependency 1",
"dependencies": {
"@ostorlab/dep2": "1.2.3"
}
}
攻撃者に乗っ取られないよう、使用するスコープは事前に作成しておく必要があります。公開スコープを作成するには、次の手順に従ってください。
スコープ付きレジストリは、.npmrcファイルに次のような行を含めることで設定できます。
@ostorlab:registry = https://reg.ostorlab.internal/
依存関係が増えれば、脆弱性も増える
Ostorlabは、その他の形態のサプライチェーンおよび依存関係の脆弱性も検出します。
Gradle、Maven、Cocoapods、Xamarin、Cordova、Javascriptのコンパイル済み依存関係を一覧表示します。コンパイル済み依存関係を一覧化することで、推移的依存関係の特定など、ソースコード上の依存関係の限界に対処できます。推移的依存関係とは依存関係の依存関係のことで、そのバージョンの中には明示されず、ビルド時に初めて決まるものもあります。

Ostorlabは、メモリ破壊のような重大度の高い脆弱性の影響を受けやすい、静的にコンパイルされた依存関係を検出します。モバイルアプリケーションでよく見られる依存関係は、libpng、libjpeg、libtiffといった画像の解析や圧縮のライブラリです。Ostorlabは、libxslt、zlib、openssl、libcurlなど、70を超えるネイティブライブラリも検出できます。
Ostorlabは、これらのパッケージに影響する既知の脆弱性を検出でき、未報告の脆弱性について独自に精査したデータベースも維持しています。Ostorlabの脆弱性データベースには130万件のエントリが含まれ、継続的に更新されています。

これらの脆弱性クラスはすべて、コミュニティスキャナーでカバーされています。