
log4shell (CVE-2021-44228, CVE-2021-45046) और अन्य संवेदनशील (CVE-2017-5645, CVE-2019-17571, CVE-2022-23305, CVE-2022-23307 ... ) log4j लाइब्रेरी के इंस्टेंसेस के लिए सबसे तेज़ फाइलसिस्टम स्कैनर। उत्कृष्ट प्रदर्शन और कम मेमोरी फुटप्रिंट।

https://github.com/mergebase/log4j-detector का Python पोर्ट। log4j-detector कॉपीराइट (C) कॉपीराइट 2021 Mergebase Software Inc. https://mergebase.com/ है। GPLv3 के तहत लाइसेंस प्राप्त।
Python में पोर्ट करने का उद्देश्य प्रदर्शन में सुधार, मेमोरी खपत कम करना और कोड पठनीयता बढ़ाना था। नीचे performance तुलना अनुभाग देखें।
और ऐसा प्रतीत होता है कि यह सबसे कम मेमोरी आवश्यकता वाला सबसे तेज़ स्कैनिंग टूल है।
आपके फ़ाइल-सिस्टम पर log4j (1.x), reload4j (1.2.18+) और log4j-core (2.x) संस्करणों की पहचान करता है जो CVE-2021-44228, CVE-2021-45046 और कई अन्य - नीचे दी गई तालिका देखें। यह बड़े अनुप्रयोगों में कई परतों गहरे एम्बेडेड उदाहरणों को खोजने में सक्षम है। Linux, Windows, Mac या कहीं और Python 3.8+ चलाने पर काम करता है।
log4j को निष्पादन योग्य spring-boot jars/wars, uber jars में मिश्रित निर्भरताओं, छायांकित jars, और यहां तक कि फ़ाइल-सिस्टम पर बिना संपीड़ित (उर्फ *.class) पड़ी विस्फोटित jar फ़ाइलों के अंदर सही ढंग से पता लगा सकता है। यह छायांकित वर्ग फ़ाइलों - एक्सटेंशन .esclazz (elastic) और .classdata (Azure) को भी संभाल सकता है।
खोजे गए Java संग्रह एक्सटेंशन: .zip, .jar, .war, .ear, .aar, .jpi,
.hpi, .rar, .nar, .wab, .eba, .ejb, .sar, .apk, .par, .kar
प्रत्येक उदाहरण को उपयुक्त CVE सूची के साथ रिपोर्ट किया जाता है। प्रत्येक CVE के लिए log4j लाइब्रेरी फ़ाइल का विश्लेषण किया जाता है कि क्या अनुशंसित वर्कअराउंड (जैसे JndiLookup.class या JMSAppender.class हटा दिए गए हैं) लागू किए गए हैं और उस स्थिति में इसे असंवेदनशील माना जाता है। स्थिति STRANGE उन संग्रहों के लिए रिपोर्ट की जाती है जिनमें log4j-core pom.properties फ़ाइल है, लेकिन वास्तविक बाइटकोड कक्षाएं नहीं हैं, आमतौर पर वे स्रोत पैकेज होते हैं और उन्हें अनदेखा किया जा सकता है।
चेतावनी
--fixसुविधा प्रयोगात्मक है, इसे अपने जोखिम पर उपयोग करें, इसका उपयोग करने से पहले अपनी jar फ़ाइलों का बैकअप लेना सुनिश्चित करें।
तर्क --fix JndiLookup.class के उदाहरणों को JndiLookup.vulne में नाम बदलने का प्रयास करता है, जिससे क्लास लोड होने से रोका जा सके। Java संग्रह के अंदर यह स्थान पर नाम बदलने के माध्यम से किया जाता है, इसमें संग्रह को पुनः ज़िप करने की आवश्यकता नहीं होती है और यह तुरंत तेज़ है।
Linux 64bit, MS Windows 64bit और 32bit के लिए बाइनरी उपलब्ध हैं - Releases देखें
समर्थित न्यूनतम Python संस्करण 3.8 है। मेरे परीक्षण के अनुसार Python 3.6 zip कार्यान्वयन मेरे परीक्षण डेटा से कई
.jarफ़ाइलें नहीं खोल सकता।
log4shell finder प्रदर्शन और कम मेमोरी फुटप्रिंट के लिए अनुकूलित है।
23.1.2022 को अद्यतन, 2005 फ़ोल्डरों में 26237 फ़ाइलों वाली निर्देशिका पर प्रदर्शन मापा गया।
रनटाइम आधा हो गया, मेमोरी खपत 2/3, फ़ाइल सिस्टम रीड कम से कम 90%
Command being timed: "./test_log4shell.py /home/hynek/war/ --exclude-dirs /mnt --same-fs"
User time (seconds): 17.68
System time (seconds): 1.20
Percent of CPU this job got: 127%
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:14.47
Maximum resident set size (kbytes): 64144
File system inputs: 114424
Command being timed: "./log4j-finder.py /home/hynek/war/"
User time (seconds): 23.59
System time (seconds): 1.09
Percent of CPU this job got: 99%
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:26.18
Maximum resident set size (kbytes): 38604
File system inputs: 142824
Command being timed: "java -jar log4j-detector-latest.jar /home/hynek/war"
User time (seconds): 30.56
System time (seconds): 1.39
Percent of CPU this job got: 113%
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:28.26
Maximum resident set size (kbytes): 214116
File system inputs: 14416
Command being timed: "./log4j2-scan /home/hynek/war --scan-log4j1 --scan-zip"
User time (seconds): 52.05
System time (seconds): 25.32
Percent of CPU this job got: 88%
Elapsed (wall clock) time (h:mm:ss or m:ss): 1:27.86
Maximum resident set size (kbytes): 593080
File system inputs: 215416
all पैरामीटर के साथ सभी स्थानीय ड्राइव का स्वचालित पता लगाना--no-csv-header--threads पैरामीटर--cvs-clean पैरामीटर--cvs-stats पैरामीटर--fix कमांड .jar संग्रह को दूषित कर सकता था।पिछले बदलावों के लिए रिलीज़ नोट्स देखें
या तो Python इंटरप्रेटर से चलाएँ या dist फ़ोल्डर से Windows/Linux बाइनरी का उपयोग करें।
इसे पूरे फ़ाइलसिस्टम तक पहुंच (कम से कम केवल-पढ़ने) वाले उपयोगकर्ता के रूप में चलाने से सावधान रहें। log4shell-finder केवल उन फ़ोल्डरों को पार करता है जिन तक इसकी पहुंच है, अनुमति अस्वीकार त्रुटियों की रिपोर्ट नहीं करता।
PS C:\D\log4shell_finder> python3 .\test_log4shell.py --help
usage: Type "test_log4shell.py --help" for more information
On Windows "test_log4shell.py c:\ d:\"
On Linux "test_log4shell.py /"
Searches file system for vulnerable log4j version.
positional arguments:
folders List of folders or files to scan. Use "-" to read list of files from stdin. On MS Windows use "all" to scan all local drives.
optional arguments:
-h, --help show this help message and exit
--exclude-dirs DIR [DIR ...]
Exclude given directories from search.
-s, --same-fs Don't scan mounted volumens.
-j [FILE], --json-out [FILE]
Save results to json file.
-c [FILE], --csv-out [FILE]
Save results to csv file.
--csv-clean Add CLEAN status line in case no entries found
--csv-stats Add STATS line into csv output.
--no-csv-header Don't write CSV header to the output file.
-f, --fix Fix vulnerable by renaming JndiLookup.class into JndiLookup.vulne.
--threads [THREADS] Specify number of threads to use for parallel processing, default is 6.
--file-log [LOGFILE] Enable logging to log file, default is log4shell-finder.log.
--progress [SEC] Report progress every SEC seconds, default is 10 seconds.
--no-errors Suppress printing of file system errors.
--strange Report also strange occurences with pom.properties without binary classes (e.g. source or test packages)
-d, --debug Increase verbosity, mainly for debugging purposes.
-v, --version show program's version number and exit
इसे किसी अतिरिक्त Python लाइब्रेरी की आवश्यकता नहीं है।
बाइनरी इसके साथ उत्पन्न की गई:
pip install pyinstaller
pyinstaller -F ./test_log4shell.py
यदि आप 32bit संस्करण बनाना चाहते हैं, तो 32bit Python इंटरप्रेटर स्थापित करें, pyinstaller को इसके साथ स्थापित करें:
C:\Users\User\AppData\Local\Programs\Python\Python38-32\python.exe -m pip install pyinstaller
और फिर:
C:\Users\User\AppData\Local\Programs\Python\Python38-32\Scripts\pyinstaller.exe -n test_log4shell-mswin32 -F test_log4shell.py
Linux पर आप इस तरह चला सकते हैं:
python3 ./test_log4shell.py / /opt --same-fs --no-errors
MS Windows के लिए:
python3 .\test_log4shell.py c:\ d:\ --same-fs --no-errors
MS Windows पर:
सुनिश्चित करें कि आपने pywin32 स्थापित किया है, जैसे pip install pywin32 के माध्यम से
PS C:\D\log4shell_finder> python3 .\test_log4shell.py c:\ --same-fs --no-errors
8 .8 8 8 8 d'b o 8
8 d'8 8 8 8 8 8
8 .oPYo. .oPYo. d' 8 .oPYo. 8oPYo. .oPYo. 8 8 o8P o8 odYo. .oPYo8 .oPYo. oPYo.
8 8 8 8 8 Pooooo Yb.. 8 8 8oooo8 8 8 8 8 8' `8 8 8 8oooo8 8 `'
8 8 8 8 8 8 'Yb. 8 8 8. 8 8 8 8 8 8 8 8 8. 8
8 `YooP' `YooP8 8 `YooP' 8 8 `Yooo' 8 8 8 8 8 8 `YooP' `Yooo' 8
..:.....::....8 ::::..::.....:..:::..:.....:....:::::::..:::....::..:.....::.....:..::::
:::::::::::ooP'.::::::::::::::::::::::::::::::::: Version 1.17-20220105 ::::::::::::
:::::::::::...::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Parameters: .\test_log4shell.py c:\ --same-fs --no-errors
Host info: 'hostname': 'TESTHOST', 'fqdn': 'TESTHOST.example.com', 'ip': '10.0.0.1', 'system': 'Windows', 'release': '10', 'version': '10.0.19043', 'machine': 'AMD64', 'cpu': 'Intel64 Family 6 Model 142 Stepping 12, GenuineIntel'
[+] [CVE-2021-4104 (8.1)] Package c:\Program Files\Microsoft SQL Server\150\DTS\Extensions\Common\Jars\log4j-1.2.17.jar contains Log4J-1.2.17 <= 1.2.17, JMSAppender.class found
[+] [CVE-2021-44832 (6.6), CVE-2021-45046 (9.0), CVE-2021-45105 (5.9)] Package c:\Program Files\OWASP\Zed Attack Proxy\lib\log4j-core-2.15.0.jar contains Log4J-2.15.0 == 2.15.0
[+] [CVE-2021-44228 (10.0), CVE-2021-44832 (6.6), CVE-2021-45046 (9.0), CVE-2021-45105 (5.9)] Package c:\Users\testuser\Downloads\sqldeveloper-20.4.1.407.0006-x64.zip -> sqldeveloper/sqldeveloper/lib/log4j-core.jar contains Log4J-2.13.3 >= 2.10.0
[+] [CVE-2021-44228 (10.0), CVE-2021-44832 (6.6), CVE-2021-45046 (9.0), CVE-2021-45105 (5.9)] Package c:\Users\testuser\Downloads\sqldeveloper-20.4.1.407.0006-x64\sqldeveloper\sqldeveloper\lib\log4j-core.jar contains Log4J-2.13.3 >= 2.10.0
Scanned 1162924 files in 286638 folders.
Found 1 instances vulnerable to CVE-2021-4104 (8.1)
Found 2 instances vulnerable to CVE-2021-44228 (10.0)
Found 3 instances vulnerable to CVE-2021-44832 (6.6)
Found 3 instances vulnerable to CVE-2021-45046 (9.0)
Found 3 instances vulnerable to CVE-2021-45105 (5.9)
Kali को स्कैन करना, प्रगति हर सेकंड रिपोर्ट की गई और zip-bomb फ़ोल्डर को बाहर रखा गया:
root@kali:/home/hynek/log4shell-finder# python3 test_log4shell.py / --same-fs --no-errors --progress 1 --exclude-dirs /usr/share/seclists/Payloads/Zip-Bombs/
8 .8 8 8 8 d'b o 8
8 d'8 8 8 8 8 8
8 .oPYo. .oPYo. d' 8 .oPYo. 8oPYo. .oPYo. 8 8 o8P o8 odYo. .oPYo8 .oPYo. oPYo.
8 8 8 8 8 Pooooo Yb.. 8 8 8oooo8 8 8 8 8 8' `8 8 8 8oooo8 8 `'
8 8 8 8 8 8 'Yb. 8 8 8. 8 8 8 8 8 8 8 8 8. 8
8 `YooP' `YooP8 8 `YooP' 8 8 `Yooo' 8 8 8 8 8 8 `YooP' `Yooo' 8
..:.....::....8 ::::..::.....:..:::..:.....:....:::::::..:::....::..:.....::.....:..::::
:::::::::::ooP'.::::::::::::::::::::::::::::::::: Version 1.18-20220106 ::::::::::::
:::::::::::...::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Parameters: test_log4shell.py / --same-fs --no-errors --progress 1 --exclude-dirs /usr/share/seclists/Payloads/Zip-Bombs/
Host info: 'hostname': 'kali', 'fqdn': 'kali', 'ip': '10.0.0.2', 'system': 'Linux', 'release': '5.14.0-kali4-amd64', 'version': '#1 SMP Debian 5.14.16-1kali1 (2021-11-05)', 'machine': 'x86_64', 'cpu': ''
Skipping mount point: /data
Skipping mount point: /home
Skipping mount point: /dev
Skipping mount point: /sys
[+] [CVE-2021-4104 (8.1)] Package /usr/share/paros/paros.jar contains Log4J-1.x <= 1.2.17, JMSAppender.class found
After 1 secs, scanned 119762 files in 4853 folders.
Currently at: /usr/share/icons/hicolor/48x48/apps/kali-jd-gui.png
Skipping blaclisted folder: /usr/share/seclists/Payloads/Zip-Bombs
After 2 secs, scanned 190067 files in 12980 folders.
Currently at: /usr/share/plasma/desktoptheme/kali/metadata.desktop
[+] [CVE-2021-44228 (10.0), CVE-2021-44832 (6.6), CVE-2021-45046 (9.0), CVE-2021-45105 (5.9)] Package /usr/share/jsql-injection/jsql-injection.jar contains Log4J-2.14.0 >= 2.10.0
After 3 secs, scanned 221233 files in 17725 folders.
Currently at: /usr/share/maltego/maltego-ui/modules/com-paterva-maltego-transform-finder.jar
[+] [CVE-2021-44228 (10.0), CVE-2021-44832 (6.6), CVE-2021-45046 (9.0), CVE-2021-45105 (5.9)] Package /usr/share/zaproxy/lib/log4j-core-2.14.1.jar contains Log4J-2.14.1 >= 2.10.0
[+] [CVE-2021-4104 (8.1)] Package /usr/share/javasnoop/lib/log4j-1.2.16.jar contains Log4J-1.2.16 <= 1.2.17, JMSAppender.class found
After 7 secs, scanned 233394 files in 18705 folders.
Currently at: /usr/share/images/desktop-base/login-background.svg
After 8 secs, scanned 301417 files in 27952 folders.
Currently at: /usr/lib/python3/dist-packages/faraday_plugins/plugins/repo/dirb/plugin.py
After 9 secs, scanned 342342 files in 34421 folders.
Currently at: /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/jexec
Skipping mount point: /run
Skipping mount point: /proc
Scanned 379253 files in 37742 folders in 9.9 seconds.
Found 2 instances vulnerable to CVE-2021-4104 (8.1)
Found 2 instances vulnerable to CVE-2021-44228 (10.0)
Found 2 instances vulnerable to CVE-2021-44832 (6.6)
Found 2 instances vulnerable to CVE-2021-45046 (9.0)
Found 2 instances vulnerable to CVE-2021-45105 (5.9)
json में आउटपुट में सभी मिली वस्तुएं और होस्ट जानकारी शामिल है:
{
"hostname": "myserver",
"fqdn": "myserver",
"ip": "10.0.0.1",
"system": "Linux",
"release": "5.4.0-58-generic",
"version": "#64-Ubuntu SMP Wed Dec 9 08:16:25 UTC 2020",
"machine": "x86_64",
"cpu": "x86_64",
"cmdline": "./test_log4shell.py / --exclude-dirs /mnt --same-fs --csv-out --json-out",
"starttime": "2021-12-22 07:07:54",
"items": [
{
"container": "Package",
"path": "/home/hynek/.m2/repository/org/apache/logging/log4j/log4j-core/2.14.1/log4j-core-2.14.1.jar",
"status": "CVE_2021_44228",
"message": "contains Log4J-2.14.1 >= 2.10.0",
"pom_version": "2.14.1"
},
{
"container": "Package",
"path": "/home/hynek/.m2/repository/org/apache/logging/log4j/log4j-core/2.16.0/log4j-core-2.16.0.jar",
"status": "NOTOKAY",
"message": "contains Log4J-2.16.0 == 2.16.0",
"pom_version": "2.16.0"
},
{
"container": "Package",
"path": "/home/hynek/.m2/repository/log4j/log4j/1.2.17/log4j-1.2.17.jar",
"status": "CVE_2021_4104",
"message": "contains Log4J-1.2.17 <= 1.2.17, JMSAppender.class found",
"pom_version": "1.2.17"
},
{
"container": "Package",
"path": "/home/hynek/.m2/repository/log4j/log4j/1.2.12/log4j-1.2.12.jar",
"status": "CVE_2021_4104",
"message": "contains Log4J-1.x <= 1.2.17, JMSAppender.class found",
"pom_version": "1.x"
},
{
"container": "Package",
"path": "/home/hynek/war/elastic-apm-java-aws-lambda-layer-1.28.1.zip:elastic-apm-agent-1.28.1.jar",
"status": "MAYBESAFE",
"message": "contains Log4J-2.12.1 <= 2.0-beta8 (JndiLookup.class not present)",
"pom_version": "2.12.1"
}
]
}
इसमें निम्नलिखित कॉलम हैं:
"datetime","ver","ip","fqdn","OS","Release","arch","container","status","path","message","pom_version","product"
"2022-01-24 10:59:36","1.22pre-20220123","10.0.0.1","mylinux","Linux","5.4.0-58-generic","x86_64","Folder","CVE-2022-23302 (6.6), CVE-2022-23305 (8.1), CVE-2022-23307 (8.1)","/home/hynek/war.bak/reload4j/reload4j-1.2.18.0/org/apache/log4j","contains log4j-1.2.18.0","1.2.18.0","log4j"
"2022-01-24 10:59:36","1.22pre-20220123","10.0.0.1","mylinux","Linux","5.4.0-58-generic","x86_64","Package","OLDSAFE","/home/hynek/war.bak/reload4j/reload4j-1.2.18.2.jar","contains reload4j-1.2.18.2","1.2.18.2","reload4j"
"2022-01-24 10:59:36","1.22pre-20220123","10.0.0.1","mylinux","Linux","5.4.0-58-generic","x86_64","Package","OLDSAFE","/home/hynek/war.bak/reload4j/reload4j-1.2.18.1.jar","contains reload4j-1.2.18.1","1.2.18.1","reload4j"
"2022-01-24 10:59:36","1.22pre-20220123","10.0.0.1","mylinux","Linux","5.4.0-58-generic","x86_64","Package","CVE-2019-17571 (9.8), CVE-2021-4104 (7.5), CVE-2022-23302 (6.6), CVE-2022-23305 (8.1), CVE-2022-23307 (8.1)","/home/hynek/war.bak/reload4j/log4j-1.2.17.jar","contains log4j-1.2.17","1.2.17","log4j"
"2022-01-24 10:59:36","1.22pre-20220123","10.0.0.1","mylinux","Linux","5.4.0-58-generic","x86_64","Package","CVE-2022-23302 (6.6), CVE-2022-23305 (8.1), CVE-2022-23307 (8.1)","/home/hynek/war.bak/reload4j/reload4j-1.2.18.0.jar","contains log4j-1.2.18.0","1.2.18.0","log4j"
| पता लगाता है | CVE | CVSSv3 | गंभीरता | Java | कमजोरी की शुरुआत | असुरक्षित संस्करण | फिक्स संस्करण | लाइब्रेरी |
|---|
| YES | CVE-2021-44228 | 10.0 | गंभीर | 8 | 2.0-beta9 | 2.14.1 | 2.15.0 | log4jv2 |
| YES | CVE-2017-5645 | 9.8 | गंभीर | 7 | 2.0-alpha1 | 2.8.1 | 2.8.2 | log4jv2 |
| YES | CVE-2019-17571 | 9.8 | गंभीर | 1.2.0 | 1.2.17 | nofix | log4jv1 | |
| YES | CVE-2021-45046 | 9.0 | गंभीर | 7/8 | 2.0-beta9 | 2.15.0, 2.12.2 को छोड़कर | 2.12.2/2.16.0 | log4jv2 |
| YES | CVE-2022-23305 | 9.8 | गंभीर | 1.2.0 | 1.2.17 | nofix / 1.2.18.1 | log4jv1, reload4j | |
| YES | CVE-2022-23307 | 9.8 | गंभीर | 1.2.0 | 1.2.17 | nofix / 1.2.18.1 | log4jv1, reload4j | |
| YES | CVE-2022-23302 | 8.8 | उच्च | 1.0 | 1.2.17 | nofix / 1.2.18.1 | log4jv1, reload4j | |
| YES | CVE-2021-4104 | 7.5 | उच्च | - | 1.0 | 1.2.17 | nofix | log4jv1 |
| YES | CVE-2021-44832 | 6.6 | मध्यम | 6/7/8 | 2.0-alpha7 | 2.17.0, 2.3.2/2.12.4 को छोड़कर | 2.3.2/2.12.4/2.17.1 | log4jv2 |
| - | CVE-2021-42550 | 6.6 | मध्यम | - | 1.0 | 1.2.7 | 1.2.8 | logback |
| YES | CVE-2021-45105 | 5.9 | मध्यम | 6/7/8 | 2.0-beta9 | 2.16.0, 2.12.3 को छोड़कर | 2.3.1/2.12.3/2.17.0 | log4jv2 |
| - | CVE-2020-9488 | 3.7 | निम्न | 7/8 | 2.0-alpha1 | 2.13.1 | 2.12.3/2.13.2 | log4jv2 |