Abusing Service Workers
Last updated
Last updated
AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE) GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)
서비스 워커는 웹 페이지와 분리되어 브라우저에서 백그라운드에서 실행되는 스크립트로, 웹 페이지나 사용자 상호작용이 필요하지 않은 기능을 가능하게 하여 오프라인 및 백그라운드 처리 기능을 향상시킵니다. 서비스 워커에 대한 자세한 정보는 여기에서 확인할 수 있습니다. 취약한 웹 도메인 내에서 서비스 워커를 악용함으로써 공격자는 해당 도메인 내의 모든 페이지에서 피해자의 상호작용을 제어할 수 있습니다.
기존 서비스 워커는 개발자 도구의 애플리케이션 탭의 서비스 워커 섹션에서 확인할 수 있습니다. 또 다른 방법은 chrome://serviceworker-internals를 방문하여 더 자세한 정보를 확인하는 것입니다.
푸시 알림 권한은 서비스 워커가 사용자와의 직접적인 상호작용 없이 서버와 통신할 수 있는 능력에 직접적인 영향을 미칩니다. 권한이 거부되면 서비스 워커가 지속적인 위협을 가할 가능성이 제한됩니다. 반대로, 권한을 부여하면 잠재적인 악용을 수신하고 실행할 수 있게 되어 보안 위험이 증가합니다.
이 취약점을 악용하기 위해서는 다음을 찾아야 합니다:
서버에 임의의 JS 파일을 업로드할 수 있는 방법과 업로드된 JS 파일의 서비스 워커를 로드할 수 있는 XSS
출력을 조작할 수 있는 취약한 JSONP 요청(임의의 JS 코드로)과 악성 서비스 워커를 로드할 페이로드로 JSONP를 로드할 수 있는 XSS.
다음 예제에서는 fetch
이벤트를 수신하고 각 가져온 URL을 공격자의 서버로 전송하는 새 서비스 워커를 등록하는 코드를 제시하겠습니다(이 코드는 서버에 업로드하거나 취약한 JSONP 응답을 통해 로드해야 하는 코드입니다):
그리고 이것은 워커를 등록하는 코드입니다 (당신이 XSS를 악용하여 실행할 수 있어야 하는 코드입니다). 이 경우 GET 요청이 공격자의 서버로 전송되어 서비스 워커의 등록이 성공했는지 여부를 알립니다:
취약한 JSONP 엔드포인트를 악용하는 경우 var sw
안에 값을 넣어야 합니다. 예를 들어:
There is a C2 dedicated to the exploitation of Service Workers called Shadow Workers that will be very useful to abuse these vulnerabilities.
The 24-hour cache directive limits the life of a malicious or compromised service worker (SW) to at most 24 hours after an XSS vulnerability fix, assuming online client status. To minimize vulnerability, site operators can lower the SW script's Time-To-Live (TTL). Developers are also advised to create a service worker kill-switch for rapid deactivation.
importScripts
in a SW via DOM ClobberingThe function importScripts
called from a Service Worker can import a script from a different domain. If this function is called using a parameter that an attacker could modify he would be able to import a JS script from his domain and get XSS.
This even bypasses CSP protections.
Example vulnerable code:
index.html
sw.js
DOM 클로버링이 무엇인지에 대한 더 많은 정보는 다음을 확인하세요:
Dom ClobberingSW가 **importScripts
**를 호출하는 URL/도메인이 HTML 요소 내부에 있을 경우, DOM 클로버링을 통해 이를 수정하여 SW가 자신의 도메인에서 스크립트를 로드하도록 할 수 있습니다.
이와 관련된 예시는 참조 링크를 확인하세요.
AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE) GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)