[GitHub] Dependabot alerts/Dependabot security updatesを使ってみる

2022.04.29

こんにちは、CX事業本部 IoT事業部の若槻です。

Dependabotを使うと、GitHubなどでホスティングしているソースコードに含まれるDependencyのバージョンアップや脆弱性の検出を簡単に行うことができるようになります。

GitHubにおいてDependabotは大きく分けて以下の4つの機能から成り立っています。

  • Dependency graph
  • Dependabot version updates
  • Dependabot alerts
  • Dependabot security updates

前回はDependabot version updatesを使ってみました。

今回は、GitHubでDependabot alertsおよびDependabot security updatesを使ってみました。

先にまとめ

Dependabotのそれぞれの機能でできることをまとめると次のようになります。

機能 できること
Dependency graph Dependencyをグラフ化する。
Dependabot version updates Dependency graphをもとにアップデートをチェックし、Pull Requestを自動作成する。
Dependabot alerts Dependency graphをもとに脆弱性を検出し、alertを作成する。
Dependabot security updates Dependabot alertsで作成されたalertを解決するためのPull Requestを自動作成する。

使ってみる

Dependabot alerts

GitHub RepositoryでDependabot alertsを有効にすると、プロジェクトが使用するDependency内の既知の脆弱性を検知してalertを作成してくれます。

対象のRepositoryで[Settings > Security > Code security and analysis]で[Dependabot alerts]を有効化します。(この時Dependency graphが無効の場合は合わせて有効化されます)

すると有効化されたことおよび脆弱性が検出されたことがメールで通知されます。

メール中のリンクを開くか、[Security > Dependabot alerts]を見ると、alertの一覧が確認できます。

ejsに関するalertを開いてみます。Dependencyに含まれている脆弱性の説明と、対処方法が記載されています。脆弱性情報はCVEのデータベースが使われています。

ここで[Create Dependabot security update]をクリック。すると脆弱性の対処を行うためのPull Requestの作成が開始されます。

完了したようです。[Review security update]をクリック。

作成されたPull Requestが開きます。これをMergeするとDependabot alertが解決されるとあります。

Mergeしてみました。ejsに関するalertは解決されたようです。

alertがcloseされ、openなalertの一覧からも消えました。

alertが作成されるタイミング

Dependabot alertは、GitHub Advisory Databaseに対象の脆弱性が登録された際に作成されるとのこと。

GitHub may send Dependabot alerts to repositories affected by a vulnerability disclosed by a recently published GitHub security advisory.

またGitHub Advisory Databaseへの脆弱性の追加はいくつかのソースを元に行われるようです。

We add vulnerabilities to the GitHub Advisory Database from the following sources:

  • The National Vulnerability Database
  • A combination of machine learning and human review to detect vulnerabilities in public commits on GitHub
  • Security advisories reported on GitHub
  • The npm Security advisories database

Dependabot security updates

続いて、GitHub RepositoryでDependabot security updatesを有効にすると、Dependabot alertsにより作成されたalertを解決するためのPull Requestを自動作成してくれます。

[Settings > Security > Code security and analysis]で、[Dependabot security updates]を有効化します。(この時Dependabot alertsが無効の場合は合わせて有効化されます)

alerts一覧を見ると、openされている3つ中2つでPull Requestが自動作成されました。

自動作成されたPull Requestを見ると、Dependabot alertsの時と同様の内容となっています。これをMergeすればalertが解決されます。

またPull Requestが自動作成されなかったalertを見ると、脆弱性のあるパッケージnth-checkをa non-vulnerable version(脆弱性のないバージョン)へDependabotがアップデートできないようです。このような場合には内容を精査して対処方針(別のパッケージを使うようにする、無視する等)を決める必要があります。

Dependabot version updatesを無効にしたい(Dependabot alerts/Dependabot security updatesのみ使いたい)場合

既定ではDependency graphを有効にするとDependabot version updatesによりすべてのDependencyをアップデートするためのPull Request自動作成が行われますが、Dependabot alertsおよびDependabot security updatesのみ使いたい場合もあるかと思います。

その場合はconfiguration fileでopen-pull-requests-limitプロパティを0に設定します。

.github/dependabot.yml

version: 2
updates:
  - package-ecosystem: "npm"
    directory: "/"
    schedule:
      interval: "daily"
    open-pull-requests-limit: 0

上記変更をCommitしてから、Dependabot Graphの画面を見ると、Pull Request自動作成が出来ないというメッセージが表示されています。

もしくは、Config fileを削除してしまいます。削除後もDependabot Graphの更新は引き続き行われ、Dependabot alerts/Dependabot security updatesの利用はできました。

おわりに

GitHubでDependabot alertsおよびDependabot security updatesを使ってみました。

Apache Log4jの件のように広く使われているOSSにクリティカルな脆弱性がある日突然見つかることがあります。このような脆弱性を利用したゼロデイ攻撃からシステムやアプリケーションを守るためにも、Dependabotなどを使用してすぐに脆弱性の検出やアップデートをすぐに行える仕組みを作っておくことが重要です。

以上