IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Quelqu'un a acheté 30 plugins WordPress et y a installé une porte dérobée : comment un acheteur anonyme a transformé huit ans de confiance en infrastructure d'attaque dormante pendant huit mois

Le , par Stéphane le calme

89PARTAGES

6  0 
Début avril 2026, trente et un plugins WordPress ont été fermés en une seule journée par l'équipe de WordPress.org. Derrière cette décision d'urgence : une attaque méthodique par chaîne d'approvisionnement, dont la charge malveillante est restée dormante huit mois, qui a compromis des centaines de milliers de sites en passant inaperçue. Ce n'est pas un exploit technique spectaculaire. C'est une opération d'acquisition commerciale soigneusement planifiée, avec un nom de vendeur sur Flippa, un contrat de cession à six chiffres et un premier commit SVN qui était déjà le cheval de Troie.

L'histoire commence au début 2025 dans un registre parfaitement banal : celui d'une PME numérique en déclin. L'équipe indienne à l'origine du portfolio « Essential Plugin » (anciennement connue sous le nom WP Online Support, fondée vers 2015 par Minesh Shah, Anoop Ranawat et Pratik Jain) avait bâti au fil des ans une trentaine d'extensions WordPress gratuites, assorties de versions premium. Des outils courants : sliders, compteurs à rebours, galeries, composants WooCommerce, FAQ, témoignages clients. Rien d'exceptionnel, mais une présence établie et une confiance accumulée depuis des années auprès de centaines de milliers d'utilisateurs.

Vers la fin 2024, les revenus avaient chuté de 35 à 45 %. Minesh Shah a mis l'ensemble de l'activité en vente sur Flippa, la place de marché spécialisée dans la cession de sites, applications et portefeuilles numériques. L'opération a été suffisamment notable pour que Flippa en tire un cas d'usage publicitaire, publié en juillet 2025. L'acquéreur, identifié sous le pseudonyme « Kris », affichait un profil centré sur le SEO, les cryptomonnaies et le marketing pour le secteur des jeux d'argent en ligne. Le prix : un montant à six chiffres, en dollars.

Ce transfert de propriété a eu lieu au vu et au su de tous. Les archives publiques de Flippa, les métadonnées SVN de WordPress.org, le WHOIS du domaine essentialplugin.com mis à jour au nom d'une certaine « Kim Schmidt » à Zurich avec une adresse ProtonMail : tout était là. WordPress.org n'a pourtant mis en place aucun mécanisme permettant de signaler ou d'examiner les transferts de propriété de plugins. Aucune notification aux utilisateurs lors d'un changement de contrôle. Aucune revue de code automatiquement déclenchée par l'apparition d'un nouveau committer.

Un backdoor caché dans un changelog mensonger

Le 12 mai 2025, un nouveau compte WordPress.org dénommé essentialplugin a été créé, héritant des accès SVN à l'ensemble du portfolio. Le premier commit de ce compte, daté du 8 août 2025, concernait la version 2.6.7 de Countdown Timer Ultimate. Le changelog indiquait laconiquement : « Vérification de la compatibilité avec WordPress version 6.8.2. »

En réalité, ce commit ajoutait 191 lignes de code au fichier class-anylc-admin.php du module wpos-analytics, un composant présent de longue date dans les plugins sous forme d'outil d'opt-in analytique. Le code introduisait trois éléments : une méthode fetch_ver_info() appelant file_get_contents() vers un serveur contrôlé par l'attaquant et passant la réponse à @unserialize() ; une méthode version_info_clean() exécutant @$clean($this->version_cache, $this->changelog) avec des valeurs entièrement issues des données désérialisées ; enfin, un point d'entrée REST API non authentifié avec permission_callback: __return_true.

C'est un appel de fonction arbitraire dans sa forme la plus classique : le serveur distant contrôle le nom de la fonction, ses arguments, son exécution. Pendant huit mois, le serveur de l'attaquant a simplement répondu normalement, sans rien déclencher. La porte était posée. La clef attendait.

L'activation : le 5 avril 2026

Le 5 avril 2026, la porte s'est ouverte. Le module wpos-analytics a commencé à émettre une requête vers analytics.essentialplugin.com, récupérant un fichier malveillant dénommé wp-comments-posts.php (conçu pour ressembler au fichier légitime wp-comments-post.php du cœur de WordPress) et l'utilisant pour injecter un bloc PHP massif dans wp-config.php.

La charge utile était sophistiquée. Le code injecté récupérait des liens de spam, des redirections et de fausses pages depuis un serveur de commande et contrôle (C2). Il ne les affichait qu'à Googlebot, les rendant invisibles aux propriétaires des sites. Surtout, il résolvait le domaine C2 via un contrat intelligent Ethereum, en interrogeant des points RPC publics de la blockchain, rendant tout blocage de domaine traditionnel inopérant, puisque l'attaquant pouvait à tout moment mettre à jour le contrat pour pointer vers un nouveau serveur.

C'est Austin Ginder, de la société d'hébergement Anchor Hosting, qui a découvert et documenté l'incident en pratiquant une analyse forensique sur le site d'un client. En comparant des sauvegardes journalières du fichier wp-config.php via des instantanés horodatés, il a pu identifier une fenêtre d'injection de 6 heures et 44 minutes le 6 avril 2026, entre 04h22 et 11h06 UTC.


[SIZE=...
La fin de cet article est réservée aux abonnés. Soutenez le Club Developpez.com en prenant un abonnement pour que nous puissions continuer à vous proposer des publications.

Une erreur dans cette actualité ? Signalez-nous-la !