npmにワームプログラムが動作可能な脆弱(ぜいじゃく)性が報告されている。npmプロジェクトでは、改めてユーザーに注意を促している。
Node.jsのデフォルトパッケージマネジャーとして広く利用されている「npm」に、自己複製型のワームプログラムが動作可能な脆弱(ぜいじゃく)性が報告されている。
Sam Saccone氏が公開したレポートによると、この脆弱性は、npmのようなパッケージマネジャーが持つ「ライフサイクルスクリプト」のコンセプトに起因したものだという。パッケージマネジャーはシステムで任意のコマンドをカレントユーザーとして(Sudoの場合は一時的な特権ユーザーとして)実行できる。
npmではセマンティックバージョニング(semver)の利用を推奨しているが、セマンティックバージョニングは、依存関係にあるパッケージのバージョンを固定せず、依存パッケージの作者は、自由にアップデートバージョンをプッシュできる仕様になっている。一方、npmはパッケージリポジトリサーバへのログイン状態を維持する仕様になっており、「npm publish」コマンドでレジストリサーバにコマンドを公開できる。
このため、特定の手順を踏むと、依存モジュールのバージョンを「^」または「~」で指定している大多数のモジュールで次回のインストール時に自己複製型の細工されたモジュールを埋め込まれるという。
レポートでは、次の手順で攻撃が可能だとしている。
この問題への対策としてJapan Vulnerability Notes(JVN)では以下のワークアラウンドの実施を推奨している。あくまでも、影響を最小限に抑えるための対策だ。
Sam Saccone氏のレポートでは、脆弱性報告を行った際に、npmプロジェクトからは「対策する予定はない」との回答を得たとしている。
npmプロジェクトは公式ブログで、この実装が持つ課題を当初から認識していたが、「ユーザーコミュニティーが拡大したことで、全ての人がこの問題を認識しなくなっていた」と、コメント。今回の脆弱性報告レポートの公開について「こうしたレポートが公開されたことは、課題認知の助けとなる」と評価している。
npmプロジェクトでは、現在セキュリティベンダーの協力の下、セキュリティスキャンやリスク軽減サービスの導入を準備中だとしている。また、publishに二要素認証を導入する案も検討しているという。
ただし、どんどんと登場するソフトウェアに対して、商用サービスで展開するスマホアプリのように検査するのは不可能だとしており、「npmは、レジストリに登録されているパッケージが安全であることを保証できない。もし、皆さんが悪意あるコードをレジストリに見つけたら、サポートに連絡してくれればテイクダウンする」とコメントしている。
パッケージマネジャーは便利なツールであり、レジストリに公開されているものの多くは、オープンソースソフトウェアとして善意で提供されている。利用者側は、そのコンセプトを理解して注意深く利用し、ユーザーコミュニティーにも貢献する必要がある。
Copyright © ITmedia, Inc. All Rights Reserved.