Abusing Service Workers
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ein Service Worker ist ein Skript, das von Ihrem Browser im Hintergrund ausgeführt wird, getrennt von jeder Webseite, und Funktionen ermöglicht, die keine Webseite oder Benutzerinteraktion erfordern, wodurch die Offline- und Hintergrundverarbeitungsfähigkeiten verbessert werden. Detaillierte Informationen zu Service Workern finden Sie hier. Durch das Ausnutzen von Service Workern innerhalb einer verwundbaren Web-Domain können Angreifer die Kontrolle über die Interaktionen des Opfers mit allen Seiten innerhalb dieser Domain erlangen.
Vorhandene Service Worker können im Abschnitt Service Workers des Application-Tabs in den Entwicklertools überprüft werden. Eine andere Methode ist der Besuch von chrome://serviceworker-internals für eine detailliertere Ansicht.
Berechtigungen für Push-Benachrichtigungen wirken sich direkt auf die Fähigkeit eines Service Workers aus, ohne direkte Benutzerinteraktion mit dem Server zu kommunizieren. Wenn Berechtigungen verweigert werden, wird das Potenzial des Service Workers, eine kontinuierliche Bedrohung darzustellen, eingeschränkt. Im Gegensatz dazu erhöht das Gewähren von Berechtigungen die Sicherheitsrisiken, indem es den Empfang und die Ausführung potenzieller Exploits ermöglicht.
Um diese Schwachstelle auszunutzen, müssen Sie Folgendes finden:
Eine Möglichkeit, willkürliche JS-Dateien auf den Server hochzuladen und ein XSS, um den Service Worker der hochgeladenen JS-Datei zu laden
Eine verwundbare JSONP-Anfrage, bei der Sie die Ausgabe (mit willkürlichem JS-Code) manipulieren können, und ein XSS, um die JSONP mit einem Payload zu laden, der einen bösartigen Service Worker lädt.
Im folgenden Beispiel werde ich einen Code präsentieren, um einen neuen Service Worker zu registrieren, der das fetch
-Ereignis abhört und jede abgerufene URL an den Server des Angreifers sendet (dies ist der Code, den Sie hochladen müssten, um ihn auf den Server zu laden oder über eine verwundbare JSONP-Antwort zu laden):
Und dies ist der Code, der den Worker registriert (den Code, den Sie ausführen sollten, indem Sie eine XSS ausnutzen). In diesem Fall wird eine GET-Anfrage an den Angreifer-Server gesendet, die benachrichtigt, ob die Registrierung des Service Workers erfolgreich war oder nicht:
Im Falle des Missbrauchs eines anfälligen JSONP-Endpunkts sollten Sie den Wert in var sw
einfügen. Zum Beispiel:
Es gibt ein C2, das der Ausnutzung von Service Workern gewidmet ist, namens Shadow Workers, das sehr nützlich sein wird, um diese Schwachstellen auszunutzen.
Die 24-Stunden-Cache-Direktive begrenzt die Lebensdauer eines bösartigen oder kompromittierten Service Workers (SW) auf maximal 24 Stunden nach einer XSS-Schwachstellenbehebung, vorausgesetzt, der Client ist online. Um die Verwundbarkeit zu minimieren, können die Betreiber der Website die Time-To-Live (TTL) des SW-Skripts verringern. Entwicklern wird außerdem geraten, einen Service Worker Kill-Switch für eine schnelle Deaktivierung zu erstellen.
importScripts
in einem SW über DOM ClobberingDie Funktion importScripts
, die von einem Service Worker aufgerufen wird, kann ein Skript von einer anderen Domain importieren. Wenn diese Funktion mit einem Parameter aufgerufen wird, den ein Angreifer ändern könnte, wäre er in der Lage, ein JS-Skript von seiner Domain zu importieren und XSS zu erhalten.
Dies umgeht sogar CSP-Schutzmaßnahmen.
Beispiel für anfälligen Code:
index.html
sw.js
Für weitere Informationen darüber, was DOM Clobbering ist, siehe:
Dom ClobberingWenn die URL/Domäne, die der SW verwendet, um importScripts
aufzurufen, innerhalb eines HTML-Elements ist, ist es möglich, sie über DOM Clobbering zu modifizieren, um die SW ein Skript von deiner eigenen Domäne laden zu lassen.
Für ein Beispiel dazu siehe den Referenzlink.
Lerne & übe AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lerne & übe GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)