Apache Log4j の3度目のパッチ:Lookup による制御不能な再帰に対応

Apache releases the third patch to address a new Log4j flaw

2021/12/18 SecurityAffairs — 専門家たちが、Log4j ライブラリ上の公開された2つ目の脆弱性 CVE-2021-45046 の悪用を警告する一方で、3つ目のセキュリティ脆弱性も話題になっている。ここでは、Log4j の脆弱性の時系列を整理する。1つ目の脆弱性 CVE-2021-44228 (Log4Shell) は、先週に中国のセキュリティ研究者 p0rz9 が PoC エクスプロイトを公開したことで話題になったものだ。

この問題は、Apache Log4j の Java ベース・ロギング・ライブラリに影響をおよぼす、深刻なリモートコード実行のゼロデイ脆弱性である。

この問題の影響は甚大であり、世界中の何千もの組織が攻撃にさらされる可能性がある。そして、セキュリティ専門家の間では、すでに悪用の試みが報告されている。
この問題が公表された直後に Microsoft の研究者たちは、中国/北朝鮮/イラン/トルコなどの国家に支援された組織が、Log4J ライブラリの Log4Shell (CVE-2021-44228) を悪用する攻撃が行われていると報告した。この脆弱性を悪用しているグループには、中国を拠点とする Hafnium と、イランを拠点とする Phosphorus があり、前者は仮想化インフラを攻撃し、後者はランサムウェアを展開している。

Apache Software Foundation (ASF) は、Log4Shell の脆弱性 CVE-2021-44228 に対するパッチ (Log4J 2.15.0) を直ちにリリースたが、この修正は、特定のデフォルト以外のコンフィグレーションにおける欠陥に対して、部分的に対応するものに過ぎなかった。ロギング・コンフィグレーションが、Context Lookup (例: $${ctx:loginId}) または、Thread Context Map パターン (%X、%mdc、%MDC) を含むデフォルト以外のパターン・レイアウトを使用している場合には、Thread Context Map (MDC) の入力データを制御できる攻撃者が、JNDI Lookup パターンを使用して悪意の入力データを作成し、サービス拒否 (DOS) 状態を引き起こすことができた。

これらの問題は、CVE-2021-45046 を修正する Log4j 2.16.0 のリリースにより、Message Lookup パターンのサポートを削除し、JNDI 機能をデフォルトで無効にすることで対処された。

CloudFlare は、「CVE-2021-44228 に続いて、Log4J における2つ目の脆弱性が CVE-2021-45046 として採番された。CVE-2021-44228 に対して、以前に公開されたルールは、この新しい CVE に対しても同じレベルの保護を提供する。この脆弱性は積極的に悪用されているため、Log4J を使用しているユーザーは、2.15.0 にアップデートしていたとしても、加納な限り早急に 2.16.0 へとアップデートしてほしい。最新バージョンは、Log4J のダウンロード・ページから入手できる」と述べている。

しかし、悪いニュースは終わらない。セキュリティ会社である Praetorian の研究者たちは、初期の Log4Shell を修正するためにリリースされた Log4j 2.15.0、3つ目の脆弱性があることを警告した。

彼らは、「この3つ目の脆弱性は、特定の状況下において、攻撃者が悪用することで、機密データを流出させる可能性がある。我々の調査では、2.15.0 が特定の状況下において、依然として機密データの流出を許す可能性があることを実証した。この問題の技術的な詳細を Apache Foundation に伝えたが、対策が提供されるまでの間に、可能な限り早急に 2.16.0 へとアップデートすることを強く推奨する」と述べている。

Apache Software Foundation (ASF) は、log4j 2.16 の深刻度 High のサービス拒否(DoS) の脆弱性 CVE-2021-45105 を修正するために、1週間で3度目の Ver 2.17.0 のリリースを余儀なくされた。

また、CVE-2021-45046 についてだが、当初は深刻度が Low (3.7) と評価されていたが、Apache Software Foundation が公開した3回目の修正プログラムを回避する新たな方法が。専門家たちにより発見されたことで、深刻度が Critical-severity (9.0) に引き上げられた。

脆弱性 CVE-2021-45105 は CVSS 7.5 であり、log4j 2.16 に影響をおよぼす DoS の欠陥である。専門家たちは、Ver 2.16 で JNDI Lookup が無効化されたとしても、特定の状況下では自己参照 Lookup の可能性が残ると指摘している。

ASF の発表は、「Apache Log4j2 の Ver 2.0-alpha1〜2.16.0 では、自己参照 Lookup による制御不能な再帰から保護されていなかった。ロギング・コンフィグレーションが Context Lookup を含むデフォルト以外のパターン・レイアウト (例えば $${ctx:loginId}) を使用している場合、Thread Context Map (MDC) の入力データを制御できる攻撃者は、再帰的な Lookup を含む悪意の入力データを作成することが可能であり、その結果として、プロセスを終了させる StackOverflowError が発生する」と伝えている。

この問題に関するアドバイザリは、「Apache Log4j2 の Ver 2.0-alpha1〜2.16.0 (2.12.3 を除く) は、自己参照 Lookup からの制御不能な再帰から保護されていなかった。そのため、Thread Context Map のデータを制御できる攻撃者は、細工された文字列が解釈された場合に、サービス拒否を引き起こすことができる。この問題は Log4j 2.17.0 および 2.12.3 で修正されている。Apache Software Foundation (ASF) は、Log4j Ver 2.17.0 (for Java 8) のリリースにより、CVE-2021-45105 の欠陥を修正した」と述べている。

Apache は頑張っています。そして、世界中のシステムが、このオープンソース・プロジェクトに依存しているという事実に、世界中の人々が、認識を新たにしていることでしょう。Log4j 2.17.0 が出ましたので、可能な限り早急にアップデートしましょう。しかし、そのアップデーとは、Log4j をめぐる Java パッケージの依存関係により、大きく影響されることも分かってきました。今週は、そんな事も考えながら、記事を選んで訳していきたいと思います。→ Log4j まとめページ

%d bloggers like this: