BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース GitHubのPRを自動生成して脆弱性を修正するDependabot

GitHubのPRを自動生成して脆弱性を修正するDependabot

ブックマーク

原文(投稿日:2019/02/04)へのリンク

Dependabotは,GitHub Security Advisory APIを活用することで,依存関係のトラッキングを支援し,プログラムのセキュリティを監視し,潜在的な脆弱性を解決するためのPRを自動生成することによって可能な限り簡単かつ確実な除去を実現する。

創設者のひとりであるGrey Baker氏によると,Rubyアプリケーションが100以上の依存関係を引き込むのは珍しいことではない。JavaScriptでは700以上と,その数はさらに多くなる。問題をさらに複雑にしているのが,開発者が意識的に利用を決めるなどによって直接的な依存関係として現れるのは,これら700の依存関係のごく少数,5パーセント以下に過ぎないという点だ。

これら依存関係の大部分は"推移的",すなわち直接的なリンクやアプリケーションからの利用がなく,ほかの依存関係から引き込まれたものなのです。

アプリケーションが引き込む推移的な依存関係の数と,それぞれの言語が使用するパッケージレジストリの背後にある思想との間には,明らかな関連性がある。NPNが非常に大規模なリポジトリであることはよく知られた事実だが,それは主に,多くのパッケージに依存して最小限の機能を実現する,小さなパッケージを作成する傾向があるためだ。この事実は数年前に,文字列の左詰めに使用される小さなパッケージがNPMから削除された結果,2億を超える他のパッケージやアプリケーションが使用不能になったことで注目を浴びるようになった。逆の例として,Pythonエコシステムは,この点がはるかに健全であるように思われる。推移的な依存関係の数が,平均すると,直接的な依存関係の数と同じ程度になっているのだ。

数十から数百という依存関係を持つ場合には,セキュリティ修正の面から,それらを最新に保つことが重要なタスクになる。GitHubがSecurity Alertを導入したのはそのためで,Common Vulnerabilities and Exposures (CVEs)からのライブラリ脆弱性がリポジトリから検出されると,それをリポジトリ管理者に通知する。これによって管理者は,安全なバージョンにアップグレードすることによって迅速に対応し,脆弱性の修正を行うための貴重な"注意喚起(heads up)"を得ることができる。残念ながら,脆弱性を修正するためのバージョンを識別して,変更を管理するためのPRを作成するという作業は,管理者に委ねられている。

Dependabotはこの部分に関与するもので,GitHub上にPRを自動生成して,アップデートの必要な依存関係を分離する。これにより,潜在的脆弱性の監視と解決を行うプロセスを継続的インテグレーション(CI)ワークフローに統合して,アプリケーションがそのPRによって動作不能にならないことの保証が可能になる。継続的インテグレーションパイプラインを使用しないプロジェクトの場合,Dependabotは,指定されたアップデートに対するCIパス率を公開する。この値は同じアップデートを実施したすべてのプロジェクトから算出されたもので,例えば,そのアップデートがCIテストに失敗したプロジェクトの数が3パーセントに過ぎない,といったことが分かる。

DependabotはGitHub Marketplaceで入手可能だ。

この記事に星をつける

おすすめ度
スタイル

BT