New Python tool checks NPM packages for manifest confusion issues

セキュリティ研究者とシステム管理者は、NPM JavaScript ソフトウェア レジストリのパッケージ内のマニフェストの不一致をユーザーがチェックできるようにするツールを開発しました。

先週、GitHub と NPM の元エンジニアリング マネージャー、ダーシー クラーク氏は、マルウェアが依存関係に隠れたり、インストール中にスクリプトを実行したりするリスクを引き起こす可能性のある「明白な混乱」の問題について警告しました。

「マニフェストの混乱」とは、JavaScript プログラミング言語のパッケージ マネージャーであり、Node.js 環境のデフォルトのパッケージ マネージャーである NPM (ノード パッケージ マネージャー) におけるセキュリティの問題を指します。

問題は、NPM レジストリに表示されるパッケージのマニフェスト データと、公開されたパッケージの ‘package.json’ ファイルに存在するデータとの間の情報の不一致にあります。

悪意のある攻撃者は、新しいパッケージのマニフェスト データを操作し、特定のスクリプトや依存関係を削除して、NPM レジストリに表示されないようにする可能性があります。

ただし、これらのスクリプトまたは依存関係は package.json ファイル内に残り、パッケージのインストール時にユーザーが気付かないうちに実行されます。

この問題により、開発者はキャッシュ ポイズニング、未知の依存関係のインストール、未知のスクリプトの実行、さらにはダウングレード攻撃などのリスクにさらされる可能性があります。

GitHub はまだこの問題に対処しておらず、プラットフォームが何をしようとしているのか不明であるため、Clarke 氏は、パッケージ管理者がマニフェスト データへの依存を排除し、レジストリ プロキシを使用してデータの整合性チェックを実行することを提案しました。

マニフェスト混乱チェッカー

ソリューションが実装されるまで、システム管理者のFelix Pankratz は、ソフトウェア開発者が NPM パッケージの不整合をチェックするのに役立つPython ベースのツールをリリースしました。

このツールを使用するには、まず、「pip install -rrequirements.txt」で PIP Python パッケージ マネージャーをインストールします。

単一のパッケージを検査するには、パッケージの名前を最初の引数としてスクリプトに渡します。例えば:

$ ./npm-manifest-check.py darcyclarke-manifest-pkg

出力では、マニフェストと実際の package.json ファイルの間のバージョン、依存関係、スクリプト、およびパッケージ名の不一致が強調表示されます。

テスト済みのパッケージ
テスト済みのパッケージ()

不一致のないパッケージの場合、出力は次のようになります。

$ ./npm-manifest-check.py color
No mismatch detected for color.

複数のパッケージを検査するために、開発者はそれらを「packages.」に追加できます。 list’ ファイル (1 行に 1 つのパッケージ) を作成し、「check_packages.sh」ラッパー スクリプトを使用してそれらを確認します。このツールは、チェックされた各パッケージで見つかった不一致を報告します。

Pankratz のツールの使用法をすべて理解するには、次のヘルプ コマンドを確認してください。

./npm-manifest-check.py -h

現時点で、マニフェスト混乱は NPM コミュニティで広範囲に及ぶ重大な問題ではありませんが、脅威アクターがサプライ チェーン攻撃に利用し始める可能性があるため、これを無視することは安全な方法ではありません。