PrestaShop 9 n'envoie plus d'e-mails : le bug SMTP du port 587
Les commandes arrivent, mais aucun e-mail ne part. C'est un bug de PrestaShop 9 avec le port 587 : la 9.2 le corrige,…
Un client vous écrit : en arrivant sur votre boutique, il a vu un « vérifiez que vous êtes humain » qui lui demandait d'appuyer sur deux touches, de coller quelque chose et de valider avec Entrée. Vous allez voir et rien d'anormal. Si cela vous arrive, votre boutique PrestaShop est piratée et infectée par ClickFix : quelqu'un y a glissé un code qui montre ce faux captcha à vos visiteurs pour qu'ils installent eux-mêmes un logiciel malveillant, le plus souvent un voleur de mots de passe.
Il ne partira pas tout seul : quelqu'un est entré dans votre boutique et l'y a laissé. Supprimer ClickFix se fait, mais l'essentiel est de fermer la porte par laquelle il est entré. Et vous n'êtes pas seul : le 3 septembre, Netskope a compté plus de 5 400 sites infectés par cette campagne, presque tous de petites entreprises. Ceux qu'ils ont examinés un par un tournaient surtout sous WordPress et parfois sous PrestaShop.
La page se floute derrière un faux captcha qui demande d'appuyer sur la touche Windows et R, de coller et de valider. Ce qui est collé, c'est une commande que la page a déjà copiée sans prévenir, et en l'exécutant, le visiteur installe le logiciel du pirate. Un vrai captcha ne vous demande jamais d'ouvrir quoi que ce soit sur votre ordinateur.
Ne pas le voir ne veut pas dire qu'il n'y est pas. Le code de votre boutique va chercher le piège ailleurs chaque fois qu'une page s'ouvre, et le pirate choisit ce qui s'affiche et pour qui, sans retoucher à votre boutique. Il vise les ordinateurs sous Windows, et la variante que The Hacker News a décrite le 6 octobre cache même le logiciel dans le navigateur du visiteur avant de lui demander quoi que ce soit.
La capture du client suffit pour vous mettre en route.
Dans la base de données, dans un champ que la boutique affiche sur toutes les pages, ou dans les fichiers : Netskope l'a trouvé ajouté à des fichiers JavaScript légitimes et dans des dossiers qui imitent une vraie extension. Le commerçant qui l'a raconté le 5 octobre dans le fil « Supprimer clickfix » du forum PrestaShop, sur une boutique 1.7.8, n'a rien trouvé dans sa base de données, et les portes dérobées étaient dans des fichiers de plusieurs dossiers.
index.php. Un fichier de plus, ou un fichier dont le nom commence par un point et que votre logiciel FTP masque, est une porte dérobée.Le contrôle de Paramètres avancés → Informations → Liste des fichiers modifiés regarde seulement si les fichiers du cœur ont changé : ni le thème, ni les modules, ni les images, ni les fichiers ajoutés. Une liste vide ne veut pas dire une boutique propre.
Netskope ne sait pas encore comment ces sites ont été compromis. Sur PrestaShop, les portes habituelles sont un module avec une faille connue pas mis à jour, un mot de passe du back-office volé ou trop simple, et les modules « nulled », des modules payants téléchargés gratuitement sur des sites pirates, qui arrivent souvent avec la porte dérobée déjà installée.
ps_facetedsearch, le module des filtres du catalogue, livré de base avec PrestaShop : n'importe qui, sans compte, pouvait exécuter du code sur votre serveur. Elle est corrigée en 4.0.4 ; si vous aviez une version antérieure, partez du principe que c'est peut-être par là. Et supprimez les modules inutilisés./admin. La double authentification avec un code sur le mobile n'est pas fournie de base, mais un module l'ajoute.Requêtes en lecture seule ; remplacez ps_ par le préfixe de la boutique. Warehouse enregistre ses champs de code échappés, il faut donc chercher aussi <script.
SELECT name, LEFT(value, 120)
FROM ps_configuration
WHERE value LIKE '%<script%'
OR value LIKE '%<script%'
OR value LIKE '%eth_call%'
OR name LIKE '%codes_js';
SELECT id_cms, id_lang
FROM ps_cms_lang
WHERE content LIKE '%<script%';
SELECT id_employee, email,
id_profile, active,
last_connection_date
FROM ps_employee
ORDER BY id_employee DESC;
Dans les fichiers, depuis la racine de la boutique :
find img upload download \
-name '*.php' ! -name index.php
find . -name '.*.php'
find . -type f -mtime -30 \
\( -name '*.php' -o -name '*.js' \) \
-not -path './var/cache/*'
grep -rl -e eth_call -e prebsc \
-e bsc-testnet -e claritydelivr \
--include=*.js --include=*.php \
--include=*.tpl .
Les indicateurs de la campagne sont dans la liste de Netskope. Mieux vaut réinstaller le cœur et les modules depuis des archives propres de la même version que supprimer fichier par fichier ; ensuite, vider var/cache et themes/*/assets/cache. PrestaShop 9 fournit un .htaccess qui empêche d'exécuter du PHP dans img, upload, download, js, vendor et modules : vérifier qu'ils sont toujours là et, sous Nginx, qui ne les lit pas, reporter ces règles dans la configuration du serveur.
Si vous avez trouvé quelque chose et que personne ne peut le nettoyer, si c'est revenu après le nettoyage ou si vous ne savez pas par où commencer. Cela fait partie de notre service de support et de maintenance : nous nettoyons la boutique, cherchons par où le pirate est entré et fermons la porte. Envoyez-nous la capture de votre client et votre version de PrestaShop, et nous regardons le jour même ou le lendemain.
Les commandes arrivent, mais aucun e-mail ne part. C'est un bug de PrestaShop 9 avec le port 587 : la 9.2 le corrige,…
Parfait depuis l'étranger, timeout depuis l'Espagne les jours de match. Ce n'est pas votre serveur : c'est une IP…
Un module, une application, un serveur qui vous donne du fil à retordre ou juste un avis. La première consultation ne coûte rien, et il en sort un devis ferme avec un prix et une date.