2021年12月18日、Log4j 2.16.0 バージョンで動作する CVE-2021-45105 の脆弱性が追加で公開された。(CVSS 7.5)
1. 脆弱な製品のバージョン
Log4j 2.0-beta9 ~ 2.16.0 バージョン
2. 脆弱性を利用した攻撃の手法
脆弱性を利用した攻撃は Log4j を使用するアプリケーションで layout pattern とスレッドコンテキスト機能が使用される場合に発生するケースがある。脆弱な環境と、この環境を攻撃する手法は以下の通りである。
1) 脆弱な環境
[設定]
アプリケーションが layout pattern でスレッドコンテキストをクエリする機能を使用するように設定されている
[log4j2.properties 設定の一部]
appender.console.type = Console
appender.console.name = console
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = !${ctx:loginId}! %m%n
rootLogger.level = ALL
rootLogger.appenderRef.file.ref = console
[ソースコード]
layout pattern で参照するスレッドコンテキストの値を外部から入力された値で保存する
アプリケーションのソースコードの一部
ThreadContext.put(“test”, “${::-${ctx:loginId}}”);
logger.error(“Test”);
2) 脆弱性を利用した攻撃
攻撃者が X-Api-Version ヘッダに特定の文字列を含むリクエストを対象のサーバーに送信する場合、log4j ではログを保存するプロセスで Stack OverFlow エラーが発生し、そのプロセスが終了する可能性がある。
# curl server -H ‘X-Api-Version: ${${::-${::-$${::-$}}}}’
3. 脆弱性の影響
Log4j のサービス拒否(Dos:Denial Of Service)の脆弱性によりサービス障害を引き起こす可能性があるが、攻撃手法において説明した環境が構築されていなければ脆弱性を利用した攻撃は行われない。
また、log4j-core-*.jar ファイルがなく log4j-api-*.jar ファイルのみを使用する場合は、脆弱性の影響を受けない。
4. 脆弱性に対するセキュリティパッチ
2021年12月18日、Log4j 2.17.0 のパッチが提供された。
Log4j 2.17.0 以上の最新バージョン (Java8 以上)
https://logging.apache.org/log4j/2.x/download.html
* Java 7 バージョン:提供予定
5. 脆弱性の緩和
脆弱性に対するパッチ適用が困難な場合、以下の方法により臨時の措置を講じる。
– PatternLayout から ${ctx:loginId} または $${ctx:loginId} を削除、もしくは(%X, %mdc, or %MDC)に変更する。
6. 参考情報
[1] CVE-2021-45105 (英文)
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-45105
[2] Apache Log4j Security Vulnerabilities (英文)
https://logging.apache.org/log4j/2.x/security.html
[3] Log4j_dos_CVE-2021-45105 (英文)
https://github.com/cckuailong/Log4j_dos_CVE-2021-45105
[4] Denial of Service (DoS)Affecting org.apache.logging.log4j:log4j-coreOpen this link in a new tab package, versions [2.0-alpha1,2.17.0) (英文)
https://security.snyk.io/vuln/SNYK-JAVA-ORGAPACHELOGGINGLOG4J-2321524
関連 IOC および詳細な解析情報は、AhnLab の次世代脅威インテリジェンスプラットフォーム「AhnLab TIP」サブスクリプションサービスを通して確認できる。