🩹

Gradle での Log4j の脆弱性対応方法

2021/12/14に公開

初投稿です。

Log4j について

ロギングAPIというもので、コンソールへの出力を制御するためのライブラリとなります。
先日、任意のコードを実行できてしまう脆弱性 CVE-2021-44228 が発表されたためそれを改善するための方法です。
編集時点で 2.17 がリリースされているためそちらを採用します。
2.16 ではデフォルトでJNDIを無効にするように変更されており、2.17 ではDoS攻撃を引き起こす脆弱性が修正されています。
変更ログ: https://logging.apache.org/log4j/2.x/changes-report.html#a2.16.0

脆弱性の調査・対応方法

① プロジェクトのルートディレクトリで gradlew.bat dependencies を実行します。
※ macOS、Linuxの場合は gradlew dependencies と実行してください。
Ctrl+F で検索ウィンドウを開き、log4j と入力します。
  検索結果で何も出てこない場合は、Log4j が利用されていないため対応終了です。
※ 検索機能がないコンソールの場合、テキストエディタに出力された内容をコピー&ペーストして
  そこで検索をかけてください。

もし Log4j を利用している場合

build.gradle(.kts)dependencies ブロックに以下の依存関係を追加します。

build.gradle
  // プロジェクトで利用する Log4j のバージョンをまとめて変更
  implementation platform('org.apache.logging.log4j:log4j-bom:2.17.0')
    
  // 念の為依存関係を追加して Log4j のバージョンを上げる
  implementation group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.17.0'
  implementation group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.17.0'
build.gradle.kts
  // プロジェクトで利用する Log4j のバージョンをまとめて変更
  implementation(platform("org.apache.logging.log4j:log4j-bom:2.17.0"))

  // 念の為依存関係を追加して Log4j のバージョンを上げる
  implementation("org.apache.logging.log4j", "log4j-core", "2.17.0")
  implementation("org.apache.logging.log4j", "log4j-api", "2.17.0")

④ 再ビルドしてプロジェクトのルートディレクトリで gradlew.bat dependencies を実行します。
※ macOS、Linuxの場合は gradlew dependencies と実行してください。
Ctrl+F で検索ウィンドウを開き、log4j と入力します。
  検索して出てきたものが以下のどちらかであれば対応終了です。
※ 検索機能がないコンソールの場合、テキストエディタに出力された内容をコピー&ペーストして
  そこで検索をかけてください。

プロジェクトで利用する Log4j のバージョンがまとめて変更されているか

  org.apache.logging.log4j:log4j-bom:2.17.0

依存関係で利用されている Log4j のバージョン(左側)がプロジェクトで利用されているバージョン(右側)を採択しているか

  org.apache.logging.log4j:log4j-api:2.x.y -> 2.17.0

文献

https://irof.hateblo.jp/entry/2021/12/10/180215
https://zenn.dev/yuitosato/articles/ed283add200e2a

Discussion