
依存関係設定で参照されているプライベートパッケージ名の未使用の名前空間をチェックするツール。
Python (pypi) の requirements.txt、JavaScript (npm) の package.json、PHP (composer) の composer.json、MVN (maven) の pom.xml に対応。
2021年2月9日、セキュリティ研究者のAlex Birsan氏が記事を公開し、複数のプログラミング言語エコシステムの依存関係管理ツールにおける異なる解決順序の欠陥について触れました。
Microsoftは影響を軽減する方法を説明したホワイトペーパーを公開しましたが、根本的な原因は依然として残っています。
confused はアプリケーションの依存関係定義ファイルを読み取り、そのファイル内の各依存関係エントリについて公開パッケージリポジトリをチェックします。公開リポジトリで見つからなかったパッケージ名をすべて報告します。これは、そのパッケージがこの種の攻撃に対して脆弱である可能性がありながら、まだ悪用されていない状態を示します。
しかし、これはアプリケーションがすでに活発に悪用されていないことを意味するわけではありません。ソフトウェアがプライベートパッケージリポジトリを使用していることがわかっている場合は、信頼できる主体(通常は自分自身または自社)がプライベートパッケージの名前空間を主張していることを確認する必要があります。
npmのような一部のパッケージングエコシステムには「スコープ」という概念があり、プライベートまたはパブリックに設定できます。要するに、スコープは上位レベルの名前空間です。スコープは本質的に公開されないため、confused はそれが主張されたかどうかを確実に検出できません。アプリケーションがスコープ付きのパッケージ名を使用している場合は、信頼できる主体が公開リポジトリでそのスコープ名を主張していることを確認する必要があります。
ダウンロード リリースページからプリビルドバイナリをダウンロードし、解凍して実行!
または
最近のGoコンパイラがインストールされている場合: go get -u github.com/visma-prodsec/confused (同じコマンドで更新も可能)
または
git clone https://github.com/visma-prodsec/confused ; cd confused ; go get ; go build
Usage:
confused [-l LANGUAGENAME] depfilename.ext
Usage of confused:
-l string
Package repository system. Possible values: "pip", "npm", "composer", "mvn", "rubygems" (default "npm")
-s string
Comma-separated list of known-secure namespaces. Supports wildcards
-v Verbose output
./confused -l pip requirements.txt
Issues found, the following packages are not available in public package repositories:
[!] internal_package1
./confused -l npm package.json
Issues found, the following packages are not available in public package repositories:
[!] internal_package1
[!] @mycompany/internal_package1
[!] @mycompany/internal_package2
# Example when @mycompany private scope has been registered in npm, using -s
./confused -l npm -s '@mycompany/*' package.json
Issues found, the following packages are not available in public package repositories:
[!] internal_package1
./confused -l mvn pom.xml
Issues found, the following packages are not available in public package repositories:
[!] internal
[!] internal/package1
[!] internal/_package2
./confused -l rubygems Gemfile.lock
Issues found, the following packages are not available in public package repositories:
[!] internal
[!] internal/package1
[!] internal/_package2