Usages offensifs de XSLT
APerçu
Les logiciels modernes sont très complexes
Beaucoup de code est rédigé par
des tierces parties
Code non audité
==
Code non fiable
Nous comptons exploiter
des fonctionnalités !
Pas des erreurs
de conception ou
d'implémentation
Fiabilité des exploits ++
;-)
XSLT ?
XSLT : XSL Transformations
http://www.w3.org/TR/xslt
Un langage pour transformer
un document XML
en un autre document
(XML, PDF, TXT, SVG, ...)
exemple #1
Exemple #2
MethodologIE
Choisir des moteurs XSLT
Enumérer leurs fonctionnalités
Standards
Générés automatiquement à partir
de {element|function}-available() et
d'une représentation XML de la norme
Extensions propriétaires
Documentation
Source code
Strings
IDA
Identifier celles dangereuses
Volontairement limité à :
- identification du moteur
- création de fichier
- exécution de code
Hors périmètre :
- accès en lecture (contournement de la SOP ?)
- fourniture d'entrées malformées (fuzzing)
Pour chaque fonctionnalité dangereuse, obtenir un PoC minimaliste
Règles :
- une seule fonctionnalité
- pas de conteneur
- pas d'obfuscation
- pas de charge utile
- testable en CLI
Pour chaque format envisagé, obtenir un "conteneur"
Tout contenEuR respecte un format dans lequel peuvent être INCLUSES des transformationS XSL
Tester de nombreuses applications
Profiter !
Risques
Standards
Comme la plupart des moteurs supportent XSLT 1.0 ...
... on peut facilement
identifier le moteur sous-jacent
Mais rien de bien dangereux ...
Extensions propriétaires
VulnERABILITéS
Liferay
CMS en Java
Commercial (ou pas)
Liste de réferences sur le site
(avec moteur de recherche ;-)
Evidemment, c'est "secure" !
Malgré l'utilisation de Xalan-J ? Hum ...
Altova
WEBKIT
Utilise libxslt
Création de fichiers :
- nom & chemin arbitraires
- le contenu doit être en UTF-8
Editeurs impactés :
- Apple (Safari, iPhone, iPad, ...)
- RIM (Blackberry Torch)
- distributions Linux (Epiphany, Lifera, ...)
- et d'autres !
Chrome n'est pas vulnérable,
grâce à sa sanbox
Le correctif est disponible depuis Février
Personne ne l'a appliqué :-(
VidEo : SAfari + MOF
PHP 5
Utilise libxslt
Patch #54446 :
validé le 28 Avril
trunk du 4 Juin :
toujours pas appliqué
:-(
Attendez, ce n'est pas fini ...
void XSLTProcessor::registerPHPFunctions ([ mixed $restrict ] )
Cette méthode permet d'utiliser les fonctions PHP en tant que fonctions XSLT dans les feuilles de style XSL
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:php="http://php.net/xsl"
version="1.0">
...
<xsl:value-of select="php:function('phpinfo')"/>
...
</xsl:stylesheet>
XMLSEC
Utilise libxslt
J'aime les solutions de sécurité qui ont des bugs de sécurité ;-)
Editeurs (potentiellement) impactés :
- solutions de PKI
- solutions de SSO (SAML)
- utilisateurs de SWIFT eBAM
- et bien d'autres !
Et si le moteur est Xalan-J ...
... c'est pire :-(
Quid des recommandations
du W3C ?
Elles ne sont que rarement suivies :-(
Divers
ExploitatioN
Exécution de code
Facile, il suffit d'utiliser un reverse-shell Java ou JScript
Stuxnet MOF
Création de fichier
Cf. "USB Autorun attacks against Linux"
par IBM X-Force
CONCLUSION
Questions ?
Ne faites pas confiance
Auditez chaque brique de chacune de vos applications critiques
Utilisez vos leviers (dont financiers) pour influencer les éditeurs
Clients
Il reste plein d'autres bugs, venez jouer ;-)
Hackers
Une implémentation (XML|SOAP)-dsig "état de l'art" ne devrait pas être vulnérable
Les premiers bulletins XSLT datent de 2001 :
Guninski vs Oracle
Un réglage fin permet souvent de désactiver les fonctionnalités dangereuses
XML
Web Services
MVC
Journaux
AJAX
GRAPHS
Recherche
DAO
PDF
AJAX
XSLT
Crypto
XSL-FO
Analyse ascendante
Même si l'éditeur est ApacHe !
Lisez, comprenez et appliquez les recommandations et erratas du W3C
Traitez correctement les chercheurs qui vous signalent des vulnérabilités
Soyez proactifs (défense en profondeur, ...)
Editeurs
http://fr.wikipedia.org/wiki/Quine_(informatique)
http://www.unidex.com/turing/utm.htm
http://www2.informatik.hu-berlin.de/~obecker/XSLT/
$> xsltproc catalog2xhtml.xsl catalog.xml > catalog.html
Transformation offline du XML en HTML
Ouverture du HTML dans un navigateur
Visualisation du contenu transformé
2 possibilités
Ouverture du XML dans un navigateur
Transformation à la volée en HTML
Visualisation du contenu transformé
Généralistes
Spécifiques
Presto (Opera) AltovaXML (Altova)
Transformiix (Firefox)
...
XSLT 2.0
libxslt (Gnome)
Saxon (Saxonica)
Xalan-J (Apache)
Xalan-C (Apache)
MSXML (Microsoft)
…
W3C - 2007
XSLT 1.1
W3C - 2001 - Draft
XSLT 1.0
W3C - 1999
XSLT 1.0
EXSLT
Communauté - WiP
Firefox 3.6.17
Dooble 0.07
Nicolas "nICOB" Gregoire
http://www.agarri.fr/
Excéution de code à distance
CVE-2011-1571
Video : Remote SHell
Fait
A creuser
http://trac.webkit.org/changeset/79159
Bureautique
...
Sécurité
Web
LiMitation : l'utilisateur doit appuyer sur F10
http://php.net/manual/fr/xsltprocessor.registerphpfunctions.php
http://www.swift.com/corporates/resources/Getting_Started/MIG_ISO20022/EBAM_Signature_Specifications.pdf
http://clawslab.nds.rub.de/wiki/index.php/XML_Signature_–_XSLT_Code_Execution
*
* : inclut aussi les fonctionnalités de XSLT 1.0
XSLT 2.0
W3C - 2007
XSLT 1.1
W3C - 2001 - Draft
XSLT 1.0
W3C - 1999
EXSLT
Communauté - WiP
libxslt
( execution de code )
( creation de fichier )
Dangereux
( execution de code )
Xalan-J
( execution de code )
Sûr par défaut
( execution de code )
Sans extension
dangereuse