Le 25 juillet 2014

Vague d’attaques sur près de 50 000 sites WordPress

porte

Depuis le 1er juillet 2014, une vague d’attaques déferle sur les sites Internet utilisant WordPress. Selon Sucuri, une firme spécialisée dans la surveillance et la sécurité de sites Web, près de 50 000 sites auraient déjà été atteints.


Qui peut être touché?

logo-mailpoet-wysijaJusqu’à maintenant, le blâme pèse majoritairement sur l’extension (ou plugin) de newsletter MailPoet (wysija). Ce dernier aurait une faille de sécurité dans la portion de téléchargement de fichier. Pourquoi « jusqu’à maintenant »? Ce type de faille peut exister dans plusieurs extensions WordPress, qu’elles soient populaires ou non. Pour le moment, nous savons que parmi les sites touchés, un grand nombre utilisent l’extension MailPoet mais pas tous. Un autre plugin peut avoir été utilisé pour procéder et même infecter plusieurs installations WordPress sur un même serveur même si une seule présente une faille.


Comment l’attaque s’opère-t-elle?

Le « hackeur » utilise une méthode observée régulièrement.

  •  Il ouvre une « backdoor » (porte dérobée) invisible en premier lieu.
  •  Après quelques semaines, il dépose des fichiers malveillants sur le serveur à l’aide de la « backdoor » créée ultérieurement.

Étape 1 : Ouvrir une « backdoor »

En utilisant une faille dans un plugin, le « hackeur » dépose un fichier .php dans le dossier « wp-content/uploads » de site Web. Par la suite, il peut en faire ce qu’il veut, notamment, l‘exécuter de l’externe.

Dans ce cas-ci, le fichier introduit est celui-ci :

/wp-content/uploads/wysija/themes/mailp/index.php

Exemple de l’une des premières requêtes envoyées au serveur :

  • 194.79.195.139 – - [05/Jul/2014:03:53:30 -0400] « POST /wp-admin/admin-post.php?page=wysija_campaigns&action=themes HTTP/1.1″ 302 – « /wp-admin/admin.php?page=wysija_campaigns&id=1&action=editTemplate » « Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.53 Safari/525.19″
  • 194.79.195.139 – - [05/Jul/2014:07:10:40 -0400] « POST /wp-content/uploads/wysija/themes/mailp/index.php HTTP/1.0″ 200 12 « - » « Mozilla/5.0 (Windows) »

Ce fichier est appelé à l’aide d’une requête « GET » et crée, par la suite, des « backdoor » dans toutes les bases de données WordPress disponibles sur le serveur. Cette « backdoor » crée un utilisateur WordPress ayant comme ID 1001001.

Étape 2 : Déploiement de fichiers malvaillants

Quelques jours (voir quelques semaines) après avoir ouvert la « backdoor », le « hackeur » se connecte avec l’utilisateur WordPress précédemment créé et utilise la fonction de plugin-install pour poursuivre le dépôt d’autres fichiers malveillants. Voici le chemin utilisé :

  • 94.136.150.28 – - [10/Jul/2014:15:36:19 -0400] « POST /wp-login.php HTTP/1.1″ 302 –  » /wp-login.php » « Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.53 Safari/525.19″
  • 94.136.150.28 – - [17/Jul/2014:00:21:27 -0400] « GET /wp-admin/plugin-install.php?tab=upload HTTP/1.1″ 200 30084 « /wp-login.php » « Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.53 Safari/525.19″
  • 94.136.150.28 – - [17/Jul/2014:00:21:30 -0400] « POST /wp-admin/update.php?action=upload-plugin HTTP/1.1″ 200 24475 « /wp-login.php » « Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/1.0.154.53 Safari/525.19″

Nous avons constaté qu’un fichier /license.php est aussi déposé sur les serveurs. Ce fichier est exécuté et insère des lignes encodés à tous les fichiers .php. Le code ajouté est encodé en BASE64 et ressemble à ceci :

code


Comment réparer

Même s’il est souvent conseillé de seulement mettre à jour le plugin MailPoet, l’infection peut être toujours présente et un autre plugin peut présenter une faille du même genre.

Si le site internet ne fonctionne plus, c’est que plusieurs fichiers .php ont été atteints. Dans ce cas, il faut effectuer un grand nettoyage en tenant compte qu’il y a toujours un risque d’oublie d’un fichier atteint. Il faut aussi retenir que la « backdoor » principale se trouve dans la table wp_user de la base de données et donc, seulement nettoyer les fichiers ne servira à rien si cette dernière n’est pas supprimée.

Voici les conseils à suivre :

  • Restitution d’une copie de sauvegarde (backup) du site fonctionnel. Si aucune copie n’est disponible, nettoyage manuel de tous les fichiers.
  • Mettre à jour les plugins
  • Nettoyer, nettoyer, nettoyer. Rechercher et supprimer les fichiers du genre « license.php » qui possèdent du code BASE64 car n’importe lequel pourrait être réutilisé pour réattaquer les sites.
  • Supprimer la « backdoor » en effaçant les utilisateurs indésirables ayant comme ID 1001001 de la table wp_users de toutes les bases de données WordPress du serveur.

Pour sécuriser toutes autres failles de ce genre, Julio Potier propose d’empêcher complètement l’exécution de fichiers .php dans le dossier /wp-content/uploads avec un .htaccess :

<Files *.php>
Deny from all
</Files>


Comment se protéger

Mettre à jour les plugins permet de limiter les failles et effectuer des copies de sauvegarde régulières permet la restitution rapide des fichiers. Toutefois, ce type d’attaque peut survenir dès qu’un plugin présentant une faille et permettant un upload de fichier .php dans le dossier wp-content/uploads. Le fichier .htaccess bloquant l’exécution de fichiers .php peut être une bonne solution pour éviter l’exécution d’un fichier malvaillant dans un répertoire donné. Cependant, quoi faire si le fichier se retrouve dans un autre répertoire de WordPress? Ce dernier pourrait être inséré dans un thème et se retrouver dans le dossier wp-content/themes. Idéalement, il faut se tourner vers des solutions d’hébergement sécurisées dotées de mesures efficaces contre les fichiers malveillants.


Pour plus d’informations

 

Laisser.un.commentaire

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

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>