
CVE-2024-38819 का गहराई से विश्लेषण, एक Spring WebFlux फ़ाइल ट्रैवर्सल कमज़ोरी, जिसमें कोड-स्तरीय विवरण, PoC, और फ़िल्टर और IPS नियमों सहित शमन रणनीतियाँ शामिल हैं।
File-Traversal (पथ अन्वेषण, Path Traversal) भेद्यता एक ऐसी कमजोरी है जो हमलावर को वेब एप्लिकेशन में फ़ाइल सिस्टम की अनुमतियों को दरकिनार कर मनमानी फ़ाइलों तक पहुँचने की अनुमति देती है, और इसे CWE-22 नामक एक प्रकार के हमले के रूप में नामित किया गया है।
Spring WebFlux एक मॉड्यूल है जो Spring 5 में प्रस्तुत किया गया था और रिएक्टिव प्रोग्रामिंग का समर्थन करता है, जो एसिंक्रोनस नॉन-ब्लॉकिंग एप्लिकेशन विकास का समर्थन करता है, और WebFlux.fn फ़ंक्शनल एंडपॉइंट रूटिंग प्रदान करता है, जो लैम्ब्डा अभिव्यक्तियों के उपयोग से संक्षिप्त और लचीली रूटिंग कॉन्फ़िगरेशन का समर्थन करता है।
CVE-2024-38819 WebFlux.fn, WebMVC.fn का उपयोग करने वाले एप्लिकेशन में उत्पन्न होता है, और यह दस्तावेज़ देखता है कि यह भेद्यता WebFlux के आधार पर कैसे उत्पन्न होती है, कोड प्रवाह की जाँच करता है, और उसके अनुसार समाधान के उपाय तलाशता है।
[चित्र 1] FileApplication.java
[चित्र 2] PathResourceLookupFunction.class - apply
[चित्र 3] PathResourceLookupFunction.class - isInvalidPath
[चित्र 4] StringUtils.class - cleanPath
[चित्र 5] PathResourceLookupFunction.class - apply - 2
[चित्र 6] PathResourceLookupFunction.class - isResourceUnderLocation
[चित्र 7] StringUtils.class - cleanPath -2
वर्तमान में विंडोज में C:/file के साथ परीक्षण किया गया है, लेकिन यह मामला लिनक्स में सिम्बोलिक लिंक के साथ काम करने पर बहुत खतरनाक है।
(../../ दो बार सेट करने पर सामान्य तर्क, ../ केवल एक बार होने पर ही भेद्यता उत्पन्न होती है)

लिनक्स सर्वर पर सिम्बोलिक लिंक के साथ हमला
public RouterFunction<ServerResponse> staticResourceRouter() {
return RouterFunctions.resources("/static/**", new FileSystemResource("/app/static/"));
}
सिम्बोलिक लिंक जोड़ें ln -s /static /app/static/link, फिर हमला

अब तक हमने देखा कि Spring Webflux वातावरण में File Traversal (CVE-2024-38819) कैसे क्रियान्वित होता है। यह सर्वर की जानकारी चुराने वाला हमला है, इसलिए समाधान के उपाय महत्वपूर्ण हैं। इसके लिए हम नवीनतम संस्करण अपडेट, अतिरिक्त जाँच तर्क निर्माण, और IPS के माध्यम से अवरोधन के उपाय प्रस्तुत करते हैं।
@Bean
public RouterFunction<ServerResponse> staticResourceRouter() {
return RouterFunctions.resources("/static/**", new FileSystemResource("C:/file"))
.filter((request, next) -> {
String path = request.path();
if (path.contains("..")) {
if(!StringUtils.cleanPath(path).contains("../")) {
return ServerResponse.status(HttpStatus.FORBIDDEN).bodyValue("Vuln path access.");
}
}
return next.handle(request);
});
}
../ ऊपरी पथ की ओर जाने वाले सभी url अनुरोधों को अवरुद्ध करना
अब तक हमने Webflux के माध्यम से File Traversal के बारे में जाना। यह भेद्यता StringUtils.cleanPath() के तर्क में उत्पन्न समस्या को न पहचानने के कारण हुई थी।
(POC)
https://github.com/masa42/CVE-2024-38819-POC
(स्प्रिंग आधिकारिक)
https://spring.io/security/cve-2024-38819
(CVE-DETAIL)
https://www.cvedetails.com/cve/CVE-2024-38819/
(NIST)
https://nvd.nist.gov/vuln/detail/cve-2024-38819