Thèmes et extensions WordPress nulled : le malware livré avec (wp-vcd, CryptoPHP et les autres)
Publié le · 9 min de lecture· Par Benjamin Bueno

Sommaire
- Qu'est-ce qu'un thème ou un plugin nulled
- Pourquoi un plugin nulled est presque toujours piégé
- wp-vcd : le malware type des thèmes nulled
- Les autres familles documentées
- Comment vérifier un thème acheté d'occasion ou téléchargé hors source officielle
- Les alternatives légales
- Nettoyer un site infecté par un thème ou un plugin nulled
- Sources
En bref : un thème ou une extension « nulled » est une version payante dont la vérification de licence a été retirée, redistribuée gratuitement par un tiers. C'est le principal moyen par lequel un administrateur installe lui-même un malware sur son site : en 2020, Wordfence attribuait plus de 17 % des sites infectés qu'il analysait à un thème ou une extension nulled. La famille wp-vcd, livrée avec ces téléchargements, injecte une porte dérobée dans tous les thèmes du compte d'hébergement et crée un administrateur caché. Si vous en avez installé un, considérez le site comme compromis et nettoyez-le entièrement.
Qu'est-ce qu'un thème ou un plugin nulled
Sucuri définit une extension nulled comme une extension premium « craquée ou modifiée par un tiers pour contourner la vérification de sa clé de licence », téléchargée sur des sites non officiels, gratuitement ou à prix cassé, sans l'accord de l'éditeur (mars 2026). « Nuller », dans le jargon du piratage, c'est mettre à zéro le contrôle de licence.
Précision : la plupart des thèmes et extensions WordPress sont sous licence GPL, et WordPress.org écrit que « les dérivés du code WordPress héritent de la licence GPL ». Redistribuer ces fichiers n'est donc pas, en soi, du piratage. Le problème est technique : rien ne garantit que le fichier téléchargé sur un site de nulled est identique à l'original, et il vous manque ce que la licence achète réellement, les mises à jour de sécurité et le support.
Nulled
Copie d'un thème ou d'une extension payante dont le contrôle de licence a été désactivé, distribuée hors du circuit de l'éditeur. Le terme ne dit rien de ce qui a été ajouté au passage : c'est précisément le risque.
Pourquoi un plugin nulled est presque toujours piégé
Un site qui distribue gratuitement des thèmes à 60 euros a un modèle économique. Le livre blanc que Wordfence a consacré à wp-vcd en novembre 2019 le décrit : la campagne ne repose ni sur de nouvelles vulnérabilités ni sur le cassage d'identifiants, mais sur des propriétaires de sites qui cherchent un accès gratuit à des logiciels payants. Les sites de distribution, presque identiques, sont poussés en haut des résultats de recherche par du référencement abusif financé par les sites déjà infectés.
Ce que ces fichiers ajoutent, d'après les cas publiés par Sucuri en 2023 et 2026 : une porte dérobée (webshell) qui exécute n'importe quel code sur le serveur ; un compte administrateur caché ; des liens de spam, des publicités ou des redirections injectés dans vos pages ; l'envoi de spam depuis votre serveur, le vol de données de cartes sur une boutique, la copie des identifiants de wp-config.php vers un serveur distant ; et des charges qui restent inactives pendant des semaines avant de s'activer.
Le chiffre le plus parlant vient du rapport annuel 2020 de Wordfence : son scanner a trouvé un malware provenant d'une extension ou d'un thème nulled sur 206 000 sites, soit plus de 17 % de tous les sites infectés. Aucune faille à exploiter : l'administrateur a installé et activé le malware lui-même.
wp-vcd : le malware type des thèmes nulled
Sucuri constate dès décembre 2017 que les sites de thèmes nulled livraient ce malware préinstallé dans chaque thème. Wordfence relève en 2019 un taux de nouvelles infections supérieur à tout autre malware WordPress depuis août 2019, puis en fait la première menace de 2020 avec 154 928 sites, soit 13 % des sites infectés analysés.
Ce que contient le thème piégé
Deux modifications seulement, d'après Wordfence : un fichier ajouté, class.theme-modules.php (ou class.plugin-modules.php pour une extension), qui est le script d'installation, et une ligne insérée tout en haut de functions.php :
<?php if (file_exists(dirname(__FILE__) . '/class.theme-modules.php')) include_once(dirname(__FILE__) . '/class.theme-modules.php'); ?>
Sucuri notait déjà en 2017 un indice simple : tous les fichiers portent la date de l'original, sauf functions.php et class.theme-modules.php, plus récents.
Ce qui se passe à l'activation
- Le script injecte une porte dérobée dans le
functions.phpde chaque thème installé, actif ou non, avec un mot de passe dérivé de l'URL du site et de la constante AUTH_SALT. - Il remet les dates de modification des functions.php à leur valeur d'avant l'injection, pour échapper aux administrateurs qui cherchent les fichiers récents.
- Il enregistre le site auprès du serveur de commande (plus d'une centaine de domaines observés par Wordfence, par exemple krilns.com, ou arilns.com chez Patchstack).
- Il cherche les autres installations WordPress du compte d'hébergement et y dépose un second installateur,
wp-includes/wp-vcd.php, chargé à chaque page par une modification du fichier du cœurwp-includes/post.php. Supprimez une porte dérobée : wp-vcd.php la recrée à la visite suivante. - Il efface son propre code du thème nulled, ne laissant que
<?php error_reporting(0);?>: seul le site d'origine conserve un class.theme-modules.php.
Le code envoyé ensuite par le serveur de commande est stocké dans wp-includes/wp-tmp.php et réutilisé si les domaines ne répondent plus. C'est par ce canal que l'attaquant active, quand il le décide, publicités malveillantes, redirections ou spam SEO. Les premières versions créaient en plus un administrateur nommé 100010010.
| Fichier ou trace | Rôle | Où le chercher |
|---|---|---|
| class.theme-modules.php, class.plugin-modules.php | Installateur livré dans le fichier nulled | Thème ou extension d'origine |
| functions.php (première ligne) | Appel de l'installateur, puis porte dérobée | Chaque thème de chaque site du compte |
| wp-includes/wp-vcd.php | Second installateur, réinfecte les thèmes | Toutes les installations du compte |
| wp-includes/post.php | Fichier du cœur modifié | À comparer avec l'original |
| wp-includes/wp-tmp.php | Cache du code reçu du serveur de commande | Ne doit pas exister |
| Utilisateur 100010010 | Administrateur caché (anciennes versions) | Table wp_users |
Les autres familles documentées
- CryptoPHP (2013-2014). Découvert par Fox-IT, ce backdoor était distribué dans des thèmes et extensions piratés pour WordPress, Joomla et Drupal : 16 variantes recensées au 12 novembre 2014, la première datant du 25 septembre 2013, plusieurs milliers de sites compromis, utilisés pour du référencement abusif. Fox-IT résumait : en publiant des thèmes et extensions piratés gratuits, l'acteur manipule les administrateurs pour qu'ils installent eux-mêmes la porte dérobée.
- Le webshell class-appside.php (2023). Dans un thème téléchargé au hasard sur un site de nulled, Sucuri a trouvé dans inc/class-appside.php une porte dérobée lourdement obscurcie, capable de désactiver les extensions de sécurité, d'infecter d'autres fichiers du serveur et d'envoyer les identifiants de base de données de wp-config.php vers un domaine distant.
- Les mises à jour absentes. Une extension nulled ne se connecte plus au serveur de l'éditeur : Sucuri rappelle en 2026 qu'elle ne recevra ni mises à jour, ni corrections de bugs, ni correctifs de sécurité.
Un site suffit pour contaminer tout l'hébergement
wp-vcd remonte d'un niveau dans l'arborescence puis redescend dans chaque dossier à la recherche d'autres installations WordPress. Sur un hébergement mutualisé où plusieurs sites partagent un même compte, un seul thème nulled installé sur un site de test infecte le site principal et les sites clients.
Comment vérifier un thème acheté d'occasion ou téléchargé hors source officielle
Vous avez récupéré un thème d'un ancien prestataire, d'un « club GPL » ou d'un site de téléchargement. Cette vérification élimine les cas grossiers, sans remplacer l'achat auprès de l'éditeur. Faites-la avant l'installation, sur une copie locale ou un serveur de test isolé, jamais en production.
- Comparez avec l'original. Si vous disposez d'une version légitime du même numéro :
diff -rq theme-original/ theme-suspect/. Tout fichier en plus ou modifié doit être expliqué. - Cherchez les fichiers connus.
find . -name "class.theme-modules.php" -o -name "class.plugin-modules.php" -o -name "wp-vcd.php" -o -name "wp-tmp.php". - Lisez la première ligne de functions.php et du fichier principal de l'extension : un
include_oncevers un fichier inconnu, ou unerror_reporting(0);isolé, sont typiques. - Cherchez les fonctions d'obscurcissement.
grep -rnE "eval\(|base64_decode|gzinflate|str_rot13" .Un thème n'a aucune raison de décoder du base64 dans functions.php. - Regardez les dates.
ls -la --time-style=long-iso: un ou deux fichiers plus récents que tous les autres sont suspects. Mais wp-vcd remet les dates en place, donc l'absence d'anomalie ne prouve rien. - Soumettez l'archive à VirusTotal. Le webshell analysé par Sucuri en 2023 y était détecté par plusieurs moteurs ; un résultat vierge n'est toutefois pas une garantie.
- Activez sur le site de test et observez. Listez ensuite les administrateurs (
wp user list --role=administrator), les fichiers créés depuis l'activation (find . -newermt "2026-09-06 10:00") et les requêtes sortantes dans les journaux. Un thème qui contacte un domaine inconnu à l'activation ne va pas en production.
Les alternatives légales
Le besoin derrière un téléchargement nulled est presque toujours budgétaire. Quelques pistes :
- Le répertoire WordPress.org. Tout ce qui y est publié doit être compatible GPL, code, données et images compris, selon les règles du répertoire des extensions. Des dizaines de milliers de thèmes et d'extensions y sont gratuits et mis à jour depuis le tableau de bord.
- Les versions gratuites des extensions payantes. La plupart des éditeurs proposent une version de base sur WordPress.org, qui couvre souvent le besoin réel.
- Les promotions des éditeurs. Sucuri note des remises de 40 à 60 % lors des grandes opérations commerciales de fin d'année.
- Une licence pour un seul site. Le premier palier de prix se situe en général bien en dessous du coût d'un nettoyage. Si vous héritez d'un site dont la licence a expiré, l'éditeur vend le renouvellement.
Pour choisir un thème sûr, notre guide de la sécurité des thèmes WordPress détaille les critères : origine, fréquence des mises à jour, code lisible.
Nettoyer un site infecté par un thème ou un plugin nulled
Retirer le thème ne suffit jamais : à l'activation, le malware s'est déjà copié ailleurs et, dans le cas de wp-vcd, il a effacé ses traces du fichier d'origine. La méthode générale est celle de notre guide pour nettoyer un site WordPress piraté ; les points propres à ce cas :
- Étendre le périmètre. Listez toutes les installations WordPress du compte d'hébergement, sous-domaines de test et anciennes copies compris.
- Trouver l'origine. Le site qui contient encore class.theme-modules.php ou class.plugin-modules.php est celui où le fichier nulled a été installé. Supprimez le thème ou l'extension concernés.
- Nettoyer le cœur. Supprimez wp-includes/wp-vcd.php et wp-includes/wp-tmp.php, puis remplacez wp-includes et wp-admin par ceux d'un WordPress officiel (
wp core download --force --skip-content) ;wp core verify-checksumsconfirme que post.php est redevenu l'original. - Nettoyer tous les thèmes. Réinstallez chaque thème depuis sa source officielle, ou inspectez son functions.php (
grep -l "install_code\|wp-vcd\|wp_vcd" wp-content/themes/*/functions.php). - Retirer les comptes. Cherchez l'utilisateur 100010010 et tout administrateur inconnu ; réinitialisez les mots de passe de tous les comptes, les clés de wp-config.php, les accès FTP et base de données.
- Vérifier le reste. PHP dans uploads, mu-plugins, tâches cron, options inconnues dans wp_options : le code reçu via wp-tmp.php a pu déposer d'autres éléments.
- Surveiller. Une surveillance d'intégrité des fichiers révélera une porte dérobée oubliée par une nouvelle modification de functions.php.
Plusieurs sites, un seul compte
Quand plusieurs installations sont touchées, une seule oubliée réinfecte les autres. Notre service de suppression de virus WordPress commence par un diagnostic gratuit sous 12 heures qui liste les installations touchées ; le nettoyage est fait sous 48 heures, à prix fixe de 350 € annoncé avant intervention et remboursé s'il échoue.
Sources
- Sucuri, Denis Sinegubko, « WP-VCD Malware Comes with Nulled Themes », 6 décembre 2017, blog.sucuri.net
- Wordfence, Mikey Veenstra, « WP-VCD: The Malware You Installed On Your Own Site », livre blanc, 4 novembre 2019, wordfence.com (PDF)
- Search Engine Journal, Matt G. Southern, « Top Threats to WordPress Sites Identified in New Report », 30 janvier 2021, d'après le rapport Wordfence 2020, searchenginejournal.com
- Patchstack, Dave Jong, « An In-Depth Analysis Of The WP-VCD Malware », 2 décembre 2021, patchstack.com
- Sucuri, Nathan Chaddock, « The Dangers of Installing Nulled WordPress Themes & Plugins », 16 février 2023, blog.sucuri.net
- Sucuri, « The Security Risks of Using Nulled WordPress Plugins », 30 mars 2026, blog.sucuri.net
- The Hacker News, « CryptoPHP Backdoor Hijacks Servers with Malicious Plugins & Themes », 24 novembre 2014, d'après le rapport Fox-IT, thehackernews.com
- WordPress.org, « License », wordpress.org
- WordPress.org, « Detailed Plugin Guidelines », Plugin Handbook, developer.wordpress.org
Votre site est touché ?
Nous intervenons sur les sites WordPress piratés, nettoyage et sécurisation compris. Décrivez votre situation, nous vous répondons.
À lire aussi

Un administrateur inconnu est apparu dans WordPress : d'où il vient et comment s'en débarrasser
Un administrateur que vous n'avez pas créé est apparu dans WordPress ? D'où vient le compte, trouver les comptes cachés, fermer les accès et nettoyer.
· 8 min de lecture

Analyser les journaux pour dater et comprendre un piratage WordPress
Où trouver les logs, quoi y chercher, les commandes grep, awk et find avec exemples, et comment reconstituer la chronologie d'un piratage WordPress.
· 10 min de lecture

Faux CAPTCHA et ClickFix sur les sites WordPress piratés : détecter et supprimer la fausse vérification
Votre site WordPress affiche un faux CAPTCHA ou une fausse vérification Cloudflare (ClickFix) ? Où se cache l'injection, comment la voir et la supprimer.
· 9 min de lecture

Google Ads suspendu pour « site compromis » : comment lever la suspension
Annonces refusées ou compte Google Ads suspendu pour « site infecté » ? La règle, le nettoyage, le réexamen Search Console, l'appel et les délais.
· 8 min de lecture