Skip to content
KitploitKITPLOIT
उपकरणएक्सप्लॉइटब्लॉग
Log in
जमा करें
उपकरणएक्सप्लॉइटब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

फ़ीडसंपर्कगोपनीयता© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
study-struts2-s2-054_055-jackson-cve-2017-7525_cve-2017-15095 — Struts2 की कमज़ोरियाँ S2-045, S2-055 और Jackson की कमज़ोरियाँ CVE-2017-7525, CVE-2017-15095 की जाँच रिपोर्ट | Kitploit
उपकरण/GitHubGitHub/secureskytechnology/study-struts2-s2-054_055-jackson-cve-2017-7525_cve-2017-15095
भेद्यता विश्लेषणकोड विश्लेषणवेब एप्लिकेशन शोषणपेपर और शोधलर्निंग और शिक्षाArchived
GitHubsecureskytechnology/study-struts2-s2-054_055-jackson-cve-2017-7525_cve-2017-15095

study-struts2-s2-054_055-jackson-cve-2017-7525_cve-2017-15095

Struts2 की कमज़ोरियाँ S2-045, S2-055 और Jackson की कमज़ोरियाँ CVE-2017-7525, CVE-2017-15095 की जाँच रिपोर्ट

रिपॉजिटरी देखें
10621148 साल पहलेअभी तक समीक्षित नहीं

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

Struts2 की कमज़ोरी S2-054, S2-055 और Jackson की कमज़ोरी CVE-2017-7525, CVE-2017-15095 पर अनुसंधान रिपोर्ट

केवल मुख्य बिंदुओं को संक्षेप में, पढ़ने में आसान सारांश लेख प्रकाशित किया गया है। पहले सामान्य जानकारी जानने वालों या समय की कमी वालों के लिए अनुशंसित।

  • SSTtechlog 08 S2-054, S2-055 और jackson-databind की कमज़ोरी CVE-2017-7525, CVE-2017-15095 के बारे में | SST कंपनी सिक्योरस्काई टेक्नोलॉजी
    • https://www.securesky-tech.com/column/techlog/08.html

2017年12月1日 को Struts2 का सुरक्षा अपडेट जारी किया गया था। जारी होने से पहले ही मेलिंग सूची में यह बात फैल गई थी कि Jackson (जावा में लोकप्रिय JSON लाइब्रेरी) की कमज़ोरी इससे संबंधित है, और कंपनी के आंतरिक सिस्टम और टूल्स में Jackson का उपयोग करने वाले लेखक को भी इस बात की चिंता थी कि वास्तव में इसका स्वरूप क्या है।

  • https://lists.apache.org/thread.html/ed74083f2d7187e71ee5ed644c5e45ba58d0792b515d1d1cc28bfadf@%3Cdev.struts.apache.org%3E

वास्तव में जारी की गई सामग्री के अनुसार, निम्नलिखित दो सुरक्षा समस्याओं को ठीक किया गया था। Jackson के घटक jackson-databind की कमज़ोरी केवल S2-055 को प्रभावित करती है।

  • S2-055 : https://cwiki.apache.org/confluence/display/WW/S2-055
    • यह jackson-databind के CVE-2017-7525 के अनुरूप सुधार है।
    • Struts पक्ष की निर्भरता में jackson-databind को 2.9.2 में अपडेट किया गया है। इससे बाद में वर्णित CVE-2017-15095 भी कवर हो जाता है।
    • https://cwiki.apache.org/confluence/display/WW/Version+Notes+2.5.14.1
  • S2-054 : https://cwiki.apache.org/confluence/display/WW/S2-054
    • यह REST प्लगइन में JSON-lib ( http://json-lib.sourceforge.net/ ) नामक पुरानी JSON लाइब्रेरी का उपयोग किया जा रहा था, लेकिन DoS समस्या का संकेत दिया गया था, इसलिए इसे Jackson में बदलने का सुधार है।

REST प्लगइन में पहले से JSON-lib का उपयोग करने वाला हैंडलर और Jackson का उपयोग करने वाला हैंडलर शामिल था, जिसे उपयोगकर्ता चुन सकता था। S2-054 में डिफ़ॉल्ट हैंडलर को Jackson में स्विच किया गया, और S2-055 में Jackson के पुराने संस्करण को नवीनतम में अपडेट किया गया, यही इस सुधार का पूरा चित्र प्रतीत होता है।

तो आखिर CVE-2017-7525 कैसी कमज़ोरी है? लेखक स्वयं आमतौर पर जावा में JSON प्रसंस्करण के दौरान Jackson का उपयोग करता है, इसलिए 2, 3 दिसंबर के सप्ताहांत में इस समस्या की जांच की, यही इस लेख का विषय है।


नमूना कोड सत्यापन के लिए लेखक का वातावरण:

  • OS : Windows 10 Pro 64bit
  • Java : Oracle JDK 1.8.0_92 64bit
  • Groovy : 2.3.1

jackson-databind की कमज़ोरी CVE-2017-7525 के बारे में

Adam Caudill के ब्लॉग पर CVE-2017-7525 की व्याख्या प्रकाशित की गई है।

  • https://adamcaudill.com/2017/10/04/exploiting-jackson-rce-cve-2017-7525/

लेखक अपने शब्दों में संक्षेप में बताए तो, jackson-databind JSON को Java ऑब्जेक्ट में मैप करने की सुविधा (ObjectMapper वर्ग) प्रदान करता है। यहाँ ObjectMapper.enableDefaultTyping() को कॉल करके JSON में स्वतंत्र रूप से एम्बेड किए गए क्लास नाम से मैप करना संभव हो जाता है। "इनपुट JSON में क्लास नाम निर्दिष्ट करना संभव" - यह सुनते ही कुछ लोगों को बुरा पूर्वाभास हुआ होगा, लेकिन वही बुरा पूर्वाभास CVE-2017-7525 के रूप में सच हुआ।

कमज़ोरी की व्याख्या में जाने से पहले, आइए समझें कि आखिर ऐसी सुविधा क्यों लागू की गई।

ObjectMapper.enableDefaultTyping() सुविधा के बारे में

jackson-databind द्वारा deserialize के बुनियादी उपयोग के लिए कृपया निम्नलिखित नमूना कोड देखें। (इस लेख में Jackson के नमूना कोड में Groovy का उपयोग किया गया है। @Grab का उपयोग करके jackson-databind के संस्करण को आसानी से स्विच करना सुविधाजनक है।)

  • objectmapper-demo.groovy

उपरोक्त नमूना कोड में सरलता से "animal" कुंजी सीधे Animal वर्ग में मैप हो सकती है। ठीक है, निम्नलिखित स्थितियों में क्या होगा?```java class Zoo { Animal animal; }

abstract class Animal { String name; protected Animal() { } }

class Dog extends Animal { double barkVolume; Dog() { } }

class Cat extends Animal { boolean likesCream; int lives; Cat() { } }

इस कॉन्फ़िगरेशन में, "animal" की की-वैल्यू Dog क्लास को इंगित करने वाली और Cat क्लास को इंगित करने वाली दो तरह की स्थितियाँ उत्पन्न होती हैं। इसलिए, यह तय करने के लिए अतिरिक्त जानकारी की आवश्यकता है कि किस क्लास से मैपिंग की जाए।

इसे हल करने के लिए, jackson-databind ने एक कस्टम प्रक्रिया को शामिल किया है जो JSON में मैप किए जाने वाले क्लास के नाम को एम्बेड करने की अनुमति देती है। उदाहरण के लिए, नीचे दिए गए तरीके से, "animal" की को एक ऐरे में बदल दिया जाता है और पहले एलिमेंट में क्लास का नाम निर्दिष्ट किया जाता है।```
{"animal":["Dog",{"name":"dog1","barkVolume":1.2}]}

इसके परिणामस्वरूप ObjectMapper.readValue() "animal" कुंजी की सामग्री को Dog वर्ग के रूप में पहचानता है और मैपिंग करता है। बेशक, इस रूप में, यह निर्धारित नहीं किया जा सकता कि "animal" कुंजी की सामग्री मूल रूप से एक सरणी थी या इसमें jackson-databind का अद्वितीय वर्ग नाम जानकारी शामिल थी। इसे स्विच करने का तरीका ObjectMapper.enableDefaultTyping() विधि है। इसके अलावा वर्ग पर @JsonTypeInfo एनोटेशन को परिभाषित करने का भी एक तरीका है। विस्तृत जानकारी के लिए नीचे दिए गए Jackson दस्तावेज़ देखें।

  • JacksonPolymorphicDeserialization
    • https://github.com/FasterXML/jackson-docs/wiki/JacksonPolymorphicDeserialization

वास्तव में ObjectMapper.enableDefaultTyping() विधि का उपयोग करने वाला एक नमूना कोड नीचे दिखाया गया है।

  • enable-default-type-demo.groovy

CVE-2017-7525 का समाधान कक्षा नाम की ब्लैकलिस्ट जाँच द्वारा

जैसा कि ऊपर देखा गया है, वर्ग नाम के बाद उसके गुणों को JSON में देकर, कुछ सीमाओं के बावजूद, किसी भी वर्ग को किसी भी गुण के साथ उत्पन्न करना संभव हो जाता है। इसका दुरुपयोग CVE-2017-7525 की कमजोरी में किया गया था, और इसका कारण संभवतः निम्नलिखित रिपोर्ट थी:

  • Java Unmarshaller Security - Turning your data into code execution
    • https://github.com/mbechler/marshalsec

Jackson जैसे Java में सामान्यतः उपयोग किए जाने वाले serialize/deserialize लाइब्रेरीज़ के बारे में, वर्ग नामों आदि के संचालन से मनमाना कोड निष्पादन की ओर ले जाने वाले खतरे की रिपोर्ट की गई है, और वास्तव में कौन से वर्ग खतरनाक हैं, इसकी विशिष्ट वर्ग नामों की सूची दी गई है।

यह इसके जवाब में था या नहीं, यह स्पष्ट नहीं है, लेकिन तिथि के अनुसार, उपरोक्त रिपोर्ट के पहले कमिट के तुरंत बाद, jackson-databind में निम्नलिखित Issue खोला गया और समाधान शुरू हुआ।

  • Jackson Deserializer security vulnerability
    • https://github.com/FasterXML/jackson-databind/issues/1599

वास्तव में इस कमजोरी का शोषण करने वाला JSON डेटा और Java कोड कैसा होगा? इस Issue में संबोधित jackson-databind 2.8.9 के परीक्षण कोड में एक संकेत है:

  • https://github.com/FasterXML/jackson-databind/blob/jackson-databind-2.8.9/src/test/java/com/fasterxml/jackson/databind/interop/IllegalTypesCheckTest.java

इस परीक्षण कोड के आधार पर, कार्यशील सत्यापन के लिए समायोजित एक नमूना कोड नीचे दिया गया है।

  • cve-2017-7525-check.groovy
टूल डाउनलोड करें