2021/12/10

Log4J2 にリモートコード実行の重大な脆弱性が見つかる

2021 年 12 月 10 日 Marc Laliberte 著

セキュリティ研究者は今週木曜、java アプリケーションに広く使用されるロギングライブラリ「log4j2」に、認証されていないユーザーがリモートからコードを実行(RCE)できる重大な脆弱性があることを公開しました。この CVE-2021-44228 は悪用が容易で影響があまりに大きいため、共通脆弱性評価システム(CVSS)において 10.0 の評価を受けています。バージョンにより差はありますが、log4j2 のすべてに脆弱性があります。いくつかのバージョン(2.10 より新しいものから 2.14.1まで)では、脆弱性のある機能を無効にするオプションがあり、最新のバージョン(2.15.0)ではデフォルトで無効になっています。

この脆弱性は、log4j2 が JNDI(Java Naming and Directory Interface)リソースを取り扱う際に発生します。JNDI とは Java の API で、ネーミングインデックスによってアプリケーションがリソースやオブジェクトを探せるようにするものです。ネットワーク上の DNS がホスト名を IP アドレスに解決するのと同様、JNDI はオブジェクト名をオブジェクトに解決します。JNDI によるルックアップのサポートの一環として log4j2 はログメッセージを補間し、あらゆる JNDI リソースのルックアップを試みます。つまり攻撃者が log4j2 のロガーに渡される文字列をコントロールできる場合、アプリケーションを騙して LDAP ルックアップを要求し、コントロール下にあるサーバからリソースを取得し、それをロードして実行することができます。

WatchGuard 脅威ラボのハニーネットでは、攻撃者がウォッチガードのハニーポットを探り、HTTP リクエストの User-Agent 文字列をログに記録するアプリケーションの脆弱性を利用しようとしているところが発見されました。以下の例では脆弱性のあるシステムを発見し、最終的にクリプトマイナーをロードしようとしています。

log4j2 を使用している Java アプリケーションを管理している場合、直ちに 2.15.0 にアップデートするか、JVM フラグの 「log4j2.formatMsgNoLookups」 を「true」に設定して JNDI ルックアップを確実に無効にすることで、この脆弱性を緩和することができます。また、使用している JDK のバージョンに応じて、さらに部分的な緩和策があります。例えば、JDK のバージョンが 6u11、7u201、8u191、11.0.1 よりも新しい場合は LDAP 攻撃ベクトルの影響を受けません。ただしアプリ内のクラスを読み込むことで攻撃を受ける可能性があります。

ウォッチガードでも現在社内での調査を進めており、懸念される影響について判断し、製品やサービスの見直しを行っています。log4j2 が使用されているサービスには積極的にパッチを適用していく予定です。