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.
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.
# 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
-
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.
-
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.
-
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.
-
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.
-
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.
-
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.
-
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
-
Vérifier ses extensions avant une mise à jour
Constituer l’inventaire des versions installées, celui qui permet de répondre après coup.
-
Un fichier inconnu sur le serveur
Comment qualifier un fichier qui n’appartient ni au cœur, ni au thème, ni à l’extension.
-
Vérifier si mon site est compromis
Les contrôles à passer quand vous soupçonnez une installation qui n’aurait pas dû avoir lieu.
-
Mots de passe et accès partagés
Le sujet qui décide de la longueur de votre remédiation le jour où des identifiants sortent.
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.