はじめに
- 基本的に無料で試せます。
- 間違っている部分があれば教えてください。
- 「もっとこうやるといいよ」や「こんなのもあるよ」と教えてもらえると喜びます
今回やること
main(default)ブランチへのPRをトリガーにdependabotで脆弱性診断する。
簡単にPoCできるので興味ある人は試してみてください。
defaultブランチじゃないとうまく動作しませんでした
dependency-reviewはデフォルトブランチにある依存関係との差分をチェックするらしい
手順
適当なgradleプロジェクトを作る
https://start.spring.io/
適当に依存関係をdependenciesに追加しておくとなお良い。
適当にgithub リポジトリを作る
こちらも適当でいいが、無料で試したかったのでpublicリポジトリにする。
privateリポジトリでやりたかったら、「GitHub Advanced Security」(有料)が必要になる。
リポジトリのSetting / Advanced Securityで以下をEnabledにする。
- Dependency graph
- Automatic dependency submission
- Dependabot alerts
プロジェクトのルートディレクトリに .githubディレクトリを作る
dependabotの設定
.githubディレクトリにdependabot.ymlを作る
内容はこんな感じ
# dependabot.yml
version: 2
updates:
- package-ecosystem: "gradle" # 今回はgradleプロジェクトでやるのでgradle
directory: "/" # build.gradleがあるディレクトリのパスを入れる 今回はルート
schedule:
interval: "daily" # 依存関係の更新をチェックする頻度
open-pull-requests-limit: 10
commit-message:
prefix: "by dependabot:"
target-branch: "main" # Dependabotが依存関係の更新PRを作る向き先ブランチ
workflow作る
- .githubディレクトリ下にworkflowsディレクトリを作る
- workflowsディレクトリにdependency-review.ymlを作る
内容はこんな感じ
# dependency-review.yml
name: 'Dependency Review'
on:
pull_request:
branches:
- 'main' # トリガーになるブランチ
jobs:
dependency-review:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Dependency Review
uses: actions/dependency-review-action@v4 # さっき作ったやつ
with:
fail-on-severity: low
いざ、実験
- とりあえずmainブランチをpush
- 適当なブランチ(今回はfeature-dependabotというブランチ)を作る
- feature-dependabotブランチで適当に変更を加えてpushする
- main <- feature-dependabotのPRを作る
- dependency-reviewが走ってくれる
- Dependency Reviewステップでdependency-review-actionが走り、脆弱性チェックされる
- PRでこんなのが出てたら成功
脆弱性チェックに引っかかってみる
- build.gradleに脆弱性が検知されているライブラリに依存してみる
implementation 'org.apache.logging.log4j:log4j-core:2.13.3'
こんな具合に脆弱らしい
Apache Log4jが動作するサーバーにおいて、遠隔の第三者が本脆弱性を悪用する細工したデータを送信することで、任意のコードを実行する可能性があります。
大丈夫だと思いますが、実サービスには絶対使わないでください。