Disponible pour missions & renforts d’agence · Réponse rapide, par la personne qui intervient

Ma boutique PrestaShop a été piratée sans qu’aucun mot de passe ne fuite

Aucun accès partagé, aucun mot de passe faible, aucun poste infecté, et pourtant du code étranger sur le serveur : les failles les plus lourdes des dernières années ne demandaient ni compte ni authentification, seulement une page publique de la boutique.

Décrire mon problème Discuter sur WhatsApp

La question « qui a eu mon mot de passe » ne se pose pas toujours

Quand une boutique est compromise, le premier réflexe est de chercher un identifiant volé : un ancien prestataire encore dans les accès, un poste de travail infecté, un mot de passe réutilisé ailleurs. C’est une piste légitime et elle est parfois la bonne. Mais une partie des failles publiées ces dernières années sur l’écosystème PrestaShop ne demandent rien de tout cela. Elles s’exploitent depuis l’extérieur, sur une page publique de la boutique, sans compte, sans session, sans la moindre action de votre part.

C’est ce qu’on appelle une exploitation non authentifiée. Le serveur reçoit une requête qui ressemble à une visite ordinaire, sauf qu’une des valeurs transmises est fabriquée pour déclencher un comportement que l’auteur du module n’avait pas prévu. Le module traite cette valeur comme une donnée de travail normale ; selon la faille, cela finit en requête de base de données détournée, ou en code exécuté sur le serveur. À aucun moment un mot de passe n’intervient. Changer tous les identifiants après coup ne referme donc pas la porte : elle n’a jamais été tenue fermée par un identifiant.

Second malentendu courant : « mon back-office est protégé, j’ai restreint les accès ». Protéger le back-office reste une bonne pratique, mais ces failles ne passent pas par le back-office. Elles passent par la boutique elle-même, celle que vous voulez précisément laisser ouverte à tous vos visiteurs. Ce n’est pas non plus un phénomène récent : le 22 janvier 2025, PrestaShop alertait déjà officiellement sur une vague d’attaques exploitant des injections SQL présentes dans des modules tiers, et non dans le cœur.

Ce que voit un marchand dans ce cas de figure

  • Des fichiers PHP que vous ne reconnaissez pas dans le dossier d’un module, avec une date de modification récente.
  • Aucune connexion administrateur suspecte dans les journaux : personne d’étranger ne s’est jamais authentifié.
  • Des requêtes POST banales vers la racine du site dans les journaux, en nombre et à intervalle régulier.
  • Un comportement anormal sur les pages de catégorie qui portent des filtres, ou sur une fenêtre promotionnelle.
  • Un hébergeur qui signale une activité anormale alors que tous vos mots de passe sont uniques et récents.
  • Le problème qui revient quelques jours après un nettoyage et un changement complet des mots de passe.

Deux surfaces publiques : une page de filtres, une fenêtre promotionnelle

Le 3 juin 2026, PrestaShop a publié l’avis de sécurité GHSA-m5f5-28qr-9g9r, référencé CVE-2026-54159, sur le module officiel de navigation à facettes ps_facetedsearch : celui qui affiche les filtres de prix, de marque ou de caractéristiques sur vos pages de catégorie. Le score CVSS est de 10,0, le maximum de l’échelle. Les versions 3.0.0 à 4.0.3 sont concernées, la version corrigée est la 4.0.4.

La cause est une désérialisation non sûre des données de filtre mises en cache : les valeurs des curseurs de prix et de poids, qui transitent par l’URL, étaient sérialisées puis relues avec unserialize(). Le résultat est une injection d’objet PHP, et de là une exécution de code à distance. L’avis indique que l’exploitation est possible à distance, sans compte et sans authentification, en une seule requête, et qu’elle peut mener à une compromission complète du serveur. La faille a été trouvée par Frédéric Moreau (Antadis) et Gilles Caudal (Datalinx).

Le lendemain, le 4 juin 2026, PrestaShop a publié les versions 9.1.4 et 8.2.7. Elles ne modifient pas le cœur et ne changent aucun comportement : elles embarquent uniquement ps_facetedsearch 4.0.4, pour qu’une installation neuve parte avec le module corrigé (la 9.1.4 met aussi à jour des dépendances, Symfony 6.4.41 et Twig 3.27.1). Autrement dit, sur une boutique déjà installée, c’est la version du module qui compte, pas celle du cœur. Beaucoup de marchands vérifient la seconde et concluent trop vite.

Le second exemple vient d’un module tiers de fenêtres promotionnelles, advancedpopupcreator, édité par Idnovate. L’avis du 16 février 2026, CVE-2025-69633, score CVSS 9,8, décrit une injection SQL exploitable sans authentification sur toutes les versions antérieures à la 1.2.7 ; le correctif est la 1.2.7, et l’avis recommande de supprimer le module s’il n’est pas utilisé. Le détail qui compte pour vous est ailleurs : les tentatives apparaissent dans les journaux du site comme de simples requêtes POST /. Rien ne les distingue d’un trafic ordinaire sans outil dédié. C’est exactement pour cette raison que beaucoup de marchands ne trouvent aucune trace d’intrusion et se rabattent sur l’hypothèse du mot de passe volé.

Ce que je vérifie, dans cet ordre

  1. Relever la version exacte du module de navigation à facettes

    Dans le back-office, page des modules, cherchez ps_facetedsearch et notez la version affichée. Si le back-office est lent, incomplet ou inaccessible, lisez directement le fichier de configuration du module dans /modules/ps_facetedsearch/ en FTP : c’est la source la plus fiable. Les versions 3.0.0 à 4.0.3 sont concernées.

  2. Faire le même relevé pour les modules de fenêtres promotionnelles

    Pour advancedpopupcreator, toutes les versions antérieures à la 1.2.7 sont concernées. Si vous n’utilisez plus ce module, l’avis recommande de le supprimer plutôt que de le désactiver.

  3. Inspecter le dossier du module

    L’avis officiel recommande d’inspecter /modules/ps_facetedsearch/ à la recherche de fichiers PHP inattendus. Comparez le contenu du dossier avec une archive saine de la même version : tout fichier en trop, ou modifié récemment, doit être expliqué.

  4. Vider le cache des filtres

    C’est la seconde vérification post-incident recommandée par l’avis. Les données de filtre mises en cache sont précisément le matériau de la faille : les laisser en place n’a aucun intérêt une fois le module corrigé.

  5. Sauvegarder avant de mettre à jour

    PrestaShop recommande une sauvegarde complète de la base et des fichiers avant toute mise à jour, puis un passage par l’Update Assistant. Sur une boutique déjà compromise, cette sauvegarde sert aussi de pièce d’analyse : ne l’écrasez pas.

  6. Chercher ce qui a été déposé, pas seulement ce qui a été exploité

    Une exécution de code réussie laisse presque toujours quelque chose derrière elle. Corriger le module ferme l’entrée, mais ne retire pas ce qui a déjà été installé : l’inspection des fichiers reste indispensable.

Pour aller plus loin

Décrivez votre besoin en 1 minute

Quelques questions ciblées pour que je vous réponde avec une estimation, pas avec un questionnaire de plus.

Qu’avez-vous constaté ?
Quelle plateforme ?
Depuis quand le problème est-il constaté ? (facultatif)

Plus l’infection est ancienne, plus elle a pu se propager dans les fichiers et la base de données.

Disposez-vous d’une sauvegarde saine ?

Une sauvegarde antérieure à l’infection change complètement la méthode de remise en état.

Indiquez au moins un e-mail ou un téléphone pour que je puisse vous répondre.

Indiquez au moins un e-mail ou un téléphone pour que je puisse vous répondre.

Questions fréquentes

Comment un site peut-il être piraté si personne n’a eu mon mot de passe ?
Parce que la faille se déclenche sur une page publique, avant toute notion de compte. La requête ressemble à une visite normale et le module traite une valeur fabriquée comme une donnée légitime. Aucun identifiant n’est nécessaire.
Je suis en PrestaShop 9.1.4, suis-je protégé ?
Les versions 9.1.4 et 8.2.7 du 4 juin 2026 embarquent le module corrigé pour qu’une installation neuve parte propre. Sur une boutique existante, c’est la version de ps_facetedsearch qui détermine votre exposition, pas celle du cœur. Vérifiez le module lui-même.
Je n’ai rien vu d’anormal dans mes journaux, cela veut-il dire que rien ne s’est passé ?
Non. Pour l’injection SQL du module de fenêtres promotionnelles, l’avis précise que les tentatives ressemblent à de simples requêtes POST vers la racine du site. Sans outil dédié, elles se confondent avec du trafic ordinaire.
Mettre à jour le module suffit-il à nettoyer la boutique ?
Non. La mise à jour ferme l’entrée, elle ne retire pas ce qui a pu être déposé avant. L’avis recommande d’inspecter le dossier du module à la recherche de fichiers PHP inattendus et de vider le cache des filtres.
Faut-il quand même changer tous les mots de passe ?
Oui, mais après avoir corrigé le module, pas à la place. Sur une compromission serveur, on ne peut pas garantir ce qui a été lu ; réinitialiser les accès reste justifié, tant qu’on ne le prend pas pour la remédiation elle-même.