close search bar

Sorry, not available in this language yet

close language selection

[CyRC脆弱性解析]Apache log4j Java ロギングライブラリー のリモートコード実行の脆弱性

Masato Matsuoka

Dec 16, 2021 / 1 min read

よく使われているJavaロギングツールのLog4jに、危険なゼロデイのエクスプロイト(悪用可能なコード)が発見されました。

Apache Log4j/Log4j2 は広くJavaコミュニティで利用されているアプリケーションのロギングツールです。Log4jはJavaコミュニティにおいてデファクト(事実上の標準)と言ってよいでしょう。それはほとんどのJavaアプリケーションがログのインターフェースとして用いているということでもあります。

NVDは、この脆弱性にCVE-2021-44228を割り当てました。影響のあるApache Log4jのバージョンは2.15までの全ての2.xです。これらのバージョンではJava Naming and Directory Interface (JNDI) という機能が、攻撃者の制御下にあるLDAPやJNDIのエンドポイントに対して保護されていません。したがって、JNDIのメッセージ置換の機能が有効な場合、攻撃者は制御下のLDAPサーバーからコードを送信することで リモートで任意のコードを実行することができます。

シノプシス サイバーセキュリティ・リサーチセンター(CyRC)は、この脆弱性に関して、エクスプロイトのPoCも含めてBlack Duck® Security Advisory (BDSA)を発行してCVSSスコアを9.4としました。この情報がKBに加えられたことで、BlackDuckで管理しているアプリケーションにおいて、この脆弱性の有無を再スキャンすることなく速やかに確認することが可能になります。トリアージや検証、緩和策の導入を、より容易に行うことができるわけです。

BDSAレコードからの抜粋

Apache Log4jは多くの一般的なサービスで利用されています。そして、それらのサービスは、Lightweight Directory Access Protocol (LDAP) プロトコルによるJava Naming and Directory Interface (JNDI) を通した不正なアクセスに対して脆弱なため、攻撃者はリモートで特別に細工をしたメッセージをLog4jに送信するだけで任意のJavaコードを実行することが可能なのです。

回避方法

Apache Log4j Security Vulnerability の投稿を参照:

Log4j 2.x 緩和策:下記のいずれかの方法による

  • Java 8(あるいはそれ以降)のユーザーは、バージョン2.16.0.にアップグレードする
  • Java 7を利用する必要のあるユーザーは、バージョン2.12.2が利用可能になり次第アップグレードする
  • いずれの場合であれ、JndiLookup class を classpath: zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class から削除する

留意して欲しいのは log4j-core JAR ファイルのみがこの脆弱性の影響を受けるということです。log4j-api JAR ファイルを log4j-core JAR ファイルと一緒に利用していない場合は、この脆弱性の影響を受けません。

2021年12月15日時点のアップデート

BDSA-2021-3779/ CVE-2021-45046

BDSA-2021-3779 の説明

Log4j はDenial-of-Service (DoS) に対して脆弱です。この脆弱性は、CVE-2021-44228の修正が不完全だったために発見されました。このように Log4jのデフォルトとは異なる設定において、JNDI lookupへの不正な入力によって攻撃者はDoSを発生させることが可能となります。

この脆弱性を悪用した攻撃を成功させるためには、Thread Context Map(MDC)入力へのアクセスと、Log4jに不正なJNDI検索パターンを入力する必要があります。

Log4j-core JAR ファイルのみがこの脆弱性の影響を受けます。アプリケーションがlog4j-api JARファイルをlog4j-core JARファイルと一緒に使用していない場合は影響を受けません。

注記:Log4j 2.15.0 は JNDI LDAP lookups をデフォルトで localhost のみに制限します。以前公開された緩和策ではシステムプロパティのlog4j2.noFormatMsgLookup の値を true に設定するよう推奨していましたが、この脆弱性には効果がありません。この緩和策を適用すると、攻撃者はCVE-2021-44228の脆弱性の緩和策を回避することができます。

Apacheによる説明
CVE-2021-45046: Apache Log4j2 Thread Context Message Pattern and Context Lookup Pattern vulnerable to a denial of service attack.
深刻度:中
CVSS ベーススコア:3.7 (AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:L)
影響を受けるバージョン:2.0-beta9 から 2.12.1 および 2.13.0 から 2.15.0 までの全バージョン

CVE-2021-44228 を修復するための Apache Log4j 2.15.0 は特定のデフォルト外の設定において不完全だったため、この脆弱性が発見されました。この脆弱性は、これにより、攻撃者は、ログ構成でコンテキストルックアップ(たとえば、$$ {ctx:loginId})またはスレッドコンテキストマップパターン(たとえば、$$ {ctx:loginId})を使用するデフォルト以外のパターンレイアウトを使用する場合に、スレッドコンテキストマップ(MDC)入力データを制御できます。 %X、%mdc、または%MDC)は、JNDIルックアップパターンを使用して悪意のある入力データを作成し、サービス拒否(DOS)攻撃を引き起こします。Log4j 2.15.0は、デフォルトでJNDI LDAPルックアップをローカルホストに制限します。 システムプロパティlog4j2.noFormatMsgLookupをtrueに設定するなどの構成に関連する以前の緩和策は、この特定の脆弱性を緩和しないことに注意してください。

シノプシスの支援方法

Black Duckソフトウェア・コンポジション解析(SCA)を利用することで、アプリケーションで使用されているオープンソースを特定し、カタログ化、そして継続的に新しい脆弱性が発見されたかどうかを監視できます。脆弱性が発見されれば、セキュリティアドバイザリーを全ての影響のあるお客様にお送りする前に、シノプシスのセキュリティリサーチャーのチームが取りまとめ、確認し、関連する情報を補強します。このように、アドバイザリーには、脆弱性を理解し、優先順位を付け、それぞれのアプリケーションの状況に応じた脆弱性の緩和策を含めるようにしており、通常は脆弱性が公開されてから数時間以内に発行しています。

関連する記事

Log4j (Log4Shell)を検知する:組織への影響を緩和する

Continue Reading

トピックを探索する