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

Une mise à jour d’extension a installé une porte dérobée

On répète aux marchands de tout mettre à jour sans attendre. Il existe un cas, rare mais réel, où la mise à jour officielle est elle-même le vecteur : quand c’est la chaîne de distribution de l’éditeur qui a été compromise.

Décrire mon problème Discuter sur WhatsApp

Une mise à jour installée depuis le canal de l’éditeur

En juin 2026, l’infrastructure de compilation et de distribution d’un éditeur d’extensions WordPress a été compromise. Les marchands touchés n’ont rien fait de travers : ils ont mis à jour des extensions payantes depuis le canal officiel de cet éditeur, et ce sont ces paquets-là qui embarquaient une porte dérobée.

Les versions piégées sont Product Slider Pro for WooCommerce 3.5.2, Real Testimonials Pro 3.2.4 et 3.2.5, et Smart Post Show Pro 4.0.1. Les versions corrigées sont respectivement 3.5.3, 3.2.6 et 4.0.2. L’incident est suivi sous la référence CVE-2026-10735, avec un score CVSS de 9,8. La remédiation côté éditeur a commencé le 16 juin 2026 ; l’analyse publique, signée Wordfence, date du 22 juin 2026.

Un point de tri important : seules les versions Pro, distribuées par le canal de l’éditeur, étaient concernées. Les versions gratuites publiées sur le dépôt WordPress.org ne l’étaient pas. Si vous n’avez jamais acheté la version Pro de l’une de ces extensions, vous n’êtes pas dans le périmètre.

La conclusion à ne surtout pas en tirer

Ce genre d’incident sert d’argument à ceux qui repoussent leurs mises à jour depuis des mois. C’est un contresens, et un contresens dangereux. Une compromission de chaîne de distribution est rare, elle porte sur un nombre restreint de versions identifiées, elle est détectée puis corrigée en quelques jours, et l’éditeur publie la liste exacte des paquets concernés.

Une extension laissée sans mise à jour, à l’inverse, reste exposée pendant des mois ou des années sur une faille dont la description est publique et pour laquelle un correctif existe déjà. La fenêtre d’exposition d’une mise à jour piégée se compte en jours et ne concerne que les sites qui ont installé la mauvaise version au mauvais moment. La fenêtre d’exposition d’un site qui ne met pas à jour est permanente, et elle s’ouvre à chaque nouvelle publication de faille.

Ce que cet incident change n’est donc pas la fréquence des mises à jour. C’est l’obligation de savoir précisément ce qui tourne sur le site, en quelle version, et depuis quelle date. Sans cet inventaire, on ne peut ni se rassurer ni se remédier : on ne sait pas répondre à la seule question qui compte, « est-ce que j’avais cette version-là, ce jour-là ».

Ce qui permet de reconnaître ce cas après coup

  • L’historique de mise à jour montre l’une des versions piégées installée avant le passage en version corrigée.
  • Un fichier nommé LicenseLoader.php se trouve dans l’arborescence de l’extension, alors qu’il n’appartient pas à son code d’origine.
  • Une extension se présentant comme « WooCommerce Subscription » apparaît dans la liste sans que vous l’ayez installée.
  • Le fichier functions.php du thème actif contient un bloc de code chargeur qui lit une charge encodée en base64.
  • Des comptes administrateurs que vous ne reconnaissez pas, ou dont la date de création ne correspond à aucune intervention.
  • La configuration d’une extension d’envoi d’e-mail a changé sans que personne ne l’ait touchée.

Ce qui doit être considéré comme compromis

La charge malveillante reposait sur un fichier chargeur nommé LicenseLoader.php. Elle extrayait le contenu complet de wp-config.php, les comptes administrateurs, les identifiants stockés par les extensions d’envoi d’e-mail — WP Mail SMTP, Post SMTP, Easy WP SMTP — et les commandes WooCommerce des trois derniers mois. Tout cela est sorti du site. Ce n’est pas une hypothèse à évaluer, c’est le point de départ du travail de remédiation.

Deux mécanismes de persistance ont été observés : une fausse extension se présentant comme « WooCommerce Subscription », et un code chargeur injecté dans le functions.php du thème actif, qui lit une charge encodée en base64. Mettre l’extension à jour ne retire ni l’un ni l’autre. La mise à jour vers la version corrigée n’est que la première étape, et c’est l’erreur la plus fréquente que je vois sur ce genre de dossier : on met à jour, on constate que l’alerte disparaît, on referme.

Pourquoi régénérer les secrets de double authentification

Changer les mots de passe ne suffit pas si le second facteur reste identique. Le secret partagé d’une application d’authentification est stocké du côté du site. S’il a pu être lu, il permet de produire des codes valides indéfiniment, y compris après le changement de mot de passe : le second facteur ne prouve plus rien, il ne fait que ralentir. Il faut donc révoquer et régénérer ces secrets compte par compte, ce qui implique de réenrôler chaque administrateur.

Le même raisonnement vaut pour les clés d’API et les jetons stockés par les extensions d’e-mail. Ils sont sortis du site, donc ils doivent être révoqués et réémis chez le fournisseur concerné, pas simplement retapés dans le formulaire de configuration. Un identifiant volé reste valide tant que personne ne l’a révoqué à la source.

verification-fichiers.sh
# Fichiers PHP modifies recemment dans les extensions et les themes
find wp-content/plugins wp-content/themes -type f -name '*.php' -newermt 2026-06-01

# Recherche du fichier chargeur signale publiquement
find wp-content -type f -name 'LicenseLoader.php'

L’ordre dans lequel je reprends la main

  1. Passer en version corrigée

    Product Slider Pro 3.5.3, Real Testimonials Pro 3.2.6, Smart Post Show Pro 4.0.2. Cette étape ferme le point d’entrée, elle ne retire rien de ce qui a été installé entre-temps.

  2. Supprimer les mécanismes de persistance

    La fausse extension « WooCommerce Subscription » et le code chargeur injecté dans le functions.php du thème actif. Tant qu’ils sont en place, tout le reste du travail est annulable à distance.

  3. Auditer les comptes administrateurs

    Comparer la liste des comptes à privilèges avec les personnes qui devraient réellement en avoir, et vérifier les dates de création et de dernière connexion.

  4. Réinitialiser tous les mots de passe

    Comptes d’administration, base de données, comptes FTP ou SFTP, accès à l’hébergement. Le contenu de wp-config.php est sorti du site, ce qui inclut les identifiants qui s’y trouvent.

  5. Révoquer et régénérer les secrets de double authentification

    Compte par compte, avec réenrôlement. Un mot de passe neuf associé à un ancien secret ne rétablit pas le second facteur.

  6. Révoquer les identifiants des extensions d’e-mail

    Côté fournisseur d’envoi, pas seulement dans la configuration du site. Puis relire cette configuration : une adresse d’expédition ou une redirection modifiée passe facilement inaperçue.

  7. Traiter la sortie des commandes comme une fuite de données personnelles

    Les commandes WooCommerce des trois derniers mois contiennent des données de vos clients. Cette partie du dossier se documente et s’évalue, elle ne se règle pas en changeant un mot de passe.

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é ?
Depuis quand le problème est-il constaté ?

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 ?
Avez-vous encore accès à l’administration WordPress ? (facultatif)
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 savoir quelle version d’une extension était installée le mois dernier ?
Par les sauvegardes, qui contiennent le fichier d’en-tête de l’extension avec son numéro de version, et par les journaux de mise à jour du site. C’est précisément pour ces moments-là que je tiens un inventaire des versions et de leurs dates d’installation.
J’utilise la version gratuite, suis-je concerné ?
Non. Seules les versions Pro distribuées par le canal de l’éditeur étaient concernées. Les versions gratuites publiées sur le dépôt WordPress.org ne l’étaient pas.
J’ai installé la version corrigée, le dossier est-il clos ?
Non. La mise à jour ferme le point d’entrée mais ne retire pas la fausse extension ni le code chargeur injecté dans le thème actif, et elle ne change rien au fait que des identifiants sont sortis du site.
Est-ce qu’une restauration de sauvegarde règle le problème ?
Partiellement, et à condition de restaurer un état antérieur à l’installation de la version piégée. Une sauvegarde postérieure contient la porte dérobée. Et dans tous les cas, restaurer des fichiers ne révoque pas des identifiants déjà exfiltrés.
Dois-je prévenir mes clients ?
Les commandes WooCommerce des trois derniers mois faisaient partie de ce qui a été extrait, donc des données personnelles de clients sont concernées. Cette partie s’analyse et se documente comme une violation de données, indépendamment du nettoyage technique.
Faut-il arrêter d’acheter des extensions hors dépôt officiel ?
Non, mais il faut les suivre autrement. Une extension payante se met à jour depuis le canal de son éditeur, sans passer par le dépôt officiel : c’est à vous de noter la version installée, sa date, et de suivre les annonces de sécurité de cet éditeur.