Abusing Service Workers
Last updated
Last updated
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE) GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Bir service worker, tarayıcınız tarafından arka planda, herhangi bir web sayfasından ayrı olarak çalışan bir betiktir ve web sayfası veya kullanıcı etkileşimi gerektirmeyen özellikleri etkinleştirerek çevrimdışı ve arka plan işleme yeteneklerini artırır. Service worker'lar hakkında ayrıntılı bilgi burada bulunabilir. Kötü niyetli bir web alanında service worker'ları istismar ederek, saldırganlar kurbanın o alan içindeki tüm sayfalarla etkileşimlerini kontrol edebilirler.
Mevcut service worker'lar, Geliştirici Araçları'ndaki Uygulama sekmesinin Service Workers bölümünde kontrol edilebilir. Diğer bir yöntem ise daha ayrıntılı bir görünüm için chrome://serviceworker-internals adresini ziyaret etmektir.
Push bildirim izinleri, bir service worker'ın sunucu ile doğrudan kullanıcı etkileşimi olmadan iletişim kurma yeteneğini doğrudan etkiler. İzinler reddedilirse, service worker'ın sürekli bir tehdit oluşturma potansiyelini sınırlar. Tersine, izinlerin verilmesi, potansiyel istismarların alınmasını ve yürütülmesini sağlayarak güvenlik risklerini artırır.
Bu açığı istismar etmek için şunları bulmanız gerekir:
Sunucuya keyfi JS dosyaları yüklemenin bir yolunu ve yüklenen JS dosyasının service worker'ını yüklemek için bir XSS
Çıktıyı manipüle edebileceğiniz bir açık JSONP isteği (keyfi JS kodu ile) ve kötü niyetli bir service worker'ı yükleyecek bir yük ile JSONP'yi yüklemek için bir XSS.
Aşağıdaki örnekte, fetch
olayını dinleyecek ve her alınan URL'yi saldırganın sunucusuna gönderecek bir yeni service worker kaydetmek için bir kod sunacağım (bu, sunucuya yüklemeniz veya bir açık JSONP yanıtı aracılığıyla yüklemeniz gereken koddur):
Ve bu, işçiyi kaydedecek koddur (bu kodu bir XSS istismar ederek çalıştırabilmelisiniz). Bu durumda, hücum edenlerin sunucusuna kaydedilme işleminin başarılı olup olmadığını bildiren bir GET isteği gönderilecektir:
JSONP uç noktasını istismar etme durumunda, değeri var sw
içine koymalısınız. Örneğin:
Bir C2, bu güvenlik açıklarını istismar etmek için Service Workers'a adanmış Shadow Workers bulunmaktadır ve bu, bu güvenlik açıklarını istismar etmek için çok faydalı olacaktır.
24 saatlik önbellek direktifi, kötü niyetli veya tehlikeye girmiş bir service worker (SW)'ın ömrünü, çevrimiçi istemci durumu varsayılarak, bir XSS güvenlik açığı düzeltmesinden sonra en fazla 24 saat ile sınırlar. Güvenliği en aza indirmek için, site operatörleri SW betiğinin Yaşam Süresi (TTL) değerini düşürebilir. Geliştiricilere ayrıca hızlı devre dışı bırakma için bir service worker kill-switch oluşturmaları önerilir.
importScripts
'i İstismar EtmeBir Service Worker'dan çağrılan importScripts
fonksiyonu, farklı bir alandan bir betik içe aktarabilir. Eğer bu fonksiyon, bir saldırganın değiştirebileceği bir parametre kullanılarak çağrılırsa, saldırgan kendi alanından bir JS betiği içe aktarabilir ve XSS elde edebilir.
Bu, CSP korumalarını da aşar.
Örnek savunmasız kod:
index.html
sw.js
DOM Clobbering'in ne olduğu hakkında daha fazla bilgi için kontrol edin:
Dom ClobberingEğer SW'nin importScripts
çağrısı yaptığı URL/domain bir HTML öğesinin içindeyse, bu DOM Clobbering aracılığıyla değiştirilmesi mümkündür ve SW'nin kendi domaininizden bir script yüklemesini sağlar.
Bunun bir örneği için referans bağlantısına bakın.
AWS Hacking öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE) GCP Hacking öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)