
CVE-2024-36401 का प्रतिलिपि योग्य अध्ययन: JXPath eval इंजेक्शन के माध्यम से GeoServer में अप्रमाणित RCE। इसमें तकनीकी रिपोर्ट, कार्यशील शोषण/सत्यापक, और कमजोर बनाम पैच किए गए इंस्टेंस पर दोष प्रदर्शित करने वाला Docker वातावरण शामिल है।
CVE-2024-36401 का एक पूर्ण, पुनरुत्पादक अध्ययन, जो GeoServer में एक अप्रमाणित रिमोट कोड निष्पादन दोष है — भू-स्थानिक डेटा के लिए सबसे व्यापक रूप से उपयोग किया जाने वाला ओपन-सोर्स सर्वर। यह बग एक eval इंजेक्शन है: OGC मानकों के पैरामीटर के माध्यम से, GeoServer हमलावर-नियंत्रित प्रॉपर्टी नाम GeoTools को सौंपता है, जहाँ Apache Commons JXPath उन्हें XPath एक्सप्रेशन के रूप में मूल्यांकित करता है और, डिज़ाइन के अनुसार, रिफ्लेक्शन के माध्यम से मनमानी Java विधियों को कॉल कर सकता है। इसलिए exec(java.lang.Runtime.getRuntime(),'id') जैसा एक अप्रमाणित अनुरोध होस्ट पर कमांड चलाता है।
इस रिपॉजिटरी में तकनीकी रिपोर्ट, एक कार्यशील शोषण/सत्यापनकर्ता, और एक एक-कमांड Docker वातावरण है जो कमजोर इंस्टेंस पर RCE प्रदर्शित करता है और पैच किए गए इंस्टेंस पर उसी शोषण के विफल होने को दिखाता है।
शैक्षिक परियोजना। एक विश्वविद्यालय पाठ्यक्रम (डेटा गोपनीयता और सुरक्षा, LUISS DASMA) के लिए बनाया गया। सब कुछ केवल स्थानीय, पृथक कंटेनरों के विरुद्ध चलता है — देखें।
| क्षेत्र | मान |
|---|---|
| CVE (GeoServer) | CVE-2024-36401 |
| मूल कारण (GeoTools) | CVE-2024-36404 |
| प्रकार | अप्रमाणित रिमोट कोड निष्पादन |
| CWE | CWE-95, Eval Injection |
| CVSS v3.1 | 9.8 गंभीर (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H) |
| प्रभावित | GeoServer < 2.25.2 / GeoTools < 31.2 (और पुरानी शाखाएँ) |
| CISA KEV | हाँ (15 जुलाई 2024) |
| अध्ययन किए गए संस्करण | कमजोर 2.25.1, पैच किया गया 2.25.2 |
.
├── report/
│ ├── report.pdf # the full technical report (read this first)
│ ├── report.md # report source (Pandoc/XeLaTeX)
│ └── images/ # figures and screenshots
├── docker/
│ ├── vulnerable/Dockerfile # GeoServer 2.25.1 (vulnerable)
│ └── patched/Dockerfile # GeoServer 2.25.2 (fixed)
├── docker-compose.yml # vuln on :8080, patched on :8081
├── exploit/
│ ├── exploit.py # exploit + vuln/patched verifier (stdlib only)
│ ├── exploit.sh # curl-based PoC (GET + POST variants)
│ ├── payloads.md # payload catalogue per OGC endpoint
│ └── output/ # captured proof logs and transcripts
└── run-reproduction.sh # one command: build + exploit both + collect proofs
आवश्यकताएँ: Docker Desktop चल रहा हो, python3, curl।
# Build both containers, run the exploit against each, and collect the proofs
chmod +x run-reproduction.sh
./run-reproduction.sh
या चरण दर चरण:
docker compose up -d --build # vuln on :8080, patched on :8081
# Vulnerable (expected: VULNERABLE, ~8s delay)
python3 exploit/exploit.py -t http://localhost:8080/geoserver --label vuln -o exploit/output
# Patched (expected: PATCHED, immediate rejection)
python3 exploit/exploit.py -t http://localhost:8081/geoserver --label patched -o exploit/output
docker compose down # when finished
दो स्वतंत्र जांच परिणाम को स्पष्ट बनाती हैं:
java.lang.Thread.sleep(8000) XPath का मूल्यांकन करने वाले थ्रेड को ब्लॉक करता है, इसलिए HTTP प्रतिक्रिया में ~8 सेकंड की देरी होती है — क्लाइंट से मापने योग्य, कंटेनर तक पहुंच की आवश्यकता नहीं। यह वही कैनरी है जिसका उपयोग आधिकारिक फिक्स परीक्षणों में किया जाता है।exec(java.lang.Runtime.getRuntime(),'touch /tmp/<marker>') कंटेनर के अंदर एक फ़ाइल बनाता है, जिसे docker exec से सत्यापित किया जा सकता है।कमजोर इंस्टेंस पर, पेलोड को हाथ से भेजने पर ProcessImpl पर ClassCastException वापस आता है — JVM ने Runtime.exec चलाया और फिर परिणामी Process ऑब्जेक्ट को एक एट्रिब्यूट के रूप में उपयोग करने में विफल रहा। वह अपवाद ही निष्पादन का प्रमाण है:

GeoTools कमिट e53e5170 (GeoServer 2.25.2, 2.24.4, 2.23.6, 2.22.6 में) बग के दोनों हिस्सों पर गहन सुरक्षा लागू करता है:
JXPathUtils.newSafeContext(...) हेल्पर एक खाली FunctionLibrary स्थापित करता है, जिससे JXPath अब exec/Thread.sleep को फ़ंक्शन के रूप में हल नहीं कर सकता — स्ट्रिंग एक सादा प्रॉपर्टी नाम बनी रहती है।FeaturePropertyAccessorFactory अब SimpleFeatureType की भी जाँच करता है, ताकि सरल फीचर अब कमजोर एक्सेसर तक न पहुँचें।पैच किए गए इंस्टेंस पर वही पेलोड No such attribute: ... लौटाता है और कुछ नहीं चलता। पूर्ण विवरण — प्रभावित कोड फ़ाइल/लाइन संदर्भों के साथ, शोषण, शमन अंतर, और साथ-साथ पुनरुत्पादन — report/report.pdf में हैं।
यह CVE सार्वजनिक है, 18 महीने से अधिक समय से पैच किया गया है, CISA ज्ञात शोषित कमजोरियों की सूची में है, और इसमें सार्वजनिक PoCs (Vulhub, Nuclei, Metasploit) हैं। यहाँ कोड केवल localhost और इस रिपॉजिटरी में पृथक अध्ययन कंटेनरों को लक्षित करता है। इसका उपयोग उन प्रणालियों के विरुद्ध न करें जिनके आप मालिक नहीं हैं या जिनका परीक्षण करने के लिए आप स्पष्ट रूप से अधिकृत नहीं हैं।
MIT © 2026 Daniele Giovanardi
Daniele Giovanardi — डेटा साइंस और प्रबंधन (DASMA), LUISS Guido Carli। डेटा गोपनीयता और सुरक्षा के लिए पाठ्यक्रम कार्य।