0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[PoC]Github ActionsとDependabotでライブラリ脆弱性チェックをCIに組み込む

Last updated at Posted at 2025-06-21

はじめに

  • 基本的に無料で試せます。
  • 間違っている部分があれば教えてください。
  • 「もっとこうやるといいよ」や「こんなのもあるよ」と教えてもらえると喜びます

今回やること

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

image.png

プロジェクトのルートディレクトリに .githubディレクトリを作る

dependabotの設定

.githubディレクトリにdependabot.ymlを作る
image.png

内容はこんな感じ

# 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でこんなのが出てたら成功
    image.png

脆弱性チェックに引っかかってみる

  • build.gradleに脆弱性が検知されているライブラリに依存してみる
implementation 'org.apache.logging.log4j:log4j-core:2.13.3'

こんな具合に脆弱らしい

Apache Log4jが動作するサーバーにおいて、遠隔の第三者が本脆弱性を悪用する細工したデータを送信することで、任意のコードを実行する可能性があります。

大丈夫だと思いますが、実サービスには絶対使わないでください。

  • 再度feature-dependabotブランチをpushしてmainブランチへのPRを作成
  • こんな感じでworkflowがfailして、PRも作られていればOK
    image.png
    image.png
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?