Boutique PrestaShop piratée : supprimer le faux captcha ClickFix

Outils · 8 min de lecture

Boutique PrestaShop piratée : supprimer le faux captcha ClickFix

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.

Qu'est-ce que ClickFix et pourquoi vous ne le voyez pas ?

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.

Comment savoir si ma boutique est infectée ?

  • Demandez au client une capture d'écran et l'heure : avec ça, votre technicien sait quoi chercher.
  • Ouvrez la boutique depuis un ordinateur sous Windows, en navigation privée, sans être connecté au back-office et depuis une autre connexion, comme le partage de connexion du mobile.
  • Regardez dans la Search Console, dans Sécurité et actions manuelles → Problèmes de sécurité. Si Google l'a détecté, Chrome peut déjà prévenir vos clients que votre site est dangereux.

La capture du client suffit pour vous mettre en route.

Ce qu'il faut faire aujourd'hui, dans l'ordre

  1. Faites une sauvegarde complète, fichiers et base de données, et gardez-la hors du serveur avant de toucher à quoi que ce soit. Celui qui nettoiera en aura besoin.
  2. Passez la boutique en maintenance, dans Paramètres de la boutique → Paramètres généraux → Maintenance. Cette page ne charge ni le JavaScript du thème ni les modules de l'en-tête, donc elle coupe presque toujours le faux captcha, et elle dit à Google que vous fermez seulement pour un temps. Vérifiez depuis une autre connexion : votre IP continue de voir la boutique.
  3. Changez tous les mots de passe : employés du back-office, hébergement, FTP et base de données. Dans Paramètres avancés → Équipe, supprimez tout employé que vous ne reconnaissez pas, et dans Paramètres avancés → Sécurité, fermez toutes les sessions du back-office. Recommencez quand la boutique sera propre.
  4. Cherchez le code et la porte dérobée avec votre technicien : celui qui entre laisse souvent des fichiers pour revenir. Plus bas, où regarder.
  5. Fermez la porte par laquelle il est entré, sinon tout recommence demain.
  6. Videz les caches avant de rouvrir : celui de PrestaShop, dans Paramètres avancés → Performances, et celui de Cloudflare si vous l'utilisez. La boutique peut servir une copie combinée du JavaScript du thème qui garde le code même si vous nettoyez l'original. Si Google vous avait signalé, demandez un réexamen.
  7. Si un client a collé la commande, prévenez-le pour qu'il passe un antivirus et change les mots de passe enregistrés dans son navigateur. Et si le pirate a pu voir les données de vos clients, parlez-en à la personne qui gère vos données personnelles : le RGPD donne 72 heures pour le notifier.

Où se cache ClickFix dans PrestaShop ?

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.

  • Les champs de code personnalisé. Beaucoup de thèmes et de modules de statistiques ont une case pour coller du code dans l'en-tête ; dans le thème Warehouse, c'est dans Apparence → IqitThemeEditor, onglet des codes. Tout code dont vous ne connaissez pas l'auteur doit partir, même s'il ressemble à un outil connu : l'un de ceux de cette campagne se faisait passer pour Microsoft Clarity.
  • Les pages et les fiches. Les pages CMS et les descriptions de produits et de catégories acceptent du HTML, et un script y tient.
  • Les modules. Dans Modules → Gestionnaire de modules, tout module que vous n'avez pas installé vous-même.
  • Les fichiers isolés. Dans un PrestaShop propre, les dossiers d'images, d'upload et de téléchargements ne contiennent pas d'autre PHP que 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.

Par où sont-ils entrés et comment fermer la porte ?

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.

  • Mettez à jour vos modules, à commencer par la recherche à facettes. Le 3 juin, PrestaShop a signalé une faille grave dans 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.
  • Protégez le back-office. Un mot de passe long et différent par employé, des comptes non partagés et une adresse du back-office qui ne soit pas /admin. La double authentification avec un code sur le mobile n'est pas fournie de base, mais un module l'ajoute.
  • Mettez un pare-feu devant, comme Cloudflare : il arrête beaucoup d'attaques automatiques avant qu'elles n'atteignent la boutique, comme nous l'expliquions dans limiter les requêtes par IP sans bloquer Google. PrestaShop rappelle que c'est une couche de plus, pas un substitut aux mises à jour.
  • Quittez la 1.7. PrestaShop a cessé de la maintenir à la sortie de la 9.0, en juin 2025. C'était la version de la boutique du forum.

Pour votre équipe technique

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 '%&lt;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.

Quand demander de l'aide ?

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.

Dites-nous ce qu'a vu votre client

Comment nous pouvons vous aider

Voir tous les services →

Continuer la lecture

Un coup de main sur votre projet ? Parlons-en

Dites-nous ce dont votre entreprise a besoin

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.