Abusing Service Workers
Try Hard Security Group
기본 정보
서비스 워커는 웹 페이지나 사용자 상호 작용이 필요하지 않은 기능을 활성화하여 오프라인 및 백그라운드 처리 기능을 향상시키는 브라우저에서 실행되는 스크립트입니다. 서비스 워커에 대한 자세한 정보는 여기에서 찾을 수 있습니다. 취약한 웹 도메인 내의 서비스 워커를 악용함으로써 공격자는 피해자의 도메인 내 모든 페이지와의 상호 작용을 제어할 수 있습니다.
기존 서비스 워커 확인
기존 서비스 워커는 개발자 도구의 Application 탭의 Service Workers 섹션에서 확인할 수 있습니다. 더 자세한 보기를 위해 chrome://serviceworker-internals을 방문할 수도 있습니다.
푸시 알림
푸시 알림 권한은 서비스 워커가 직접 사용자 상호 작용 없이 서버와 통신할 수 있는 능력에 직접적인 영향을 미칩니다. 권한이 거부되면 서비스 워커의 지속적인 위협 가능성이 제한됩니다. 반면 권한을 부여하면 잠재적인 악용의 수신 및 실행을 허용하여 보안 위험을 증가시킵니다.
서비스 워커 생성 공격
이 취약점을 악용하기 위해 다음을 찾아야 합니다:
임의의 JS 파일을 서버에 업로드하고 업로드된 JS 파일의 서비스 워커를 로드하는 XSS 방법
출력을 조작할 수 있는 취약한 JSONP 요청 및 임의의 JS 코드로 출력을 조작할 수 있는 XSS와 함께 JSONP를 로드하는 페이로드를 악의적인 서비스 워커를 로드할 수 있는 방법
다음 예제에서는 fetch
이벤트를 수신하고 각 가져온 URL을 공격자 서버로 보내는 새로운 서비스 워커를 등록하는 코드를 제시하겠습니다:
그리고 이것은 워커를 등록할 코드입니다 (XSS를 악용하여 실행할 수 있는 코드). 이 경우 공격자 서버로 GET 요청이 전송되어 서비스 워커의 등록이 성공했는지 여부를 알립니다:
JSONP 엔드포인트를 악용하는 경우 var sw
내부에 값을 넣어야 합니다. 예를 들어:
서비스 워커(SW) 악용을 위한 C2인 Shadow Workers는 이러한 취약점을 악용하는 데 매우 유용할 것입니다.
24시간 캐시 지시문은 악의적이거나 침해당한 **서비스 워커(SW)**의 수명을 최대 24시간으로 제한하며, XSS 취약점 수정 후 온라인 클라이언트 상태를 가정합니다. 취약성을 최소화하기 위해 사이트 운영자는 SW 스크립트의 Time-To-Live (TTL)을 낮출 수 있습니다. 개발자들은 또한 빠른 비활성화를 위해 서비스 워커 킬 스위치를 만들 것이 권장됩니다.
DOM Clobbering을 통한 SW 내 importScripts
악용
importScripts
악용서비스 워커에서 호출된 importScripts
함수는 다른 도메인에서 스크립트를 가져올 수 있습니다. 이 함수가 공격자가 수정할 수 있는 매개변수를 사용하여 호출되면 공격자는 자신의 도메인에서 JS 스크립트를 가져와 XSS를 얻을 수 있습니다.
이는 CSP 보호를 우회합니다.
취약한 코드 예시:
index.html
sw.js
DOM Clobbering을 사용하는 경우
DOM Clobbering이 무엇인지에 대한 자세한 정보는 확인하려면:
pageDom Clobbering만약 SW이 **importScripts
**를 호출하는 URL/도메인이 HTML 요소 내부에 있는 경우, DOM Clobbering을 통해 해당 URL을 수정하여 SW가 자신의 도메인에서 스크립트를로드하도록 만들 수 있습니다.
이에 대한 예제는 참조 링크를 확인하세요.
참고 자료
Try Hard Security Group
Last updated