2021-12-12

【Log4j】Javaで作成されたほぼ全てのWEBサービスが影響を受ける「Log4Shell」脆弱性(CVE-2021-44228)

投稿者: KuRo

参考リンク
https://www.jpcert.or.jp/at/2021/at210050.html
https://www.randori.com/blog/cve-2021-44228/
https://www.lunasec.io/docs/blog/log4j-zero-day/
https://aws.amazon.com/jp/security/security-bulletins/AWS-2021-005/
https://search.yahoo.co.jp/realtime/search?p=CVE-2021-44228&ei=UTF-8&ifr=tl_sc

この記事で紹介していること

Log4j に脆弱性が見つかる

Log4j とは、Java でログを記録するための機能です。
極めてシェアが高く、Javaで作成するWEBサービスのすべてがこれを使っていると言ってもいいくらいメジャーです。

明示的に使うつもりがなくても、Javaのフレームワークやライブラリを使っていれば、ほぼ Log4j を参照していると思われます。

何が起きるか

通常 Log4j にログを記録させる内容は、利用者がどんな要求をしたか、です。
この要求に含まれる文字に、特定の文字が含まれたとき、次のようなことが起きます。

Log4j 脆弱性で何が起きるか
  1. Log4jの脆弱性を狙った悪意のある要求をサーバに送信
  2. Log4j が上記入力値をログに記録するとき、入力値を解釈。悪意あるサーバにアクセスされる
  3. 悪意あるサーバの悪意あるプログラムをダウンロードさせられます
  4. あなたのサーバ内で、上記悪意あるプログラムが実行されます
  5. 悪意あるプログラムは好き放題

Log4j脆弱性 CVE-2021-44228 概要

対応方法

  1. Log4j 2.15.0 以上に更新(ただし、Java8必須)
  2. log4j.xml に 【%m】があったら、【%m{nolookups}】に書き換える(Log4j 2.7 以上なら対応可:参考リンク
  3. AWSならWAFのマネージドルール「Log4JRCE」を適用する(参考リンク

何もしなくても大丈夫なケース

いまのところ、以下のケースは大丈夫そう

Log4j 脆弱性 大丈夫そうな利用ケース
  • Log4jを使っているサーバが、インターネットに接続できない場合(ただし、悪意あるサーバが内部にあったらアウト)
  • Log4j のバージョンが 1 (ただし、他の脆弱性が放置されており、対応されない)

まとめ

この脆弱性の発見は、Log4jのシェアが高いことのほか、2.15 への更新には Java8 以上への更新が必要なことも、厄介です。
複数の対応方法がありますが、恒久対応として、最新版への更新がいつでもできるようにしたほうがよいですね。