CVE-2026-78165
Apache Camel: Camel-Spring-Redis में Redis पेलोड्स का अनफ़िल्टर्ड Java डीसेरियलाइज़ेशन
- प्रकाशित
- 19 अक्टू॰ 2026
- अद्यतन
- 19 अक्टू॰ 2026
- सीएनए असाइन करना
- apache
- साक्ष्य देखे गए
- 17 अक्टू॰ 2026
प्राथमिक सीवीएसएस
cvelist · CVSS 3.1
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:Hसारांश
Apache Camel Spring Redis घटक में अविश्वसनीय डेटा के डीसेरियलाइज़ेशन का भेद्यता। यह समस्या Apache Camel को प्रभावित करती है: 2.11.0 से 4.18.5 से पहले तक, 4.19.0 से 4.22.1 से पहले तक। RedisConfiguration.getSerializer ने आलसी रूप से एक नंगे JdkSerializationRedisSerializer का निर्माण किया जब भी कोई serializer विकल्प कॉन्फ़िगर नहीं किया गया था, और उस इंस्टेंस का उपयोग घटक द्वारा किए जाने वाले प्रत्येक पठन के लिए किया जाता था। Spring का कार्यान्वयन DeserializingConverter के माध्यम से DefaultDeserializer को सौंपता है, जो बाइट्स को ConfigurableObjectInputStream के साथ पढ़ता है और स्ट्रीम पर कोई java.io.ObjectInputFilter स्थापित नहीं करता, इसलिए एक मनमाना क्रमबद्ध क्लास ग्राफ़ भौतिक रूप से बनाया गया और उसकी readObject विधि निष्पादित हुई। RedisConsumer.setBody ने उस serializer को सदस्यता प्राप्त चैनलों पर प्रकाशित प्रत्येक संदेश के कच्चे बाइट्स पर लागू किया, Exchange के निर्माण से पहले और इसलिए किसी भी रूट लॉजिक के संदेश का निरीक्षण करने से पहले, इसलिए एक अभिनेता जो सदस्यता प्राप्त चैनल पर PUBLISH जारी करने में सक्षम था, सीधे डीसेरियलाइज़ेशन सिंक तक पहुँच गया। वही डिफ़ॉल्ट serializer RedisConfiguration.createDefaultTemplate द्वारा निर्मित RedisTemplate का समर्थन करता था, इसलिए निर्माता ने GET, HGET, HGETALL और HVALS कमांड पढ़े और Redis कीस्पेस में जो कुछ भी संग्रहीत था उसे डीसेरियलाइज़ किया, और SpringRedisIdempotentRepository ने वही टेम्पलेट साझा किया। एक कस्टम redisTemplate कॉन्फ़िगर करने से उपभोक्ता पथ बंद नहीं हुआ, क्योंकि RedisConsumer.setBody टेम्पलेट से जुड़े serializer के बजाय सीधे getSerializer पढ़ता है, इसलिए एक परिनियोजन जिसने अपने स्वयं के टेम्पलेट में String serializer वायर्ड किया था, उपभोक्ता पक्ष पर उजागर रहा जब तक कि उसने serializer विकल्प भी सेट नहीं किया। घटक ने स्वयं कभी java.io.ObjectInputStream का निर्माण नहीं किया, यही कारण है कि बिना फ़िल्टर किए गए Java डीसेरियलाइज़ेशन के लिए Camel कोडबेस पर पिछले पास इसे तक नहीं पहुँचे। यह व्यवहार घटक की शुरुआत से चला आ रहा है, जो पहली बार 2.11.0 में जारी किया गया था, और इस फ़िक्स तक अपरिवर्तित रहा। उपयोगकर्ताओं को संस्करण 4.23.0 में अपग्रेड करने की सिफारिश की जाती है, जो इस समस्या को ठीक करता है। यदि उपयोगकर्ता 4.22.x रिलीज़ स्ट्रीम पर हैं, तो उन्हें 4.22.1 में अपग्रेड करने का सुझाव दिया जाता है। यदि उपयोगकर्ता 4.18.x रिलीज़ स्ट्रीम पर हैं, तो उन्हें 4.18.5 में अपग्रेड करने का सुझाव दिया जाता है। 4.14.x रिलीज़ स्ट्रीम और उससे पहले के संस्करण इस समस्या के समाधान से पहले जीवन-चक्र के अंत तक पहुँच गए थे और उन्हें कोई फ़िक्स प्राप्त नहीं होगा, इसलिए उन लाइनों पर परिनियोजन को समर्थित रिलीज़ में स्थानांतरित होना चाहिए। उन परिनियोजन के लिए जो तुरंत अपग्रेड नहीं कर सकते, JVM-व्यापी jdk.serialFilter सिस्टम प्रॉपर्टी सेट करें, जिसका प्रभावित कोड पथ पालन करता है क्योंकि यह java.io.ObjectInputStream के माध्यम से पढ़ता है, उदाहरण के लिए -Djdk.serialFilter=!java.net.**;java.**;javax.**;org.apache.camel.**;!* ; या serializer एंडपॉइंट विकल्प को ऐसे serializer पर सेट करें जो Java सीरियलाइज़ेशन का उपयोग नहीं करता, जैसे StringRedisSerializer, यह ध्यान देते हुए कि इसे serializer विकल्प के रूप में सेट किया जाना चाहिए और केवल कस्टम redisTemplate पर नहीं। रक्षा की गहराई के रूप में, Redis इंस्टेंस पर प्रमाणीकरण की आवश्यकता रखें और प्रतिबंधित करें कि कौन से क्लाइंट सदस्यता प्राप्त चैनलों पर प्रकाशित कर सकते हैं, और Camel द्वारा उपभोग किए जाने वाले Redis इंस्टेंस को अविश्वसनीय नेटवर्क के लिए उजागर न करें।
जिम्मेदारीपूर्ण उपयोग
भेद्यता जानकारी का उपयोग केवल उन प्रणालियों पर करें जिनके मालिक आप हैं या परीक्षण के लिए अधिकृत हैं। किटप्लॉइट सार्वजनिक अनुसंधान मेटाडेटा से लिंक करता है और शोषण कोड या दुर्भावनापूर्ण पेलोड को संग्रहीत नहीं करता है।