
Backport des CVE-2020-6950-Sicherheitsfixes auf Mojarra 2.2.13, der ein gepatchtes jsf-impl-JAR mit minimalen, überprüfbaren Änderungen für Legacy-Anwendungen bereitstellt.
Dieses Repository enthält einen reproduzierbaren Backport des Fixes für CVE-2020-6950 auf Mojarra 2.2.13.
Es existiert in erster Linie zur Nachvollziehbarkeit und zur Wartung von Legacy-Anwendungen, die aus Kompatibilitätsgründen nicht einfach auf eine neuere JSF/Mojarra-Version aktualisiert werden können.
Mojarra ist die Referenzimplementierung von JavaServer Faces (JSF), ursprünglich entwickelt als Teil des GlassFish/Java-EE-Ökosystems und heute als Eclipse-Mojarra-Projekt gepflegt.
Der in diesem Repository enthaltene Mojarra-Quellcode ist nicht meine Arbeit. Sämtliche Urheberrechte und Credits verbleiben bei den ursprünglichen Mojarra-Autoren und -Mitwirkenden.
Aktuelles Upstream-Projekt:
Die unveränderten Mojarra-2.2.13-Artefakte, die als Grundlage für diese Arbeit dienten, wurden von Maven Central bezogen.
Der hier verwendete Sicherheitsfix wurde nicht von mir entwickelt.
Der Backport für Mojarra 2.2.13 wurde aus dem openEuler-Mojarra-Paket bezogen, wo auf Mojarra 2.2.13 angewendet wird.
CVE-2020-6950.patchopenEuler-Paketquelle:
Der ursprüngliche Patch wurde beibehalten, damit Herkunft und genaue Art der Sicherheitsänderung nachvollziehbar bleiben.
Mein Dank gilt den Upstream-Mojarra-Entwicklern sowie den openEuler-Maintainern und -Mitwirkenden, die den zurückportierten Sicherheitspatch bereitgestellt und veröffentlicht haben.
Ich bin auf eine Legacy-Anwendung gestoßen, die weiterhin von Mojarra 2.2.13 abhängt und von CVE-2020-6950 betroffen war.
Eine vollständige Aktualisierung der JSF-Implementierung war kurzfristig keine praktikable Option, da die Anwendung und ihr umgebendes Framework Legacy-Software mit erheblichen Kompatibilitätseinschränkungen sind.
Gleichzeitig wollte ich, dass die Sicherheitsänderung:
Aus diesem Grund habe ich die betroffenen Klassen selbst neu kompiliert, anstatt ein unerklärtes modifiziertes Binärpaket zu verteilen.
Dieses Repository stellt daher keine unabhängige Implementierung des Sicherheitsfixes dar. Es dokumentiert und verpackt einen vorhandenen veröffentlichten Fix für die Verwendung mit Mojarra 2.2.13.
Der openEuler-CVE-2020-6950-Patch modifiziert drei Mojarra-Klassen:
com/sun/faces/application/resource/ClasspathResourceHelper.java
com/sun/faces/application/resource/ResourceManager.java
com/sun/faces/application/resource/WebappResourceHelper.java
Der Patch fügt eine Validierung des Ressourcenvertragsnamens hinzu, die verwendet:
ResourceManager.nameContainsForbiddenSequence(...)
Nur diese drei Klassen werden im gepatchten jsf-impl-2.2.13-JAR ersetzt.
Ein Vergleich des entpackten Original- und des gepatchten JAR wurde durchgeführt, um zu verifizieren, dass keine anderen Dateien abweichen.
Die ursprünglichen Mojarra-2.2.13-Quellen wurden zusammen mit dem veröffentlichten openEuler-CVE-Patch verwendet.
Da die Rekonstruktion der vollständigen historischen Mojarra-2.2.13-Build-Umgebung und ihrer alten Build-Abhängigkeiten unnötige Komplexität hinzufügen und das Ergebnis schwerer prüfbar machen würde, wurden nur die drei betroffenen Klassen neu kompiliert.
Sie wurden mit OpenJDK 8 kompiliert, unter Verwendung von:
-source 1.5 -target 1.5
Die resultierenden Klassendateien wurden verifiziert mit:
major version: 49
was der Bytecode-Version der ursprünglichen Mojarra-2.2.13-Klassen entspricht.
Die drei resultierenden Klassendateien wurden anschließend in eine ansonsten unveränderte Kopie des ursprünglichen jsf-impl-2.2.13.jar eingefügt.
Das resultierende JAR wurde entpackt und mit dem Original verglichen.
Nur diese Dateien unterscheiden sich:
ClasspathResourceHelper.class
ResourceManager.class
WebappResourceHelper.class
Der resultierende Bytecode wurde zusätzlich mit javap untersucht, um zu verifizieren, dass beide Ressourcen-Helferklassen den beabsichtigten Aufruf enthalten:
ResourceManager.nameContainsForbiddenSequence(...)
Alle drei Ersatzklassen wurden ebenfalls verifiziert, um die Java-Klassendatei-Hauptversion 49 beizubehalten.
Für Anwendungen, die derzeit die aufgeteilten Mojarra-Bibliotheken verwenden:
jsf-api-2.2.13.jar
jsf-impl-2.2.13.jar
ist der relevante Ersatz, der von diesem Projekt erzeugt wird:
jsf-impl-2.2.13-patched.jar
Der JAR-Dateiname selbst ist für den Java-Klassenlader nicht von Bedeutung. Das Suffix -patched wird absichtlich beibehalten, damit Administratoren die modifizierte Implementierung sofort von der ursprünglichen unterscheiden können.
Stellen Sie nicht gleichzeitig das Original- und das gepatchte jsf-impl-JAR bereit.
Ein sicheres Bereitstellungsverfahren besteht darin, zuerst die vorhandene Anwendung zu sichern, das ursprüngliche jsf-impl-2.2.13.jar zu entfernen, jsf-impl-2.2.13-patched.jar bereitzustellen, die Anwendung/den Container neu zu starten und sowohl den normalen Anwendungsbetrieb als auch das durch CVE-2020-6950 behandelte Sicherheitsproblem zu verifizieren.
Dieses Repository ist als ein eng begrenzter Kompatibilitäts-/Sicherheits-Backport für Legacy-Mojarra-2.2.13-Installationen gedacht.
Es ist kein Fork von Mojarra, keine neue Mojarra-Version und steht in keiner Verbindung zur oder Billigung durch die Eclipse Foundation, Oracle, GlassFish oder openEuler.
Wo immer möglich, ist die Aktualisierung auf eine derzeit gewartete JSF/Jakarta-Faces-Implementierung einer Wartung einer alten Mojarra-Version mit einzelnen Sicherheitspatches vorzuziehen.
Dieses Repository behandelt die oben beschriebene spezifische CVE. Es sollte nicht so interpretiert werden, dass Mojarra 2.2.13 allgemein sicher, aktuell, gewartet oder unterstützt wird.
Die Benutzer bleiben dafür verantwortlich, das gepatchte Artefakt in ihrer eigenen Umgebung zu testen, bevor sie es auf Produktionssystemen bereitstellen.
Der ursprüngliche Mojarra-Quellcode und die Binärdateien unterliegen weiterhin ihren jeweiligen Upstream-Lizenzen und Urheberrechtshinweisen.
Mojarra 2.2.13 wurde unter den für diese Version geltenden GPL-v2-/CDDL-Doppellizenzbedingungen vertrieben, einschließlich der GPL-Classpath-Ausnahme, wo in den ursprünglichen Quellkopfzeilen angegeben.
Die ursprüngliche Mojarra-Lizenzdatei ist unverändert enthalten unter:
packager/legal/LICENSE.txt
Die ursprünglichen Urheberrechts- und Lizenzkopfzeilen in den Mojarra-Quelldateien wurden beibehalten.
Der von openEuler bereitgestellte Patch bleibt seinen jeweiligen Autoren und dem Quellprojekt zuzuschreiben.
Dieses Repository erhebt keinen Anspruch auf Eigentum am ursprünglichen Mojarra-Code oder am CVE-Fix.