ソフトウェア工学研究の日々

ソフトウェア工学の学術研究を紹介しています。ソフトウェア開発に関する調査と実験が大好きです。

ライブラリのセキュリティ問題がアプリケーションに影響しないケースも多い

ライブラリの名前とバージョン番号を指定するだけで自動的にダウンロード等を完了してくれる依存性管理ツールのおかげで、どのライブラリを使っているかが機械的にチェックできるようになり、古いバージョンのライブラリを使っているとセキュリティ問題のあるライブラリを使わないように、と自動的に警告を出すこともできるようになりました。

一方で、セキュリティ問題があるといっても、問題があるのはライブラリの特定の機能に限られるため、すべての利用者がその影響を受けるわけではありません。たとえば画像ファイルを読み書きするライブラリに特殊な細工をしたファイルを読ませると不正な動作をすることが分かったとき、そのライブラリを画像ファイルを書き出すためだけに使っているアプリケーションは影響を受けないことになります。現在のセキュリティ警告の仕組みは、残念ながら、そこまでは考慮してくれません。

そこで、セキュリティ問題が存在することが分かっているライブラリのバージョンを使っていて、かつ、その問題の影響を受けないケースがどれだけあるか、JavaScript で npm によって依存ライブラリを管理しているプロジェクトに対して小規模なサンプル調査を行ってみました。全文は以下のようなタイトルで発表しています。

Rodrigo Elizalde, Raula Kula Gaikovina, Bodin Chinthanet, Takashi Ishio, Akinori Ihara and Kenichi Matsumoto: Towards Smoother Library Migrations: A Look at Vulnerable Dependency Migrations at Function Level for npm JavaScript Packages

 この調査では、ライブラリのバージョン更新履歴(ソースコードの差分)からセキュリティ問題がどの関数にあったかを特定し、関数の呼び出し経路を調べて、その関数を実際に呼び出す可能性があるかどうかを確認しました。

その結果、73.3% はセキュリティ問題の報告されているバージョンのライブラリを使用しているが、その問題を含む関数に対する呼び出しの経路は存在していませんでした。ライブラリのセキュリティ問題に関する話題でよく登場する「〇〇%のアプリケーションがいまだに古いライブラリを使っている」といった文言は、影響を過大に喧伝してしまっていることになります。

ただし、セキュリティ問題の影響を受けるような機能を使っていないうちにライブラリを更新しておくほうが、セキュリティ修正がアプリケーションに影響を与えないと分かっているので、更新作業自体にはコストがかからない可能性もあります。何かの拍子に開発者がその機能を使ってしまう可能性もありますので、更新を急ぐ必要はないとは言えるものの、更新がまったく必要ではないとまでは言い切れません。ライブラリの更新に伴うコストと更新しない場合のリスクをうまく見積もる(あるいは更新コストを下げる)技術の研究が今後も必要なのだと考えています。