JPCERTコーディネーションセンター(Japan Computer Emergency Response Team Coordination Center:JPCERT/CC)は12月11日、「Apache Log4jの任意のコード実行の脆弱性(CVE-2021-44228)に関する注意喚起」において、Java用のオープンソースのロギングライブラリである「Apache Log4j 2.x(以下、「Log4j 2」と表記)」に深刻な脆弱性が報告されているとして注意喚起を行った。

この脆弱性を悪用されると、リモートの第三者によって対象のシステム上で任意のコードを実行される危険性がある。すでにこの脆弱性の悪用を試みる通信を観測しており、迅速な対応が必要とされている。該当する脆弱性はCVE-2021-44228として追跡されており、開発元からは次のページでアナウンスが行われている。

  • Apache Log4j Security Vulnerabilities - Fixed in Log4j 2.15.0

    Apache Log4j Security Vulnerabilities - Fixed in Log4j 2.15.0

Log4j 2には「Lookup」と呼ばれる機能があり、これを利用するとログの出力時にランタイムに対して情報を出力することが可能となる。今回問題になっているのはそのうちの「JNDI Lookup」と呼ばれる機能で、これはネットワークを介してリモートから値を取得できるというもの。JNDI LookupはデフォルトでLDAP(Lightweight Directory Access Protocol)をサポートしており、外部のディレクトリサービスのファイルにアクセスできるようになっている。

したがって、悪意を持った第三者がネットワーク上にLDAPサーバを構築してJavaクラスファイルを配置し、そのURLをJNDI Lookupを利用してLog4j 2に送信すると、Log4j 2ではそれをログとして記録するためにクラスファイルを読み込んでJavaランタイムによって実行してしまう。結果として、第三者は認証などを必要とせずに任意のコードを実行することが可能となる。

Apache Log4j 2.15.0より前の2.x系のバージョンがCVE-2021-44228の影響を受けるとされている。Apache Software Foundationからは修正版としてApache Log4j 2.15.0がリリースされている。2.15.0では、KJNDI Lookup機能がデフォルトで無効にされた。

脆弱性の深刻度を表すCVSS v3のベーススコアは最高の10.0とされており、早急に対策を施す必要がある。Log4j 2.15.0にアップデートできない場合には、次の回避策が提示されている。

  • Log4j 2を実行するJava仮想マシンの起動時に、オプションとして「-Dlog4j2.formatMsgNoLookups=true」を指定する、またはLog4j 2を使用しているシステムで、環境変数「LOG4J_FORMAT_MSG_NO_LOOKUPS」を「true」に設定する(Log4jバージョン2.10およびそれ以降)
  • JndiLookupクラスをクラスパスから削除する(Log4jバージョン2.10より前)

Log4j 2はさまざまなフレームワークやライブラリで内部的に利用されているため、もし直接Log4j 2を使用していないプロジェクトでも、CVE-2021-44228の影響を受ける可能性がある。Javaを使用しているアプリケーションでは、直接的にLog4j 2を利用しているかどうかだけでなく、依存しているフレームワークやライブラリが内部的にLog4j 2を利用しているかどうかも確認する必要があるだろう。具体的な影響範囲や直接の被害状況などの全容はまだ明らかになっていないが、引き続き続報に注意し、もし影響を受けることが判明した場合には速やかに対処を行うことが推奨される。

なお、当初Apache Log4j 1.x系のバージョンも影響を受けるのではないかという懸念の声が上がっていた。しかしLog4j 1.xの開発者によれば、Log4j 1.xはLookup機能を提供しておらず、(当初懸念されていた)JMS(Java Message Service)を利用したイベントの送信機能でも文字列のシリアライズは行わないため、同様の問題は発生しないという。

  • Apache Log4j 1.x系には影響しないことを指摘した開発者のツイート

    Apache Log4j 1.x系には影響しないことを指摘した開発者のツイート

ただし、Log4j 1.x自体はすでにサポートが終了しているため、本件に関わらず他のライブラリへの移行が推奨されている。