New Python tool checks NPM packages for manifest confusion issues
2023/07/04 BleepingComputer — NPM JavaScript ソフトウェア・レジストリのパッケージにおける、マニフェストの不一致をチェックする際に有効なツールが開発/公開された。先週に、GitHub/NPM の元 Engineering Manager である Darcy Clarke は、依存関係の中に潜むマルウェアや、インストール中のスクリプト実行の危険性をもたらす、”Manifest Confusion” の問題について警告を発した。”Manifest Confusion” という言葉が指すのは、JavaScript プログラミング言語用のパッケージ・マネージャーであり、Node.js 環境のデフォルトである NPM (Node Package Manager) のセキュリティ問題である。

NPM レジストリに表示されるパッケージのマニフェスト・データと、公開されたパッケージの package.json ファイルに存在するデータとの間に、一貫性のない情報が存在するという問題がある。
それを悪用する脅威アクターたちは、新しいパッケージのマニフェスト・データを操作し、特定のスクリプトや依存関係を削除して、NPM レジストリに表示されないようにできる。これらのスクリプトや依存関係は、package.json ファイルに依然として存在し、パッケージがインストールされるとユーザーに気づかれることなく実行される。
この問題により開発者に生じるのは、キャッシュ・ポイズニング/未知の依存関係のインストール/未知のスクリプトの実行/ダウングレード攻撃などといったリスクである。しかし、依然として GitHub は問題に対処しておらず、同プラットフォームが、今後どうするつもりなのかも不明だ。
そのため Clarke は、パッケージの管理者がマニフェスト・データへの依存を取り除き、レジストリ・プロキシを使ってデータの整合性チェックを行うことを提案している。
Manifest Confusion チェッカー
システム管理者の Felix Pankratz は、解決策が実装されるまでの緩和策として、ソフトウェア開発者が NPM パッケージの不整合をチェックに有効な、Python ベースのツールをリリースした。
このツールを使うには、まず “pip install -r requirements.txt” で PIP Python パッケージマネージャをインストールする。
1つのパッケージを検査するには、スクリプトの第1引数に以下のようなパッケージ名を渡す。
$ ./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 のツールの詳細については、以下の help コマンドで確認できる:
./npm-manifest-check.py -h
Manifest Confusion の問題は、現時点において、NPM コミュニティで広まっているわけでも、致命的な問題でもない。しかし、脅威アクターがサプライチェーン攻撃に利用し始める可能性があるため、無視できない問題だと言えるだろう。
この問題は、2023/06/28 の「NPM の根幹を揺るがす Manifest Confusion:パッケージ情報が信頼できない理由」で詳しく紹介されています。本文の最後には、NPM コミュニティで広まっているわけでも、致命的な問題でもないと記されていますが、本来であれば、GitHub が速やかに情報を整理して、対応策を提示すべき問題だと思います。それまでは、システム管理者の Felix Pankratz さんが提供してくれた、この Python ベースのツールが頼りとなります。

You must be logged in to post a comment.