flawopen.com/Incidents/log4shell-jndi-injection-december-2021
Log4Shell: लॉग फ़ाइल संदेश से दूरस्थ कोड निष्पादन
CVE-2021-44228 में लॉग डेटा Log4j 2 lookup और JNDI क्लास लोडिंग चला सकता था। Log4j अपडेट करें और एम्बेडेड प्रतियाँ खोजें।[1], [2], [4]
एक दफ़्तर में एक क्लर्क है जिसका इकलौता काम आगंतुकों की बातें लिखना है। किसी को पता चलता है कि अगर कोई आगंतुक एक ख़ास वाक्य बोले, तो क्लर्क लिखना छोड़कर उस वाक्य में बताए पते पर जाता है, किसी अजनबी से सीलबंद लिफ़ाफ़ा लेता है और उसमें लिखे निर्देशों का पालन करता है। जबकि क्लर्क को केवल लिखना था।[1]
इस पेज के मुख्य शब्द
मैसेज लुकअप- Log4j 2 की एक सुविधा जो लॉग लिखते समय संदेशों के भीतर ${...} एक्सप्रेशन को मानों से बदल देती थी। 2.15.0 से पहले यह केवल कॉन्फ़िगर किए गए पैटर्न पर नहीं, बल्कि संदेश के डेटा पर भी लागू होती थी।[1]
JNDI- जावा नेमिंग एंड डायरेक्टरी इंटरफ़ेस (Java Naming and Directory Interface), LDAP जैसी डायरेक्टरी सेवाओं में ऑब्जेक्ट खोजने का API। किसी दूरस्थ सर्वर पर JNDI लुकअप एक क्लास लौटा सकता था जिसे JVM लोड कर लेता।[1]
एक्सप्रेशन इंजेक्शन (CWE-917)- अविश्वसनीय डेटा किसी एक्सप्रेशन इवैल्युएटर तक पहुँच जाता है, और डेटा के रूप में दिया गया टेक्स्ट निर्देश की तरह चल जाता है।[1]
ट्रांज़िटिव डिपेंडेंसी- ऐसी लाइब्रेरी जो आपके एप्लिकेशन में केवल इसलिए है क्योंकि कोई दूसरी लाइब्रेरी उस पर निर्भर है। Log4Shell के कई मामले Log4j की उन प्रतियों से आए जिन्हें किसी ने दर्ज ही नहीं किया था।[4]
फ्रेमवर्क मैपिंग
- इस गाइड में बताई गई कमजोरी के लिए CWE संदर्भ: CWE-20 CWE-502 CWE-917
- D3-OTF आउटबाउंड ट्रैफ़िक फ़िल्टरिंग — इस गाइड में दिया गया आउटबाउंड नेटवर्क प्रतिबंध सेवा या होस्ट के पहुँच योग्य गंतव्यों को सीमित करता है।
- CISA KEV — जोड़ा गया 2021-12-10 — CVE-2021-44228
घटना का समयक्रम (Timeline)
Alibaba Cloud Security के Chen Zhaojun निजी तौर पर Apache को इस ख़ामी की सूचना देते हैं।[1]
CISA इमरजेंसी डायरेक्टिव 22-02 जारी करता है, जिसमें अमेरिकी संघीय एजेंसियों को Log4j खोजकर उसका जोखिम घटाने का आदेश है।[3]
Log4j 2.17.1, CVE-2021-44832 ठीक करता है, जो 2.15.0 के बाद आई तीन CVE (CVE-2021-45046 और CVE-2021-45105 के साथ) में आख़िरी थी।[1]
हमले का चरण-दर-चरण प्रवाह
हमलावर का टेक्स्ट लॉग कॉल तक पहुँचता है
एप्लिकेशन जो भी मान लॉग करता है, जैसे उपयोगकर्ता नाम, हेडर या सर्च शब्द, उसमें हमलावर का चुना लुकअप एक्सप्रेशन हो सकता है।[1]
सोर्स कोड: कमज़ोर बनाम सुरक्षित कार्यान्वयन
यह उदाहरण के लिए Maven कॉन्फ़िगरेशन है। log4j-bom इम्पोर्ट करने से सभी Log4j मॉड्यूल, दूसरी लाइब्रेरियों के साथ आई प्रतियों सहित, एक ही मौजूदा संस्करण पर हल होते हैं। फिर enforcer नियम बिल्ड को विफल कर देता है अगर 2.17.1 से पुराना कोई भी log4j-core, ट्रांज़िटिव रूप से भी, अब भी पहुँच में हो, ताकि कोई नई डिपेंडेंसी चुपचाप कमज़ोर कोड वापस न ला सके। असली सुधार अपग्रेड है; एप्लिकेशन सर्वर से बाहरी LDAP और RMI रोकना वह बहु-स्तरीय सुरक्षा थी जिसने पैच में देरी होने पर भी दुरुपयोग की कड़ी तोड़ दी।
<!-- pom.xml: a direct dependency pinned to a vulnerable release -->
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.14.1</version>
</dependency>
</dependencies>
<!-- Nothing stops another library from pulling in an older log4j-core transitively. -->
<!-- pom.xml: one version for every Log4j module, and a build that fails on old ones -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-bom</artifactId>
<version>2.24.3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>3.5.0</version>
<executions>
<execution>
<id>ban-vulnerable-log4j</id>
<goals><goal>enforce</goal></goals>
<configuration>
<rules>
<bannedDependencies>
<searchTransitive>true</searchTransitive>
<excludes>
<exclude>org.apache.logging.log4j:log4j-core:[2.0-beta9,2.17.1)</exclude>
</excludes>
</bannedDependencies>
</rules>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
इंजीनियरिंग और सिस्टम सुरक्षा चेकलिस्ट
- ✓log4j-core को 2.17.1 या बाद के संस्करण पर अपग्रेड करें (Java 7 पर 2.12.4, Java 6 पर 2.3.2), और डिपेंडेंसी ट्री में कहीं भी पुराना संस्करण हल करने वाले बिल्ड को विफल करें।[1]
- ✓हर बिल्ड पर SBOM बनाएँ और उसे आर्टिफ़ैक्ट के साथ रखें, ताकि भविष्य की किसी सलाह को मिनटों में प्रभावित सेवाओं से मिलाया जा सके।[4], [3]
- ✓केवल सोर्स रिपॉज़िटरी नहीं, तैनात आर्टिफ़ैक्ट भी स्कैन करें: कई उत्पादों में shaded और बंडल किए गए JAR ने Log4j को डिपेंडेंसी सूचियों से छिपा दिया था।[4]
- ✓एप्लिकेशन सर्वर पर डिफ़ॉल्ट रूप से बाहरी ट्रैफ़िक बंद रखें; दुरुपयोग के लिए मनचाहे होस्ट तक बाहरी LDAP, RMI और DNS चाहिए थे।[4], [3]
- ✓किसी संरचनात्मक ख़ामी के ठीक होने के बाद और CVE आने की उम्मीद रखें, और वेंडर के सुधार स्थिर होने तक घटना को खुला रखें।[1]
स्रोत
- Apache Log4j — सुरक्षा कमज़ोरियाँ (CVE-2021-44228 और बाद की)
- CVE-2021-44228 — CVE रिकॉर्ड
- CISA — इमरजेंसी डायरेक्टिव 22-02: Apache Log4j कमज़ोरी का जोखिम घटाना
- CISA — Apache Log4j कमज़ोरी पर मार्गदर्शन
- क्या Java का ObjectInputStream अविश्वसनीय डेटा के साथ सुरक्षित है?
- कमांड इंजेक्शन — पूरी श्रेणी का संदर्भ