FlawOpen

flawopen.com/Incidents/log4shell-jndi-injection-december-2021

● Apache Software Foundation · CVE-2021-44228 · December 2021 · CVSS 10.0 · अति गंभीर
सुरक्षा अनुसंधान · FlawOpen

Log4Shell: लॉग फ़ाइल संदेश से दूरस्थ कोड निष्पादन

CVE-2021-44228 में लॉग डेटा Log4j 2 lookup और JNDI क्लास लोडिंग चला सकता था। Log4j अपडेट करें और एम्बेडेड प्रतियाँ खोजें।[1], [2], [4]

💡 आसान भाषा में (ELI5)

एक दफ़्तर में एक क्लर्क है जिसका इकलौता काम आगंतुकों की बातें लिखना है। किसी को पता चलता है कि अगर कोई आगंतुक एक ख़ास वाक्य बोले, तो क्लर्क लिखना छोड़कर उस वाक्य में बताए पते पर जाता है, किसी अजनबी से सीलबंद लिफ़ाफ़ा लेता है और उसमें लिखे निर्देशों का पालन करता है। जबकि क्लर्क को केवल लिखना था।[1]

इस पेज के मुख्य शब्द

मैसेज लुकअप
Log4j 2 की एक सुविधा जो लॉग लिखते समय संदेशों के भीतर ${...} एक्सप्रेशन को मानों से बदल देती थी। 2.15.0 से पहले यह केवल कॉन्फ़िगर किए गए पैटर्न पर नहीं, बल्कि संदेश के डेटा पर भी लागू होती थी।[1]
JNDI
जावा नेमिंग एंड डायरेक्टरी इंटरफ़ेस (Java Naming and Directory Interface), LDAP जैसी डायरेक्टरी सेवाओं में ऑब्जेक्ट खोजने का API। किसी दूरस्थ सर्वर पर JNDI लुकअप एक क्लास लौटा सकता था जिसे JVM लोड कर लेता।[1]
एक्सप्रेशन इंजेक्शन (CWE-917)
अविश्वसनीय डेटा किसी एक्सप्रेशन इवैल्युएटर तक पहुँच जाता है, और डेटा के रूप में दिया गया टेक्स्ट निर्देश की तरह चल जाता है।[1]
ट्रांज़िटिव डिपेंडेंसी
ऐसी लाइब्रेरी जो आपके एप्लिकेशन में केवल इसलिए है क्योंकि कोई दूसरी लाइब्रेरी उस पर निर्भर है। Log4Shell के कई मामले Log4j की उन प्रतियों से आए जिन्हें किसी ने दर्ज ही नहीं किया था।[4]
सॉफ़्टवेयर बिल ऑफ़ मटीरियल्स (SBOM)
किसी बिल्ड के हर घटक और संस्करण की मशीन से पढ़ी जा सकने वाली सूची, जिससे "हम Log4j 2.14 कहाँ चला रहे हैं?" का जवाब जल्दी मिलता है।[4], [3]

फ्रेमवर्क मैपिंग

घटना का समयक्रम (Timeline)

2021-11-24

Alibaba Cloud Security के Chen Zhaojun निजी तौर पर Apache को इस ख़ामी की सूचना देते हैं।[1]

2021-12-09

ख़ामी सार्वजनिक होती है; Log4j 2.15.0 जारी होता है और कुछ ही घंटों में बड़े पैमाने पर स्कैनिंग शुरू हो जाती है।[1], [4]

2021-12-17

CISA इमरजेंसी डायरेक्टिव 22-02 जारी करता है, जिसमें अमेरिकी संघीय एजेंसियों को Log4j खोजकर उसका जोखिम घटाने का आदेश है।[3]

2021-12-28

Log4j 2.17.1, CVE-2021-44832 ठीक करता है, जो 2.15.0 के बाद आई तीन CVE (CVE-2021-45046 और CVE-2021-45105 के साथ) में आख़िरी थी।[1]

हमले का चरण-दर-चरण प्रवाह

चरण 1

हमलावर का टेक्स्ट लॉग कॉल तक पहुँचता है

एप्लिकेशन जो भी मान लॉग करता है, जैसे उपयोगकर्ता नाम, हेडर या सर्च शब्द, उसमें हमलावर का चुना लुकअप एक्सप्रेशन हो सकता है।[1]

चरण 2

Log4j एक्सप्रेशन चलाता है

कमज़ोर संस्करण लॉग किए गए डेटा के भीतर लुकअप प्रोसेस करते हैं, इसलिए एक्सप्रेशन टेक्स्ट की तरह लिखे जाने के बजाय हल हो जाता है।[1], [2]

चरण 3

JNDI बाहर जुड़ता है

JNDI लुकअप सर्वर को एक्सप्रेशन में बताई गई डायरेक्टरी सेवा से जोड़ता है, जो अक्सर हमलावर के इन्फ्रास्ट्रक्चर पर होती है।[1], [4]

चरण 4

दूरस्थ कोड चलता है

दूरस्थ डायरेक्टरी JVM को लोड करने के लिए एक क्लास बता सकती है, जो फिर एप्लिकेशन के विशेषाधिकारों के साथ चलती है। जहाँ बाहरी कनेक्शन बंद थे, वहाँ यह चरण विफल हो जाता था।[1], [2]

सोर्स कोड: कमज़ोर बनाम सुरक्षित कार्यान्वयन

यह उदाहरण के लिए 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>

इंजीनियरिंग और सिस्टम सुरक्षा चेकलिस्ट

स्रोत