KAKEHASHI Tech Blog

カケハシのEngineer Teamによるブログです。

renovateとDependabotの連携による脆弱性管理

この記事は秋の技術特集 2024の5記事目です。

カケハシではライブラリの更新検知にrenovateを利用しています。renovateは実行スケジュールの設定やパッチのグルーピングができるなどの機能が便利ですが、脆弱性データベースを持っていないため、検知された更新が脆弱性対応か否かがわかりません。 最終的にはすべて対応するべきですが、対応の優先順位づけのためどれが脆弱性対応パッチなのかわかると便利です。

GitHubでrenovateを使っている場合、Dependabot Alertsと組み合わせることで、Dependabotの脆弱性情報を利用してrenovateでも脆弱性を検知できます。

Dependabotシリーズについて

Dependabotを有効化すると、renovateとDependabotで二重にPRが作られるのでは?と心配されるかもしれませんが、その問題はありません。費用もかかりません。(Dependabotが作成したPRのCIには課金されます) Dependabotは下記に述べる複数の機能からなるサービスです。

  • Dependabot Alerts
    • リポジトリで使われているパッケージの脆弱性情報を受信する機能(脆弱性情報を検出するだけでPRを作成する機能はない)
    • 今回有効にするのはこれ
  • Dependabot Security Updates
    • Dependabot Alertで受信した脆弱性を修正するアップデートのPRを作成する機能
    • 脆弱性を修正する最小限のアップデートだけ行い、脆弱性修正ではないバージョンはPRを作らない
  • Dependabot Version Updates
    • 脆弱性の有無にかかわらず、パッケージを最新に保つPRを作成する機能

Dependabot Alertsを有効にすると、リポジトリ内のパッケージの脆弱性が検出され、Security Dashboardから脆弱性リストが確認できるようになります。 実際にPRを作成するDependabot Security Updates, Dependabot Version Updatesを有効化しなければ、DependabotはPRを作成しません。カケハシは先述の通り、更新検知にrenovateを使っていますので、Dependabot Alertsだけ有効にして他は無効のままにしています。

renovateとDependabotを組み合わせる

renovateはDependabot Version Updatesの代替となる機能ですが、Dependabot Alertsを有効化することでDependabot Security Updates相当の機能が使えるようになります。 リポジトリでDependabot Alertsを有効化すると、自動的にrenovateがセキュリティ対応PRを作成し始めます。renovateのデフォルト設定でDependabot Alerts連携が有効になっているので、renovateの設定変更は不要です。

Dependabotと組み合わせた場合のrenovateの挙動

Dependabot Alerts由来のrenovate PRは通常のrenovate PRと以下の違いがあり、renovate.jsonの一部設定項目に影響されません。詳細はrenovateのConfiguration Optionsドキュメントを参照してください。

  • PR名の末尾に[SECURITY]がつく
  • prConcurrentLimitを無視する(既存のrenovate由来PRがいくつあってもPRが生成される)
  • scheduleを無視する(検出され次第すぐにPRが生成される)

prConcurrentLimitを無視するため、パッケージ更新が追いついていないリポジトリでは大量のPRが作成される可能性があります。自動マージを有効にしている場合は、デフォルトブランチに大量の更新が発生するため注意が必要です。

Dependabot Alertで脆弱性の可視化が可能に

renovateが脆弱性対応を明示してPR作成してくれるという当初の目的は達成されました。 そして、Dependabot Alertsを有効化したことで、GitHubのSecurity Dashboardから脆弱性の数が確認できるようになりました。組織管理者なら全リポジトリの脆弱性の数が深刻度別に確認できるので、対応が滞っているチームへの対応ができます。また、影響範囲が大きく深刻度が高い脆弱性の全体通知などにも利用できます。組織管理者でなくても、自分が担当しているリポジトリの脆弱性対応状況をDashboardから確認できるので、スプリントごとに脆弱性対応状況を確認するといった運用が可能です。

利用開始の注意点

設定を有効化したとき、いくつか考慮していなかった問題が発生しました。いずれも軽微なものでしたが、有効化される場合にはお気をつけください。

Dependabot Alertsを有効化すると自動的にPRが作成される

前述の通り、未対応の脆弱性アップデートがあればDependabot Alertsを有効化次第すぐにPRが作成されます。付随するCIも動くので、同時実行数に制限をかけていたり、GitHub Actionsのセルフホストランナーを使っている場合などは事前に開発チームと調整しておくべきでしょう。

大量にPRが作成される可能性がある

先述の通り、脆弱性アップデートはprConcurrentLimitを無視しますので、脆弱性があるパッケージがあればその数だけPRが作成されます。パッケージ更新が間に合ってないリポジトリでは大量のPRが作成される可能性が高いため、事前にその旨伝えておきましょう。

実験用リポジトリに注意する

実験用リポジトリや開発が終了したリポジトリは、リポジトリの特性上大量に脆弱性が検出される可能性があります。脆弱性が検知されても大きな問題はありませんが、ムダなCI実行で費用がかかります。Dependabot Alertsを設定する前に使っていないリポジトリはアーカイブしましょう。

脆弱性の深刻度は考慮されない

renovateがPRを作成する際、脆弱性の深刻度は考慮されません。実影響がないものでも作成されるので、本当に対応が必要かどうかはPRのコメントに記載される脆弱性の概要から判断することになります。深刻度に応じてPRのタイトルを変えたり、作成タイミングを調整するといった対応ができたら良かったのですが、残念ながらそういった機能は今のところないようです。

参考リンク

担当:松浦