XSLT et injections XSL

To the non-french speaker, note that you can translate the articles using the Google Trad widget situated at the bottom of all pages.


Aujourd’hui je vous propose un article un peu différent des autres puisqu’il sera purement théorique ! A l’origine je voulais le découper en deux parties, comme pour celui sur le XML et les XXE. Mais vu la tête de ma TODO list, je n’ai pas le temps de rentrer plus dans les détails pour cet article.

Donc nous allons parler du langage XSLT et plus particulièrement de la faille qui se cache derrière son utilisation. Le langage XSLT (pour eXtensible StyleSheet Language Transformations) est un langage de transformation qui permet de convertir un fichier XML en un document PDF, une page web ou encore un autre document XML.

Pour cela, on se sert d’un moteur XSLT. Ce moteur prend en paramètre deux fichiers : un fichier XML qui contiendra l’ensemble des données à traiter et un fichier XSLT dans lequel on trouvera le code de traitement. Voici comme invoquer ce moteur en PHP :

processeurphp

Concrètement, le XSLT ça ressemble à ça :

lookslike

On y retrouve des balises qui vont nous permettre de sélectionner des données :

'

Des balises qui nous permettront de boucler sur des données ou de faire des tests :

''
'

Ou encore des balise qui nous permettront de créer des variables :

''

Après traitement de notre fichier XML (qui contient des données relatives aux spécifications d’ordinateurs), on obtiendrait plus ou moins ceci :

resultatprocesseur.png

A priori le langage XSLT s’avère donc être plutôt utile… Seulement voilà, il existe une fonction qu’il ne faut absolument pas utiliser :

registerphp.png

La fonction registerPHPFunctions() ! Pourquoi ? Eh bien parce qu’avec cette fonction activée, un attaquant pourrait utiliser une fonctionnalité avancée du XSLT : la gestion de code PHP !

Ainsi, un attaquant envoyant ce genre de balises sur votre application :

ppfunction.png

Récupèrerait sur sa page web le listing des fichiers présents dans le dossier actuel ainsi que les droits accordés sur ces fichiers ! Un attaquant pourrait donc supprimer des fichiers, en rajouter, injecter des webshell ou encore consulter le contenu de ces fichiers en utilisant cette balise :

read.png

Libre à lui d’étudier le code source de l’application pour ensuite lancer des attaques un peu plus puissante.

Il faut donc être très précautionneux si vous utilisez le langage XSLT. N’activez pas la gestion du PHP. Et si vous le faites, assurez vous que les inputs des utilisateurs de l’application soient nettoyés afin d’éviter tous problèmes 😉

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l'aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s