
CVE-2020-6950 セキュリティ修正の Mojarra 2.2.13 へのバックポート。レガシーアプリケーション向けに、最小限でレビュー可能な変更を加えたパッチ適用済みの jsf-impl JAR を提供します。
このリポジトリには、CVE-2020-6950 の修正を Mojarra 2.2.13 に適用した再現可能なバックポートが含まれています。
これは主にトレーサビリティと、互換性の理由から新しい JSF/Mojarra リリースに単純にアップグレードできないレガシーアプリケーションの保守を目的として存在します。
Mojarra は JavaServer Faces (JSF) のリファレンス実装であり、元々は GlassFish/Java EE エコシステムの一部として開発され、現在は Eclipse Mojarra プロジェクトとして保守されています。
このリポジトリに含まれる Mojarra ソースコードは私の作品ではありません。すべてのクレジットと著作権は元の Mojarra の作者および貢献者に帰属します。
現在のアップストリームプロジェクト:
この作業の基礎として使用された未変更の Mojarra 2.2.13 アーティファクトは Maven Central から取得されました。
ここで使用されているセキュリティ修正は私によって開発されたものではありません。
Mojarra 2.2.13 用のバックポートは openEuler Mojarra パッケージから取得されました。そこでは CVE-2020-6950.patch が Mojarra 2.2.13 に適用されています。
openEuler パッケージソース:
元のパッチは、セキュリティ修正の出所と正確な性質がトレース可能なまま維持されるように保持されています。
アップストリームの Mojarra 開発者と、バックポートされたセキュリティパッチを提供・公開した openEuler のメンテナーおよび貢献者に感謝します。
私は、依然として Mojarra 2.2.13 に依存しており、CVE-2020-6950 の影響を受けるレガシーアプリケーションに遭遇しました。
JSF 実装全体のアップグレードは、アプリケーションとその周辺フレームワークが重大な互換性制約を持つレガシーソフトウェアであるため、短期的な現実的な選択肢ではありませんでした。
同時に、セキュリティ修正には以下の性質を持たせたいと考えました:
そのため、説明のない修正バイナリを配布するのではなく、影響を受けるクラスを自分で再ビルドしました。
したがって、このリポジトリはセキュリティ修正の独立した実装を表すものではありません。Mojarra 2.2.13 で使用するために、既存の公開済み修正を文書化しパッケージ化したものです。
openEuler の CVE-2020-6950 パッチは、Mojarra の3つのクラスを変更します:
com/sun/faces/application/resource/ClasspathResourceHelper.java
com/sun/faces/application/resource/ResourceManager.java
com/sun/faces/application/resource/WebappResourceHelper.java
このパッチは、以下を使用したリソース契約名の検証を追加します:
ResourceManager.nameContainsForbiddenSequence(...)
パッチ適用済みの jsf-impl-2.2.13 JAR では、これら3つのクラスのみが置き換えられます。
他のファイルに差異がないことを検証するために、展開された元の JAR とパッチ適用済み JAR の比較が実行されました。
元の Mojarra 2.2.13 ソースが、公開されている openEuler CVE パッチとともに使用されました。
完全な歴史的な Mojarra 2.2.13 ビルド環境とその古いビルド依存関係を再構築すると、不必要な複雑さが増し、結果の監査が困難になるため、影響を受ける3つのクラスのみが再コンパイルされました。
これらは OpenJDK 8 を使用してコンパイルされました:
-source 1.5 -target 1.5
結果のクラスファイルは以下を持つことが検証されました:
major version: 49
これは元の Mojarra 2.2.13 クラスのバイトコードバージョンと一致します。
その後、結果の3つのクラスファイルは、元の jsf-impl-2.2.13.jar のそれ以外は変更されていないコピーに挿入されました。
結果の JAR は展開され、元のものと比較されました。
以下のファイルのみが異なります:
ClasspathResourceHelper.class
ResourceManager.class
WebappResourceHelper.class
結果のバイトコードはさらに javap で検査され、両方のリソースヘルパークラスに意図した呼び出しが含まれていることが検証されました:
ResourceManager.nameContainsForbiddenSequence(...)
3つの置換クラスすべてが、Java クラスファイルのメジャーバージョン 49 を保持していることも検証されました。
現在分割された Mojarra ライブラリを使用しているアプリケーションの場合:
jsf-api-2.2.13.jar
jsf-impl-2.2.13.jar
このプロジェクトによって生成される関連する置換物は次のとおりです:
jsf-impl-2.2.13-patched.jar
JAR ファイル名自体は Java クラスローダーにとって重要ではありません。-patched サフィックスは、管理者が変更された実装を元のものと即座に区別できるように意図的に保持されています。
元の jsf-impl JAR とパッチ適用済みの jsf-impl JAR を同時にデプロイしないでください。
安全なデプロイ手順は、既存のアプリケーションを先にバックアップし、元の jsf-impl-2.2.13.jar を削除し、jsf-impl-2.2.13-patched.jar をデプロイし、アプリケーション/コンテナを再起動し、通常のアプリケーション動作と CVE-2020-6950 で対処されるセキュリティ問題の両方を検証することです。
このリポジトリは、レガシーな Mojarra 2.2.13 インストール向けの範囲を限定した互換性/セキュリティバックポートとして意図されています。
これは Mojarra のフォークではなく、新しい Mojarra リリースでもなく、Eclipse Foundation、Oracle、GlassFish、または openEuler とは提携しておらず、その承認も受けていません。
可能な場合は、個別のセキュリティパッチで古い Mojarra リリースを保守するよりも、現在保守されている JSF/Jakarta Faces 実装へのアップグレードが推奨されます。
このリポジトリは、上記の特定の CVE に対処します。これは Mojarra 2.2.13 を一般的に安全、最新、保守済み、またはサポート対象にするものとして解釈されるべきではありません。
ユーザーは、本番システムにデプロイする前に、自身の環境でパッチ適用済みアーティファクトをテストする責任を負います。
元の Mojarra ソースコードとバイナリは、それぞれのアップストリームライセンスと著作権表示の対象となります。
Mojarra 2.2.13 は、そのリリースに適用される GPL v2 / CDDL デュアルライセンス条件(元のソースヘッダーに記載されている GPL Classpath Exception を含む)の下で配布されました。
元の Mojarra ライセンスファイルは、以下の場所に変更なしで含まれています:
packager/legal/LICENSE.txt
Mojarra ソースファイル内の元の著作権およびライセンスヘッダーは保持されています。
openEuler 提供のパッチは、それぞれの作者およびソースプロジェクトに帰属します。
元の Mojarra コードまたは CVE 修正に対する所有権は、このリポジトリによって主張されません。