Log4Jに脆弱性 Spring Bootは大丈夫か

Log4Jに関する脆弱性が世界的に問題になっています。

Log4Jに脆弱性 Spring Bootは大丈夫か

2021/12/10にLog4Jの最初の脆弱性が発表されてから、日を追うごとに情報が上書きされていっていますね。なので、ちょっと整理しておこうと思います。

ここでは 自社で開発・運用するシステムでLog4Jを利用している方 のために情報をまとめておきます。


発表されている脆弱性

  • CVE-2021-44228(2021/12/10発表):
    悪意ある第三者が任意のコードを送りつけ実行可能な極めて重篤な脆弱性。v2.15.0で修正。
  • CVE-2021-45046(2021/12/14発表):
    一部設定の使用時、v2.15.0の修正が無効という脆弱性。v2.16.0で修正。
  • CVE-2021-45105(2021/12/18発表):
    一部設定の使用時、v2.16.0の修正でもDoS攻撃の可能性が残る脆弱性。v2.17.0で修正。

緊急を要するCVE-2021-44228についてはv2.15.0で修正されています。とはいえ、すでに将来リスクが生じる恐れのあるとのことで、最新版はv2.17.0となっています。v2.15.0やv2.16.0への更新をおこなったとしてもv2.17.0へ更新することをおすすめします。

利用しているLog4Jのバージョンを確認する

問題となっているのはLog4Jのバージョン2系です。バージョン1系は脆弱性の影響を直接受けないと発表されています。すでにEOLを迎えているバージョン1系を利用しているシステムは以降の記事は無視してもらって大丈夫です。

筆者が保守・運用しているシステムでもいくつかはLog4Jバージョン1系のものがあります。具体的には log4j-1.2.14.jar とか log4j-1.2.17.jar とかのライブラリを利用している場合です。

まあ、サポート終了しているライブラリをいつまでも利用しているのは推奨されませんけど、とりあえず対象外となります。

現在利用中のバージョンが v2.0.0〜v2.14.X、v2.15.0-rcX(v2.12.2を除く) の場合には最新版へのアップグレードが必要となります。具体的には log4j-core〜.jar のようなライブラリを利用している場合です。

詳しくはIPAのサイトで確認できます。

https://www.ipa.go.jp/security/ciadr/vul/alert20211213.html

SpringBootでの影響

SpringBootではLog4Jが含まれますが、デフォルト設定の場合はlogbackで動作するため本脆弱性の影響を受けないとSpring側から公式発表されています。

Log4J2 Vulnerability and Spring Boot

Spring Boot users are only affected by this vulnerability if they have switched the default logging system to Log4J2. The log4j-to-slf4j and log4j-api jars that we include in spring-boot-starter-logging cannot be exploited on their own. Only applications using log4j-core and including user input in log messages are vulnerable.

「SpringBoot ではデフォルトのログ実装から Log4J2 へ明示的に変更しない限り、この脆弱性による影響を受けない。 log4j-coreを利用、かつユーザー入力をログメッセージに含む場合のみ影響を受ける」

つまり、Spring Bootのデフォルトログシステムであるlogbackを、あえてLog4J2に切り替えた場合にのみ、この脆弱性の影響を受けるということになります。

Mavenで設定変更する方法

影響はなくてもLog4J2依存関係をより早くアップグレードしておいた方がいいとのこと。ここではMavenでの設定変更方法を書いておきます。

親POMを使用している場合は、log4j2.versionプロパティを設定しましょう。

<properties>
  <log4j2.version>2.17.0</log4j2.version>
</properties>

「spring-boot-dependencies」BOMをインポートする場合は「dependencyManagement」セクションを追加します。

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-bom</artifactId>
      <version>2.17.0</version>
      <scope>import</scope>
      <type>pom</type>
    </dependency>
    ... other dependencies including spring-boot-dependencies
  </dependencies>
</dependencyManagement>

Gradleは使ってないので公式サイトで確認ください。

まとめ

Log4Jに関する脆弱性について紹介しました。

Javaのログライブラリとして広く認知されてきたLog4J2。このような世界的に実績ある製品が脆弱性を発生するとなると、さすがに業界は衝撃を受けますね。

筆者もSpring Bootをベースとしたアプリケーションの保守・運用をいくつかしています。それだけにSpring側から本脆弱性の影響を受けないと公式発表があったことで一安心しました。

具体的にはSpring Boot v2.2.2に対して、log4j-core-2.12.1.jarが含まれていました。これはアウト。なのでMavenでv2.17.0へ設定変更して対応しました。動作検証でも不具合は出ていませんが、テストは十分に実施したほうがいいでしょう。

ひとまずLog4J v2.17.0以降を利用していれば脆弱性の影響は受けないとされていますが、今後も新たな脆弱性が報告される可能性もあるので、引き続き最新情報を定期的に確認していく必要がありますね。

おつかれさまでした。

この記事がお役に立ちましたら シェア をお願いいたします。