NTTデータ先端技術株式会社は12月15日、Apache Software Foundationにより修正されたLog4j に存在するリモートコード実行の脆弱性(CVE-2021-44228)について検証を実施した結果を発表した。
Apache Software Foundationが提供するロギング用ライブラリ Log4j は、Java等のアプリケーションでログ出力を行う実装として幅広く利用されている。本脆弱性はLog4shellとも呼称され、Log4j に存在する JNDI(Java Naming and Directory Interface)Lookup機能に含まれる問題に起因する。
本脆弱性の悪用に成功した場合、攻撃者がリモートから任意のコードを実行できる可能性があり、CVSSv3 スコアが最高値の10.0、SeverityはCriticalと評価されている。概念実証(PoC)コードも数多く公開され、攻撃の観測や被害事例も報告されており、ライブラリ単体のみならず影響を受けるライブラリを含む製品が多数のベンダに渡って存在するため、今後の被害の拡大が懸念されるという。
同社では、攻撃者が用意したLDAPサーバにより不正なJavaのClassファイルを用いて被害者に任意のコードを実行させる方法として、次の3段階の手順の攻撃を確認している。RMI等を使った攻撃手法では、第2段階までで攻撃が成立することを同社では確認しており、Step4が省略され、Step3の手順でレスポンスを受け取った際に任意のコードを含んだ不正なメソッドの呼び出しが行われる。
第1段階(攻撃試行)
Step1. 標的となる脆弱なLog4jライブラリを使用するアプリケーションに、JNDI Lookupを行うための不正なHTTPリクエストを送信
※脆弱なバージョンのLog4jであること、JNDI Lookup機能が有効となっている前提
第2段階(JNDIの不正操作)
Step2. 攻撃者が指定したJNDI Lookupで攻撃者のLDAPサーバに接続を開始する
Step3. 攻撃者に設定された任意のコードを含む不正なClassライブラリのダウンロード先が含まれたLDAPのレスポンスを受け取る
Step2のJNDI Lookupで使用されるプロトコルの種類として、以下を確認している。
・LDAP (Lightweight Directory Access Protocol)
・DNS (Domain Name System)
・RMI (Remote Method Invocation)
・NDS (Novell Directory Services)
・NIS (Network Information Service )
・CORBA (Common Object Request Broker Architecture)
第3段階(不正なClassファイルの読み込みによる任意のコード実行)
Step4. Step3で取得したダウンロード先から不正なClassライブラリをダウンロードする
Step5. 不正なClassライブラリを読み込み、任意のコードが実行される
同社では、脆弱性を持ったサーバを構築し、本脆弱性の悪用が可能であることを確認しており、検証結果から、不正なリクエストの送信元に対して HTTP 404 のエラーを返していても、Log4jが不正な Class ファイルを読み込んで実行している可能性があると推測している。