
CVE-2020-6950 सुरक्षा सुधार का Mojarra 2.2.13 में बैकपोर्ट, जो लीगेसी अनुप्रयोगों के लिए न्यूनतम, समीक्षा योग्य परिवर्तनों के साथ एक पैच किया हुआ jsf-impl JAR प्रदान करता है।
इस रिपॉजिटरी में CVE-2020-6950 के फिक्स का Mojarra 2.2.13 में एक प्रतिलिपि-योग्य (reproducible) बैकपोर्ट शामिल है।
यह मुख्य रूप से ट्रेसेबिलिटी और उन लीगेसी एप्लिकेशनों को बनाए रखने के लिए मौजूद है, जिन्हें संगतता कारणों से आसानी से नए 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 कक्षाओं को संशोधित करता है:
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 में केवल ये तीन कक्षाएं प्रतिस्थापित की गई हैं।
यह सत्यापित करने के लिए कि कोई अन्य फ़ाइल भिन्न नहीं है, अनपैक किए गए मूल और पैच किए गए JAR की तुलना की गई।
मूल Mojarra 2.2.13 स्रोतों का उपयोग प्रकाशित openEuler CVE पैच के साथ किया गया।
क्योंकि पूर्ण ऐतिहासिक Mojarra 2.2.13 बिल्ड वातावरण और उसकी पुरानी बिल्ड निर्भरताओं का पुनर्निर्माण अनावश्यक जटिलता जोड़ता और परिणाम का ऑडिट करना कठिन बनाता, केवल तीन प्रभावित कक्षाओं को पुनर्संकलित किया गया।
उन्हें OpenJDK 8 के साथ संकलित किया गया:
-source 1.5 -target 1.5
परिणामी क्लास फ़ाइलों को सत्यापित किया गया कि उनमें:
major version: 49
है, जो मूल Mojarra 2.2.13 कक्षाओं के बाइटकोड संस्करण से मेल खाता है।
फिर तीन परिणामी क्लास फ़ाइलों को मूल jsf-impl-2.2.13.jar की अन्यथा अपरिवर्तित प्रति में डाला गया।
परिणामी JAR को अनपैक किया गया और मूल से तुलना की गई।
केवल ये फ़ाइलें भिन्न हैं:
ClasspathResourceHelper.class
ResourceManager.class
WebappResourceHelper.class
परिणामी बाइटकोड का अतिरिक्त रूप से javap के साथ निरीक्षण किया गया ताकि सत्यापित किया जा सके कि दोनों संसाधन हेल्पर कक्षाओं में इच्छित कॉल शामिल है:
ResourceManager.nameContainsForbiddenSequence(...)
सभी तीन प्रतिस्थापन कक्षाओं को Java क्लास-फ़ाइल major version 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-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 फिक्स पर कोई स्वामित्व दावा नहीं किया जाता है।