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
出力を操作できる(任意のJSコードを使用)脆弱なJSONPリクエストと、ペイロードを持つ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クラッキングが何であるかの詳細については、以下を確認してください:
SWが**importScripts
を呼び出すために使用しているURL/ドメインがHTML要素内にある場合**、DOMクラッキングを介してそれを変更することが可能であり、SWが自分のドメインからスクリプトを読み込むようにできます。
この例については、参照リンクを確認してください。
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)