W3 Total Cache aussi connu sous le nom de W3TC est un célèbre plugin de cache, créé en 2009 par Frederick Townes. W3TC est connu de tout le monde dans la communauté WordPress et c’est un plugin recommandé, il est toujours dans le top 5 des plugins, toujours présent dans les bons articles parlant de performance et même dans des livres.
W3TC et la durabilité
Il y a quelques mois, en mars 2016, Frederick a posté un article chez WPTavern disant que son plugin n’était pas abandonné (en), personnellement je pense que quand on a besoin de faire ce genre d’article, c’est que le plugin est déjà abandonné. Au moment où j’écris ces lignes, le code du plugin n’a pas été mis à jour depuis 1 an et le support n’est pas fait par l’auteur lui même. Seuls des utilisateurs s’aident entre eux, ce qui est sympathique.
W3TC et la sécurité Web
Comme pour tout plugin, un auteur peut rencontrer des problèmes de sécurité, habituellement rapportées d’une façon discrète (Non Disclosure Clause) par un consultant en sécurité ou une équipe. Si vous naviguez dans les changelogs de ce plugin, vous pourrez voir le nombre de failles de sécurité corrigées durant les dernières années, ce qui est aussi sympathique.
Mais aujourd’hui, W3TC est vulnérable à une faille de type XSS, notée High Risk. Alors, c’est quoi la suite ? Qui va corriger la faille sur le dépôt ? Peut-être savez -vous (ou pas) que ce plugin a aussi un dépôt sur github et qu’il a été patché, mais personne ne peut mettre à jour celui du dépôt de WordPress.
Cela signifie que presque tous les utilisateurs ne verront pas la mise à jour disponible dans leur back-office et garderons alors la XSS avec tout le risque que cela engendre, ce qui n’est pas sympathique.
When someone kindly points out a flaw in your work, don’t act offended. Simply fix it. Job done, everybody happy.
— Kitty Giraudel (@KittyGiraudel) September 22, 2016
W3TC et l’adoption
Les plugins WordPress peuvent être adoptés, un auteur peut ajouter le mot-clé adopt-me
puis donner son plugin à qui il souhaite. Mais dans notre cas l’auteur ne semble pas répondre/ne donnera pas son plugin d’autant plus qu’une version premium existe, toujours sans support ni communication en public…
Habituellement vous pouvez demander à l’équipe des plugins de WordPress d’adopter un plugin si son auteur ne réponds à aucun message. Et malheureusement pour celui-ci ils ne veulent laisser personne l’adopter, vous pouvez lire la réponse de l’équipe WP.org sur le dépôt github.
W3TC et la vulnérabilité
La vulnérabilité a été rapportée par Zerial (es). Voici quelques explications :
Cette page contient un formulaire de support, elle peut être trouvée directement en utilisant un lien avec des paramètres, puis ces paramètres iront remplir le formulaire.
Devinez quoi, les paramètres ne sont pas échappés quand ils sont imprimés dans la page, ce qui donne cette vulnérabilité XSS, aussi simple que ça.
Exemple d’URL avec la XSS à éviter : https://example.com/wp-admin/admin.php?page=w3tc_support&request_type=bug_report&request_id=PAYLOAD
Puis remplacez PAYLOAD
par du code malicieux.
D.R.E.A.D. SCORE
Ici chez WP Media nous utilisons le système de score DREAD pour déduire la criticité d’une vulnérabilité, faisons le avec celle-ci, les 5 points sont notés sur 10.
Damage – Quelle quantité de dégâts l’attaque peut faire ?
Une fois l’attaque lancée, vous pouvez injecter du code JS/HTML dans le back-office d’un administrateur, on peut y écrire des choses, du code, ajouter des iframes, des fichiers JavaScript, s’envoyer des données proivées, des jetons de sécurité, des cookies, bref, un peu tout en fait.
10/10
Reproducibility – Est-ce que l’attaque est simple à reproduite ?
Un simple lien avec du code brut en JS/HTML à injecter, rien d’autre n’est requis.
8/10
Exploitability – Est-ce simple de lancer l’attaque ?
Cachez le lien avec un service comme bit.ly, demandez à l’admin de cliquer dessus. Fin.
Ajoutez une iframe avec en guise de HREF votre lien spécial, demandez à l’admin de visiter cette page. Fin.
La partie la plus “difficile” est de trouver un admin. Mais si vous ciblez un site, vous savez qui est votre cible, vous savez qui est l’admin.
8/10
Affected users – Combien de personnes sont impactées ?
Seulement et tous les administrateurs.
4/10
Discoverability – Est-ce facile de trouver la faille ?
Maintenant qu’elle a été divulguée en public avec un exemple de lien, oui.
10/10
DREAD score final
40/50
Notes
Very Low (≤ 10)
Low (≤ 20)
Serious (≤ 30)
High (≤ 40)
Very High (≤ 50)
Cette faille XSS est notée HIGH RISK.
W3TC et les mises à jour
J’aimerai vous dire “Tenez-vous à jour !” mais je ne peut pas. Samuel Woods de l’équipe WP.org m’a dit en privé que l’auteur a promis de garder le plugin à jour, corrigeant la faille bientôt, dans un temps raisonnable, ce qui est subjectif. En attendant cette msie à jour, toutes les personnes qui utilisent W3TC à ce jour peuvent être la cible d’attaques avec cette XSS.
Comment éviter d’être la cible? Le moyen le plus simple est de toujours déconnecter votre compte administrateur et d’utiliser un éditeur ou auteur.
Vous pouvez aussi choisir une autre solution pour améliorer la vitesse de chargement de votre site.
Nous vous recommandons de choisir un plugin qui est souvent mis à jour, avec un bon support rapide, qu’il soit gratuit ou premium. N’oubliez pas que tenter de gagner 40$ en évitant l’achat d’un plugin qui vous coutera bien plus à cause de ses vulnérabilités, du manque de support et de mises à jour n’est pas la meilleure des idées finalement.
Ici chez WP Media, nous avons créé WP Rocket, utilisé par 120 000 sites, avec une équipé dédiée pour le support. Je vous laisse trouver des revues et des comparaisons, je ne veux pas vous dire “nous sommes les meilleurs”, je laisse ça pour nos utilisateurs.
W3TC dans le futur
Que pensez de cette vulnérabilité, que pensez de ce cas, que pensez de la prochaine faille, car vous devez savoir qu’une fois une faille trouvée, des consultants en sécurité iront fouiller afin d’en trouver d’autres et d’anciennes failles non corrigées resurgiront aussi et ce jour là, on recommence.
No update on W3 Total Cache SSRF reported over 4 months ago. Fix is basically adding 1 character #responsibledisclosure #wordpress #plugin
— Jouko Pynnönen (@klikkioy) September 23, 2016
Edit du 26/09/2016 : Le plugin a été mis à jour corrigeant ainsi cette XSS.
Et vous, vous souhaitez encore utiliser ce plugin ? Dites nous pourquoi dans les commentaires.