Quand un site WordPress se fait compromettre, on pense souvent au pire, mais rarement à la méthode. Le scénario typique ressemble à ceci : un plugin “secrètement” installé, une mise à https://gardewp.fr/nettoyage-malware-wordpress/ jour qui n’en est pas une, un fichier qui n’était pas là la veille, puis une lenteur étrange ou des redirections vers des domaines qui n’ont rien à voir avec votre activité. Derrière ce tableau, il y a presque toujours un même objectif, garder un accès même après suppression apparente. C’est là qu’une backdoor prend tout son sens.
Une backdoor dans WordPress n’est pas uniquement un “outil” placé dans un dossier. C’est un comportement persistant. Elle peut se cacher dans un fichier PHP modifié, s’activer via une URL spécifique, attendre des paramètres GET ou POST particuliers, ou encore s’appuyer sur des mécanismes légitimes pour survivre aux nettoyages rapides. Le risque, si vous nettoyez en surface, c’est de croire le problème réglé alors qu’il suffit d’une action banale côté serveur pour que l’accès revienne.
Je vais détailler une approche réaliste, pragmatique, axée sur la détection et le nettoyage sécurisé. L’idée n’est pas de “tout supprimer”, mais de retrouver le chemin d’exécution, comprendre comment la backdoor fonctionne dans votre configuration, puis corriger durablement.
Reconnaître les signes d’une backdoor, même quand “tout a l’air normal”
Sur beaucoup de sites, la compromission commence par quelque chose de discret. Parfois ce sont des comptes administrateurs créés sans que vous l’ayez fait. Parfois, ce sont des fichiers qui apparaissent dans wp-content ou une modification sur le thème actif. Souvent, c’est une combinaison de signaux.
J’ai vu des cas où l’infection ne générait pas de spam visible. Les pages semblaient fonctionner, mais les performances chutaient de manière intermittente, par exemple uniquement quand certaines URL étaient visitées. Dans ces situations, la backdoor peut consommer du temps en espionnant la requête, en testant la session, ou en exécutant un script différé. D’autres fois, le site ne redirige pas de façon continue. Il redirige seulement si le visiteur a un user agent particulier, si le pays correspond, ou si certains paramètres existent.
Les indices les plus utiles, parce qu’ils laissent des traces, sont généralement :
- des fichiers PHP nouvellement ajoutés ou modifiés, hors plugins et thèmes attendus ; des variables ou fonctions “bizarres” dans des fichiers standards ; des tâches cron inconnues ; des règles .htaccess inhabituelles dans le dossier racine ou dans wp-content ; des comptes utilisateurs “fantômes” ou des rôles élevés accordés sans raison.
Le piège est de confondre symptômes et cause. Un site lent peut venir d’un cache mal réglé. Une redirection peut venir d’un plugin de tracking. Un fichier ajouté peut provenir d’un workflow CI/CD. D’où l’importance de vérifier, pas seulement de réagir.
Comprendre comment une backdoor survit dans WordPress
Une backdoor a besoin de trois choses : exécuter du code, persister après suppression, et se déclencher assez rarement pour éviter d’être repérée. Les méthodes changent, mais les logiques reviennent.
Sur WordPress, les points d’entrée courants incluent :
Un plugin ou thème compromis, où du code malveillant est inséré dans un fichier PHP (souvent au début ou à la fin), avec une logique conditionnelle. Un point d’export ou d’import mal protégé, par exemple un upload non filtré ou une fonctionnalité d’API exposée. Une compromission de credentials, mot de passe administrateur réutilisé, session volée, ou bruteforce. Une fois connectée, la backdoor peut ajouter des fichiers, des webhooks, ou des hooks dans des emplacements moins visibles. Des mécanismes de persistance “sous le radar” comme cron, options WordPress, ou modifications dans des fichiers rarement consultés.Ce qui rend le nettoyage compliqué, c’est que la backdoor peut s’appuyer sur l’architecture WordPress elle-même. Exemple classique : le code ne se contente pas d’infecter, il se branche sur un hook. Une fois branchée, la backdoor s’exécute au bon moment, parfois uniquement sur des conditions précises, ce qui rend la reproduction difficile.
Edge cases à ne pas rater
Il existe un autre piège, plus “innocent” mais déroutant. Dans certains environnements, des outils légitimes modifient le code lors de déploiements. Si vous avez un système de déploiement automatique, un plugin de compression, ou un agent de sécurité, il peut toucher des fichiers. C’est pour cela qu’une détection utile doit se faire avec des comparaisons, pas avec des intuitions.
La stratégie robuste consiste à établir une base de référence : ce que votre site avait avant, ce que votre stack “normal” fait, et où vous voyez des écarts.
Étape 1 : sécuriser immédiatement l’accès, sans casser l’investigation
Avant de supprimer quoi que ce soit, stabilisez la situation. Sur un site compromis, vous êtes en compétition contre la persistance.
Commencez par bloquer l’accès à distance aux zones d’administration jusqu’à validation. Si vous avez accès à votre panneau d’hébergement, appliquez une restriction IP sur /wp-admin temporairement, ou mettez en place une page de maintenance qui renvoie un code 503 et limite l’accès admin. L’objectif est simple : empêcher la backdoor de s’activer pendant que vous inspectez.
Ensuite, forcez la rotation des sessions et des secrets WordPress. Même si vous pensez que la compromission vient d’un plugin, un attaquant peut avoir conservé un jeton (cookie) de session active. Cela signifie que vous pouvez supprimer des fichiers, mais votre navigateur d’admin reste “authentifié” côté serveur et relance la compromission.
Si vous avez accès à la base de données, vérifiez l’état des utilisateurs. S’il y a eu création de comptes, désactivez-les ou supprimez-les après validation. Dans le doute, changez d’abord tous les identifiants de manière sûre (admin et comptes FTP, SFTP, hébergement).

Étape 2 : faire parler les différences de fichiers (ce que la backdoor laisse)
La partie la plus rentable de l’enquête est souvent aussi la plus “terre à terre” : comparer. Si vous avez une sauvegarde antérieure à la compromission, comparez le contenu. Sinon, comparez au moins la structure attendue (plugins installés, thèmes, uploads) et inspectez les fichiers modifiés récemment.
Concrètement, cherchez :
- des fichiers PHP ajoutés dans wp-content qui ne correspondent à aucun plugin ou thème ; des fichiers dans des dossiers “atypiques” (par exemple dans wp-includes alors que vous n’avez rien mis à jour) ; des modifications d’horodatage (mtime) très récentes sur des fichiers qui ne bougent jamais dans votre contexte ; des lignes marquées par des patterns classiques, telles que base64 decode, eval, gzinflate, strrot13, ou lecture de contenu depuis une URL externe.
Attention : ces fonctions existent parfois dans des plugins légitimes. Ce qui compte est la combinaison et le contexte. Un plugin peut contenir eval (ce n’est pas recommandé), mais il ne l’appelle pas forcément dans une branche conditionnelle déclenchée par un paramètre d’URL. Votre tâche consiste à identifier le “cerveau” et pas seulement les “outils”.
Un repère pratique : la structure d’un fichier suspect
Les backdoors modernes évitent l’évidence. Elles mettent souvent une première couche de “camouflage” : base64 ou encodage, puis un décodeur, puis l’exécution. Parfois, elles stockent une chaîne codée, parfois elles récupèrent du code à l’exécution depuis une URL.
Dans une investigation, j’utilise une approche simple : je regarde le fichier, je repère le chemin de déclenchement, puis je vérifie si ce chemin peut s’exécuter dans vos conditions habituelles. Si la condition est du type “si un paramètre existe”, je teste en local (ou via un environnement de staging) pour comprendre si l’exécution se produit. Si je ne peux pas tester, je privilégie le blocage côté serveur et la suppression après validation stricte.
Étape 3 : inspecter les points d’intégration dans WordPress (hooks, options, cron)
Une fois que vous avez repéré des fichiers suspects, la seconde étape consiste à vérifier comment ils s’intègrent à WordPress. Les backdoors s’accrochent souvent à des mécanismes connus.
Trois zones reviennent très souvent :
- les événements WordPress via add action ou addfilter ; les options stockées dans la base de données, notamment des valeurs “pilotant” la charge utile ; les déclenchements cron, internes ou via la planification serveur.
Sur certains sites, la backdoor n’exécute rien tant qu’un cron précis ne tourne pas, ce qui explique pourquoi vous ne voyez rien immédiatement après la compromission. Le cron peut lancer une requête externe, créer des fichiers, ou modifier des options.
Ce que vous pouvez contrôler rapidement
Si vous avez un accès à la base, examinez les options qui ont été modifiées récemment. Le langage “modifié récemment” dépend des outils, mais vous pouvez souvent filtrer par timestamps dans des tables de logs, ou comparer avec une sauvegarde.
Pour cron, vérifiez à la fois la structure WordPress (wp-cron) et le niveau serveur. Une backdoor peut déclencher via wp-cron même si vous n’utilisez pas de planificateur explicitement.
Étape 4 : analyser les requêtes et l’activité serveur
Quand il y a une backdoor, il y a souvent des traces dans les logs. Même si les logs ne vous donnent pas la “preuve” complète, ils indiquent la direction.
Cherchez les patterns suivants :
- des accès répétitifs à des URLs “qui n’existent pas” dans votre site ; des requêtes POST vers admin-ajax.php avec des paramètres inconnus ; des accès à des fichiers PHP dans des dossiers sans rôle clair dans WordPress ; des erreurs 404 ou 403 inhabituelles à cause de tentatives d’exécution.
Si votre hébergement fournit des logs Nginx ou Apache, utilisez-les. Si vous avez aussi un pare-feu applicatif, regardez ses événements pour repérer des payloads typiques.
Le but n’est pas de chasser chaque IP pendant des heures. C’est d’identifier une fenêtre de déclenchement. Par exemple, vous pouvez découvrir que la backdoor ne s’exécute que sur des requêtes qui contiennent un paramètre spécifique. Avec cette info, vous pouvez bloquer ce paramètre côté règles, ou au minimum empêcher l’accès jusqu’à nettoyage complet.
Nettoyage sécurisé : supprimer la backdoor sans créer de nouveaux risques
Une fois la détection amorcée, vient la partie qui coûte du temps : nettoyer correctement.
Le nettoyage “rapide” consiste à supprimer des fichiers identifiés comme malveillants. Le nettoyage “sûr” consiste à réduire les chances que la backdoor soit restée dans un autre chemin ou dans un mécanisme persistant. Cela implique parfois https://gardewp.fr/ une réinstallation ou un remplacement massif de composants.
Choisir entre remplacement complet et nettoyage ciblé
Si vous avez une sauvegarde fiable antérieure, la méthode la plus sûre est de restaurer à partir de cette sauvegarde, puis de corriger les vulnérabilités et mots de passe. Si la sauvegarde n’est pas fiable ou trop ancienne, vous pouvez tenter un nettoyage ciblé, mais il faut alors être discipliné, en particulier sur WordPress core, thèmes, plugins, et uploads.
Dans ma pratique, quand la backdoor ressemble à un kit persistant ou qu’il existe plusieurs fichiers suspects, je préfère remplacer le cœur et désactiver tout ce qui n’est pas essentiel. Ensuite seulement, je réactive progressivement.
Voici une approche de décision simple, sans tourner en rond :
Si core, thèmes et plugins ont été touchés ou si vous n’avez pas de base de comparaison fiable, remplacez WordPress core entièrement et repartez sur des sources propres. Si un plugin ou un thème est compromis, supprimez le code concerné puis réinstallez depuis une source fiable (depuis le dépôt officiel ou votre package). Si vous avez des preuves de persistance via options et cron, nettoyez aussi la base et vérifiez les planifications. Si des identifiants ont été compromis, changez tous les secrets, pas seulement le mot de passe admin.Checklist de nettoyage (à faire dans cet ordre)
Mettre le site en mode maintenance et bloquer l’accès admin temporairement. Désactiver tous les plugins, puis réactiver seulement ceux nécessaires pour tester. Remplacer WordPress core et corriger thèmes/plugins via réinstallation propre. Supprimer les fichiers réellement identifiés comme malveillants, puis vérifier wp-config.php et les configurations critiques.(Je garde cette liste courte, parce que l’erreur la plus fréquente est de “sauter” l’ordre, puis de nettoyer un état instable.)
Cas typiques de backdoors dans WordPress, et comment les traiter
Chaque compromission a sa signature. Mais certaines formes reviennent, et connaître ces formes accélère l’analyse.
1) Fichiers PHP cachés dans wp-content/uploads ou des sous-dossiers
C’est un classique. Une backdoor peut être dissimulée dans des dossiers qui devraient contenir uniquement des médias. Le fichier a souvent une taille étrange, une date récente, et un contenu codé.
Le traitement consiste généralement à supprimer le fichier suspect et à vérifier s’il y a d’autres charges dans le même dossier. Ensuite, regardez s’il existe un autre moyen d’upload côté vulnérabilité (upload non restreint, droits trop larges, formulaire exposé).
Dans ce cas, la question la plus importante n’est pas seulement “quel fichier est là ?”, mais “pourquoi l’attaquant a pu y mettre un fichier ?”.

2) Modification de wp-config.php ou ajout de logique d’exécution
Quand wp-config.php est modifié, c’est un signal fort. Parfois, la backdoor est dans une variable ajoutée ou dans une section exécutée sous condition.
Ici, ne faites pas un simple “nettoyage partiel”. Faites plutôt une comparaison stricte de wp-config.php avec votre modèle de configuration. Vérifiez aussi que les constantes, clés de sécurité, et paramètres base de données n’ont pas changé.
Si vous remplacez wp-config.php, faites-le avec prudence. Une erreur de clé ou un paramètre de base casse le site. Avant de toucher, copiez l’ancien fichier et conservez-le pour l’analyse.
3) Persistance via des comptes administrateurs et rôles modifiés
Quand l’attaquant a un compte, même avec la backdoor supprimée, il peut revenir via le même compte, ou via des droits qu’il a ajoutés.
Le traitement est clair : contrôlez la liste des utilisateurs, supprimez ou désactivez ceux inconnus, puis changez les mots de passe de tous les comptes, y compris ceux d’accès hébergement et bases. Pensez aussi aux comptes liés à vos intégrations (API, formulaires, webhooks).
4) Blocage incomplet : suppression des fichiers, mais maintien des options
Il arrive qu’on trouve une charge dans un fichier, qu’on la supprime, et que la compromission revienne. Cela signifie qu’il existe un autre composant.
Souvent, la backdoor est stockée dans des options, ou via un cron. Dans ces cas, vous devez aussi inspecter la base et planifications. Nettoyer les fichiers seuls n’est pas suffisant.
Sécuriser après nettoyage : empêcher la réinfection et réduire l’impact
Nettoyer le site WordPress infecté, ce n’est pas seulement supprimer le code. C’est aussi corriger la cause.
Si vous corrigez une backdoor mais laissez une vulnérabilité d’upload, un accès FTP trop permissif, ou un plugin obsolète, l’attaquant n’aura aucun effort à refaire. La réinfection est souvent plus rapide que la première fois, parce qu’ils gardent des méthodes de déclenchement.
Mesures concrètes et raisonnables
Je recommande de traiter à la fois les surfaces d’attaque et la visibilité.
- Mettre à jour WordPress core, thèmes et plugins, mais seulement après avoir identifié ce qui a été touché. Réduire les privilèges, limiter les rôles, et supprimer les comptes inutiles. Réviser les identifiants d’hébergement et FTP/SFTP, surtout si la plateforme a été compromise. Vérifier les règles de permissions des dossiers, pour éviter l’exécution de PHP dans des emplacements non prévus. Mettre en place une journalisation claire, au moins le temps de stabiliser le site.
Là où il faut faire preuve de jugement, c’est sur le “trop”. Bloquer toutes les IP ou désactiver toute mise en cache peut casser votre trafic. Le but est de réduire les surfaces, pas de rendre le site inutilisable.
Vérification finale : prouver que la backdoor est partie
Avant de réouvrir au public, vous devez valider. La validation n’est pas un test unique, elle ressemble plutôt à une série de petits contrôles.
Vous pouvez vérifier :
- qu’il n’y a plus de fichiers suspects selon la comparaison précédente ; que les plugins et thèmes réinstallés n’ont pas leurs fichiers modifiés ; que les comptes administrateurs sont corrects ; que le comportement du site, notamment les redirections et déclenchements, n’a plus lieu.
Là, les logs redevenus “propres” comptent. Si vous voyez encore des requêtes vers des URL inexplorées, ou des erreurs liées à un paramètre suspect, c’est un indice que quelque chose reste actif.
Je conseille aussi une approche de staging quand c’est possible : restaurez sur un environnement de test, exécutez les mêmes tests de requêtes, et regardez si la charge se déclenche. Cela évite de travailler “à l’aveugle” sur le site en production.
Prévenir sans paranoïa : réduire les risques dès maintenant
Une backdoor est difficile à anticiper à la perfection, parce qu’elle dépend souvent de l’exploitation d’une faille précise. Mais vous pouvez rendre l’attaque plus coûteuse, donc moins probable.
La prévention efficace se situe sur quatre axes : hygiène logicielle, réduction des droits, surveillance et sauvegardes testées.
- Hygiène logicielle : mises à jour régulières, surtout pour plugins que vous utilisez en front. Les plugins “inactifs” mais installés peuvent aussi être une surface. Réduction des droits : comptes admin réservés aux humains qui gèrent vraiment le site, pas aux freelances sans suivi. Surveillance : logs applicatifs et logs serveur, au moins assez longtemps pour détecter les patterns récurrents. Sauvegardes testées : une sauvegarde non restaurée est un faux sentiment de sécurité.
Sur le terrain, les incidents suivent très souvent une même trajectoire : une mise à jour oubliée, un mot de passe réutilisé, un compte admin partagé, ou un plugin installé pour une fonctionnalité ponctuelle puis laissé.
Ce que je ferais en priorité dans un cas réel
Si vous êtes en train de répondre à un incident maintenant, voici la logique d’intervention la plus utile, en un raisonnement continu. Vous bloquez l’accès admin, vous stabilisez, vous comparez les fichiers à une référence, puis vous identifiez le mécanisme de déclenchement. Ensuite seulement, vous remplacez WordPress core et les composants touchés par des versions propres. Vous nettoyez la base si nécessaire, puis vous changez tous les secrets. Enfin, vous validez via logs et comportements, et vous ne réouvrez que quand tout est cohérent.
C’est une approche qui évite le scénario frustrant où l’on supprime un fichier et où, deux jours plus tard, le site repart dans la même spirale. Les backdoors reviennent rarement “par magie”, elles reviennent parce qu’une persistance a survécu, ou parce qu’une vulnérabilité n’a pas été corrigée.
Mentions importantes : limites et questions à clarifier avant de toucher
Il existe un point que je préfère expliciter. Sans accès aux fichiers et aux logs, il est impossible d’affirmer la nature exacte de la backdoor. Deux sites peuvent présenter des symptômes similaires, redirections, comptes créés, fichiers nouveaux, mais la cause peut être différente : plugin compromis, accès FTP, faille upload, ou même une injection via un formulaire.
Si vous envisagez une restauration depuis une sauvegarde, vérifiez que la sauvegarde n’est pas elle-même contaminée. Je préfère une sauvegarde plus récente et restaurée correctement qu’une sauvegarde ancienne qui “semble propre” mais qui ne l’est pas. Et si vous devez choisir, mieux vaut perdre du temps en vérification que perdre le contrôle une seconde fois.
Si vous travaillez avec un hébergeur ou une société de sécurité, demandez qu’ils vous montrent la méthode de détection employée. Pas seulement “on a nettoyé”. Vous devez connaître ce qui a été supprimé, ce qui a été remplacé, et ce qui a été corrigé.
Votre site, vos données, votre réputation. Une backdoor dans WordPress n’est pas un simple bug, c’est une perte de contrôle. La récupération passe par une remise en ordre technique, mais aussi par une discipline de vérification.
Si vous voulez, décrivez votre situation (symptômes observés, plugins installés, présence de redirections, accès admin disponible, existence de sauvegarde récente). Je peux vous proposer une stratégie de triage adaptée, avec les contrôles à effectuer en premier pour réduire le temps perdu et éviter les nettoyages incomplets.