# Iframes em XSS, CSP e SOP {% 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)
Supporte o 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 %} ## Iframes em XSS Existem 3 maneiras de indicar o conteúdo de uma página em um iframe: * Via `src` indicando uma URL (a URL pode ser de origem cruzada ou mesma origem) * Via `src` indicando o conteúdo usando o protocolo `data:` * Via `srcdoc` indicando o conteúdo **Acessando variáveis Pai & Filho** ```html ``` ```html ``` Se você acessar o html anterior via um servidor http (como `python3 -m http.server`), você notará que todos os scripts serão executados (já que não há CSP impedindo isso). **o pai não poderá acessar a variável `secret` dentro de qualquer iframe** e **apenas os iframes if2 e if3 (que são considerados do mesmo site) podem acessar o segredo** na janela original.\ Note como if4 é considerado ter origem `null`. ### Iframes com CSP {% hint style="info" %} Por favor, note como nos seguintes bypasses a resposta para a página iframed não contém nenhum cabeçalho CSP que impeça a execução de JS. {% endhint %} O valor `self` de `script-src` não permitirá a execução do código JS usando o protocolo `data:` ou o atributo `srcdoc`.\ No entanto, mesmo o valor `none` do CSP permitirá a execução dos iframes que colocam uma URL (completa ou apenas o caminho) no atributo `src`.\ Portanto, é possível contornar o CSP de uma página com: ```html ``` Note que o **CSP anterior só permite a execução do script inline**.\ No entanto, **apenas os scripts `if1` e `if2` serão executados, mas apenas `if1` poderá acessar o segredo do pai**. ![](<../../.gitbook/assets/image (372).png>) Portanto, é possível **contornar um CSP se você puder fazer upload de um arquivo JS para o servidor e carregá-lo via iframe, mesmo com `script-src 'none'`**. Isso pode **potencialmente ser feito abusando de um endpoint JSONP de mesmo site**. Você pode testar isso com o seguinte cenário onde um cookie é roubado mesmo com `script-src 'none'`. Basta executar o aplicativo e acessá-lo com seu navegador: ```python import flask from flask import Flask app = Flask(__name__) @app.route("/") def index(): resp = flask.Response('') resp.headers['Content-Security-Policy'] = "script-src 'self'" resp.headers['Set-Cookie'] = 'secret=THISISMYSECRET' return resp @app.route("/cookie_s.html") def cookie_s(): return "" if __name__ == "__main__": app.run() ``` ### Outros Payloads encontrados na natureza ```html ``` ### Iframe sandbox O conteúdo dentro de um iframe pode estar sujeito a restrições adicionais através do uso do atributo `sandbox`. Por padrão, esse atributo não é aplicado, o que significa que não há restrições em vigor. Quando utilizado, o atributo `sandbox` impõe várias limitações: * O conteúdo é tratado como se originasse de uma fonte única. * Qualquer tentativa de enviar formulários é bloqueada. * A execução de scripts é proibida. * O acesso a certas APIs é desativado. * Impede que links interajam com outros contextos de navegação. * O uso de plugins via ``, ``, `` ou tags similares é proibido. * A navegação do contexto de navegação de nível superior do conteúdo pelo próprio conteúdo é impedida. * Recursos que são acionados automaticamente, como reprodução de vídeo ou foco automático em controles de formulário, são bloqueados. O valor do atributo pode ser deixado vazio (`sandbox=""`) para aplicar todas as restrições mencionadas. Alternativamente, pode ser definido como uma lista de valores específicos separados por espaço que isentam o iframe de certas restrições. ```html ``` ## Iframes em SOP Verifique as seguintes páginas: {% content-ref url="../postmessage-vulnerabilities/bypassing-sop-with-iframes-1.md" %} [bypassing-sop-with-iframes-1.md](../postmessage-vulnerabilities/bypassing-sop-with-iframes-1.md) {% endcontent-ref %} {% content-ref url="../postmessage-vulnerabilities/bypassing-sop-with-iframes-2.md" %} [bypassing-sop-with-iframes-2.md](../postmessage-vulnerabilities/bypassing-sop-with-iframes-2.md) {% endcontent-ref %} {% content-ref url="../postmessage-vulnerabilities/blocking-main-page-to-steal-postmessage.md" %} [blocking-main-page-to-steal-postmessage.md](../postmessage-vulnerabilities/blocking-main-page-to-steal-postmessage.md) {% endcontent-ref %} {% content-ref url="../postmessage-vulnerabilities/steal-postmessage-modifying-iframe-location.md" %} [steal-postmessage-modifying-iframe-location.md](../postmessage-vulnerabilities/steal-postmessage-modifying-iframe-location.md) {% endcontent-ref %} {% 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 * Verifique 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 %}