( ! ) Des attaquants ont trouvé un moyen d’utiliser une vulnérabilité de sécurité (smarty) pour effectuer une exécution de code arbitraire dans les serveurs web qui hébergent des sites internet utilisant le CMS PrestaShop (e-commerce).
Que se passe t-il ?
L’équipe de maintenance PrestaShop a été informée que des acteurs malveillants exploitent une vulnérabilités de sécurité pour injecter sur les sites du code malveillant ; cela permet d’exécuter des instructions arbitraires, et potentiellement de voler les informations de paiement des clients…
Comment l’attaque fonctionne-t-elle ?
L’attaque nécessite que la boutique soit vulnérable aux exploits d’injection SQL. Le processus est le suivant :
- L’attaquant soumet une requête de type “POST” au point de terminaison vulnérable à l’injection SQL.
- Ensuite, l’attaquant soumet une requête fr type “GET” à la page d’accueil du site. Cela entraîne la création d’un fichier de script PHP appelé blm.php à la racine du répertoire de la boutique.
- L’attaquant soumet maintenant une requête de type “GET” au nouveau fichier qui a été créé, blm.php, ce qui lui permet d’exécuter des instructions arbitraires.
Que faut faire pour assurer la sécurité de votre boutique ?
Tout d’abord, assurez-vous que votre CMS PrestaShop ainsi que tous vos modules sont mis à jour dans leur dernière version.
Si votre CMS n’est pas forcement à jour et/ou que vous ne pouvez pas le mettre à jour pour des raisons de compatibilité, Il vous faudra alors, impérativement, désactiver la fonctionnalité de stockage en cache Smarty de MySQL.
Pour ce faire, localisez le fichier config/smarty.config.inc.php sur votre installation PrestaShop puis supprimez (ou commentez) les lignes 43-46 (PrestaShop 1.7) ou 40-43 (PrestaShop 1.6) :
if (Configuration::get('PS_SMARTY_CACHING_TYPE') == 'mysql') {
include _PS_CLASS_DIR_.'Smarty/SmartyCacheResourceMysql.php';
$smarty->caching_type = 'mysql';
}
Comment savoir si votre CMS a été infecté ?
Consultez le journal (logs) d’accès de votre serveur web pour trouver le modèle d’attaque comme expliqué ci-dessus “POST /blm.php” (recherchez également dans les fichiers logs archivés) :
- [16/Jul/2022:16:43:58 +0200] "POST /blm.php HTTP/1.1" 200 85694 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0"
D’autre part, si vous avez un accès SSH sur votre serveur Linux, installez la librairie locate pour rechercher la présence du fichier blm.php
Installez la librairie locate
$ apt-get install locate -y
Effectuez une mise à jour de la base de données des noms de fichiers
$ updatedb
Recherchez la présence du fichier blm.php dans le vhost de votre CMS
$ locate blm.php
Si la commande locate ne retourne aucune ligne c’est que le fichier n’est pas sur votre installation.
Vous pouvez également faire une recherche dans les logs de votre serveur web (fichiers *.log ) pour rechercher l’occurrence “POST /blm.php” via la commande grep (ici les logs sont situés dans le dossier /var/logs/apache2) :
$ grep -rnw '/var/logs/apache2/' -e 'POST /blm.php'