オープンソースのJavaロギングライブラリ「Apache Log4j 2.x(以下、Log4j 2)」に発見された脆弱性「CVE-2021-44228」の混乱が収まらない。開発元のApache Software Foundation(以下、ASF)は12月17日(米国時間)、この脆弱性から派生した新しい問題に対処するために最新版となる「Apache Log4j 2.17.0」をリリースした。

CVE-2021-44228に対処するパッチとしては、既にバージョン2.15.0および2.16.0がリリースされているが、バージョン2.17.0はこれらのパッチでは修正されない新しい脆弱性「CVE-2021-45105」に対処するもの。CVE-2021-45105の重要度は「高」に指定されており、できる限り早急に対処することが推奨される。

  • Fixed in Log4j 2.17.0 (Java 8)

    Fixed in Log4j 2.17.0 (Java 8)

3つのパッチのリリースについて、時系列を追って整理しよう。最初に報告されたCVE-2021-44228の脆弱性は、Log4j 2が動作するJavaアプリケーションに対してリモートの第三者が任意のコードを実行することを可能にするもので、通称「Log4Shell」とも呼ばれている。ASFでは、これに対処するために、原因となっているMessage Lookup機能をデフォルトで無効に設定した上で、有効にした場合でもホワイトリストメカニズムによって明示的に許可されたホストのみ利用できるように変更された「Apache Log4j 2.15.0」をリリースした。

しかし2.15.0の修正では、特定のデフォルト以外の構成でサービス運用妨害(DoS)攻撃が可能であるという問題(CVE-2021-45046)が発覚し、Message Lookup機能そのものを削除した「Apache Log4j 2.16.0」がリリースされた。

上の記事の公開時点では、CVE-2021-45046のCVSS v3のベーススコアは3.7で緊急性は高くないとされていたが、その後の調査でDoS攻撃だけでなくリモートコード実行も可能な攻撃パターンが存在することが判明している。その結果、CVSS v3のベーススコアは9.0(深刻度"緊急")に修正された。

その後新たに報告された「CVE-2021-45105」は、デフォルト以外の特定のパターンレイアウトのLookup要求に対して、自己参照の再帰から復帰できなくなってエラーが発生するというもの。これによってサービス運用妨害(DoS)攻撃が可能となる。前述のように、これを修正したバージョンが「Apache Log4j 2.17.0」というわけだ。

CVE-2021-45105は2.0-beta9から2.16.0までのすべてのバージョンに影響するとのことで、すでに2.15.0や2.16.0へのアップデートを済ませているユーザも対象となるので注意が必要。Log4j 2を使用しているユーザは、早急に2.17.0にアップデートするか、指定された軽減策を実施することが推奨されている。