Gradle での Log4j の脆弱性対応方法
初投稿です。
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
ブロックに以下の依存関係を追加します。
// プロジェクトで利用する 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'
// プロジェクトで利用する 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
文献
Discussion