Un site WordPress “infecté”, ce n’est pas seulement une question de malware visible. Le vrai risque, c’est l’accès qui a déjà été obtenu, la persistance qui a déjà été installée, et l’endroit exact où l’attaquant a laissé des traces. Quand on commence le nettoyage, on a vite tendance à courir après les fichiers malveillants un par un. On finit alors par oublier la pièce maîtresse : l’exposition des fichiers sensibles. Si vous ne vérifiez pas ce qui a été rendu accessible, vous pouvez nettoyer, réparer, puis constater que l’infection revient, ou que des données ont été récupérées bien avant votre première action.
Dans ce billet, je détaille une approche pragmatique, centrée sur WordPress, pour nettoyer un site infecté tout en évaluant l’exposition des fichiers sensibles. L’idée n’est pas de vous faire “tout supprimer”, ni de vous lancer dans des suppositions. C’est https://gardewp.fr/nettoyage-malware-wordpress/ de travailler sur des faits, avec une méthode qui limite les erreurs et qui tient dans la réalité d’un site en production.
Quand l’infection parle surtout de l’exposition
Il existe plusieurs scénarios fréquents.
Le plus banal : une compromission via un plugin ou un thème vulnérable, puis dépôt de fichiers dans des emplacements inattendus, avec un accès ensuite facilité à travers des chemins téléchargeables, des archives, ou des scripts cachés. Le plus inquiétant : une élévation de privilèges qui permet à l’attaquant d’écrire dans des répertoires que vous pensiez “hors de portée”. Et parfois, ce n’est pas seulement un malware, c’est une mauvaise configuration, par exemple des répertoires lisibles, des sauvegardes accessibles, ou des logs trop bavards.
Dans tous ces cas, “nettoyer” sans “vérifier l’exposition” revient à effacer des symptômes sans traiter la cause. Si vos fichiers sensibles restent exposés, l’attaquant n’a même pas besoin de refaire tout le travail. Il peut revenir, ou simplement exploiter ce qui a déjà été laissé accessible.
Préparer le terrain avant de toucher aux fichiers
Avant de supprimer quoi que ce soit, je conseille presque toujours de figer l’état du site. Sur WordPress, c’est particulièrement important parce que certains fichiers malveillants sont conçus pour se régénérer, ou pour modifier ce qui les entoure.
La préparation, en pratique, ressemble à ceci en esprit, même si vous adaptez selon votre hébergement :
- Mettre le site en maintenance via une page simple ou via WP-CLI si vous l’utilisez, afin d’éviter une activité concurrente. Faire une sauvegarde “tampon” de ce qui est suspect, et idéalement un snapshot complet si votre hébergeur le permet. Prélever des informations système utiles, au minimum un listing des fichiers récents (les plus modifiés), et les traces serveur disponibles.
Je dis “tampon” parce que lors d’un incident, vous avez parfois besoin de revenir en arrière rapidement. Et si vous faites une suppression directe, vous perdez la possibilité d’analyser ce que vous avez retiré.
Un point de jugement : si le serveur est déjà très instable, ou si vous suspectez un accès en cours, le nettoyage peut devoir être précédé par des actions de confinement (couper un accès, modifier des clés, révoquer des sessions). La vérification de l’exposition des fichiers sensibles prend alors le relais, car c’est elle qui vous dira ce que vous pouvez exposer sans le savoir.
Cartographier les fichiers sensibles sous WordPress
WordPress n’est pas un projet “tout ou rien”. Le cœur et les thèmes sont assez robustes en configuration standard, mais l’environnement autour compte énormément. Les fichiers sensibles, dans une approche réaliste, sont ceux qui peuvent permettre d’exécuter du code, de divulguer des secrets, ou d’ouvrir un accès administratif.
Sans figer une liste universelle, voici la catégorie de fichiers que vous devriez considérer comme sensibles, et surtout vérifier au niveau des permissions et du routage web.
Les secrets et configurations
Le premier coup d’œil doit aller aux fichiers qui contiennent des secrets ou qui sont utilisés au démarrage.
- wp-config.php est le plus évident. Si vous le modifiez, ou si vous constatez des caractères ajoutés autour des blocs connus, c’est un drapeau rouge. Les fichiers de configuration divers, parfois présents dans des dossiers d’infra, tels que .env, des fichiers de configuration d’hébergement, ou des scripts d’intégration, peuvent contenir des identifiants. Beaucoup d’attaques visent des erreurs de configuration, pas uniquement des scripts malveillants. Les sauvegardes de configuration ou les copies. Le piège classique, ce sont les fichiers backup, old, ou des archives laissées au même endroit que le site.
Même lorsque l’attaquant n’en a pas fait une lecture directe, ces fichiers sont “sensibles” au sens où une simple exposition suffit pour compromettre vos comptes.
Le contenu exécutable et les points d’entrée web
Ensuite, vous regardez ce que le serveur peut exécuter via le navigateur.
WordPress exécute du PHP dans des contextes très précis. L’exposition des fichiers sensibles se joue donc aussi sur la manière dont votre serveur mappe les requêtes vers le système de fichiers. Si un répertoire est accessible en écriture ou en lecture, un payload peut être déposé.
Dans les investigations que j’ai menées, les endroits qui posent le plus souvent problème sont :
- les répertoires “admin-like” ou des dossiers où l’on croit qu’il n’y a pas de rendu web, les fichiers de logs et les archives si la configuration serveur les rend lisibles, les chemins où des plugins ou thèmes écrivent des caches.
L’objectif n’est pas de paniquer sur chaque cache, mais de repérer ce qui a été ajouté ou rendu accessible après l’infection.
Les emplacements où une persistance est facile
La persistance se fait souvent par l’ajout de fichiers dans des emplacements que WordPress utilise ou scanne, ou par des modifications qui s’appliquent à chaque requête.
Si vous voyez des modifications récurrentes ou des tâches planifiées qui reviennent, vous pouvez suspecter que l’attaquant a ciblé une zone où il sait qu’il sera rejoué. Ce n’est pas toujours “un fichier PHP dans un dossier standard”, parfois c’est un fichier dans un répertoire inattendu, parfois c’est un changement d’un paramètre qui rend un fichier de plus accessible.
C’est là que la notion d’exposition devient centrale. Un fichier “pas si dangereux” peut le devenir si, via configuration, il se retrouve téléchargeable ou exécutable.
Méthode de vérification : ce que vous pouvez contrôler sans deviner
La vérification de l’exposition des fichiers sensibles doit être factuelle. Je préfère une approche en deux axes, l’un sur les fichiers, l’autre sur la manière dont le serveur les sert.
1) Côté fichiers : repérer l’anormalité
Un site WordPress infecté laisse rarement des modifications parfaitement “logiques”. Même si l’attaquant est discret, il faut de la matière qui change.
Concrètement, vous cherchez :
- les fichiers récemment modifiés par rapport à votre fenêtre d’intervention habituelle, les fichiers dont l’extension ou le contenu ne correspondent pas au rôle du dossier, les ajouts dans des dossiers que votre processus normal n’utilise pas.
Dans la pratique, je fais souvent un tri par date de modification, puis je passe en revue manuellement ce qui est le plus récent. Pour éviter l’effet “tout est louche”, je compare aussi avec ce que je sais de votre stack, par exemple les caches habituels, ou les dossiers créés par votre constructeur de site, votre thème, ou votre outil de déploiement.
Un détail important : une infection peut aussi modifier le contenu, sans changer la date de manière évidente selon les systèmes de fichiers. C’est pour cela que la vérification ne doit pas être uniquement une liste “les plus récents”. Elle doit aussi inclure un contrôle de cohérence.
2) Côté serveur : vérifier ce qui est réellement accessible
Même si un fichier est “là”, ce qui compte est ce que le web lui permet. Une configuration serveur peut rendre lisible un répertoire, ou autoriser l’exécution d’un type de fichier que vous ne pensiez pas exécutable.
Vous voulez donc vérifier la politique d’accès au niveau du serveur ou de votre configuration web. Si vous utilisez Apache avec un .htaccess, ou Nginx avec ses règles, le raisonnement est similaire : quels chemins pointent vers quoi, quels types sont servis, et lesquels sont protégés.
Signaux typiques d’exposition involontaire :
- accès direct à des archives ou sauvegardes via une URL “devinable”, listes de répertoires autorisées, ou pages générées par des scripts inattendus, fichiers sensibles accessibles malgré leur nom “discret”, erreurs serveur incohérentes, par exemple des codes 200 au lieu de 403 sur des chemins que vous attendiez en blocage.
Je recommande aussi de vérifier les permissions système. Sur beaucoup d’hébergements partagés, des permissions trop larges peuvent être un vrai facteur aggravant. L’attaquant gagne en capacité d’écriture si le serveur n’isole pas proprement.
Exemples concrets d’exposition qui sabotent le nettoyage
Pour rendre ça tangible, voici des cas rencontrés, pas forcément identiques à votre situation, mais représentatifs des angles morts.
Le dossier de sauvegarde accessible
Une équipe fait une sauvegarde en copiant un fichier site_backup.zip dans le même dossier que l’installation, par “commodité”. Quand le site est ensuite compromis, l’attaquant n’a pas besoin de “trouver” wp-config.php. Il télécharge simplement l’archive si elle est accessible publiquement. Et ensuite, il peut rejouer des identifiants, pivoter, ou installer de nouvelles charges depuis un endroit plus sûr pour lui.
La leçon est simple : même si le fichier n’est pas “dans un dossier sensible” au sens humain, il peut devenir sensible au sens technique. Si le serveur sert ce dossier, il faut traiter l’exposition.

Les logs lisibles
Des logs accessibles en lecture publique, parfois par une mauvaise règle de configuration. Si vous avez du caching mal paramétré ou un répertoire exposé, vous pouvez retrouver dans les logs des chemins, des tokens de diagnostic, des URLs d’API, ou des erreurs qui aident un attaquant à affiner.
Le nettoyage de fichiers ne résout pas ça. Il faut corriger la politique d’accès.
Un fichier cache ou un export contenant des secrets
On pense souvent que “c’est un fichier temporaire”. Mais certains outils exportent des données sensibles, ou gardent des entêtes d’API. Si cet export est accessible, vous avez une fuite.
Et le plus piégeux, c’est quand l’attaquant dépose un fichier qui ressemble à un export pour vous faire passer à côté. Vous supprimez le script évident, mais vous oubliez que le serveur sert tout ce qui est dans un dossier précis.
Nettoyer sans casser : stratégie de retrait et validation
Après l’évaluation, vient l’action. Le nettoyage “propre” a deux objectifs, retirer la charge malveillante et revenir à un état cohérent. Mais il y a un piège : un site WordPress est un assemblage. Si vous supprimez trop vite, vous cassez des dépendances. Et si vous remettez “juste le core” sans vérifier les plugins et thèmes, l’infection peut persister.
Une stratégie que je trouve robuste consiste à combiner :
- Remplacement du cœur WordPress (les fichiers standards) par une version connue comme propre. Désactivation temporaire des plugins et thèmes pour isoler la cause. Réinstallation ou purge ciblée des éléments qui sont corrompus, plutôt que nettoyage au hasard.
Le point clé est la validation. Vous devez vérifier que les pages sensibles se comportent comme attendu, et que l’accès aux fichiers sensibles n’est pas redevenu possible.
Valider l’absence de persistance
L’infection moderne ne se contente pas d’un dépôt unique. Elle peut se regénérer via un chemin exposé, ou utiliser une tâche planifiée, ou une modification persistante de fichiers.
Au moment du contrôle, je surveille particulièrement :
- les tentatives de connexion anormales côté WordPress, les changements de fichiers après restauration, des requêtes serveur répétées vers des endpoints ou des chemins inhabituels.
Vous cherchez la signature d’un mécanisme qui revient. Si vous ne regardez que le contenu statique, vous pouvez être trompé.
Vérifier l’exposition avec des tests raisonnables
Vous n’avez pas besoin de transformer votre audit en projet de recherche. Des tests simples donnent déjà beaucoup de signal.
L’idée est de tester l’accessibilité au navigateur, de vérifier les codes de retour, et de contrôler ce qui est indexable.
Je privilégie :
- Tester l’accès direct à des fichiers et dossiers qu’on ne doit pas servir publiquement, comme des archives ou des sauvegardes, et constater un blocage propre (erreur 403 ou absence de contenu). Vérifier la présence de fichiers “cachés” au sens URL, par exemple ceux qui ont tendance à être oubliés, comme des .env ou des fichiers de config, même si par défaut ils ne devraient pas être accessibles. Contrôler l’indexation. Si vous pouvez récupérer via recherche interne ou via un outil d’inspection la liste de fichiers, vous devez considérer que c’est une exposition.
Note importante : les codes exacts dépendent du serveur. Le but n’est pas d’obtenir un code unique, mais un comportement cohérent avec une configuration sécurisée. Parfois, un serveur renvoie 404, parfois 403. Les deux peuvent indiquer un blocage effectif.
Durcir l’exécution et réduire la surface d’attaque
Une fois l’infection contenue, vous réduisez la surface. C’est ici que la vérification de l’exposition se transforme en protection durable.
Quelques mesures de bon sens, sans promesse magique :
- Rendre les répertoires de sauvegarde et d’export non accessibles via le web, en changeant leur emplacement hors de la racine servie. Limiter l’écriture par le web. Si votre hébergement le permet, évitez que des permissions trop ouvertes donnent plus de capacité à un attaquant en cas de récidive. Revoir les permissions des fichiers critiques, particulièrement autour de wp-config.php et des répertoires que WordPress utilise en écriture.
Dans des environnements partagés, toutes les actions ne sont pas possibles comme vous le souhaiteriez. Vous devez donc adapter à votre hébergement. L’important est que vous sachiez quelles règles sont appliquées, et pourquoi.
Nettoyer WordPress infecté : points de décision pendant l’intervention
Le nettoyage d’un site infecté, ce n’est pas seulement “quoi supprimer”. C’est une succession de décisions. Et certaines décisions sont plus coûteuses que d’autres.
Désactiver plutôt que supprimer
Quand je suis face à une infection, je désactive d’abord les plugins et thèmes douteux. Cela permet de couper des mécanismes potentiels sans perdre des indices. Puis seulement après une analyse, je décide de remplacer.
Cette approche garde du contexte. Elle réduit aussi le risque de casser le site pendant que vous travaillez sur l’exposition.
Remplacer le core plutôt que corriger des fragments
Corriger à la main des fichiers du core est rarement la meilleure stratégie. Si l’attaquant a modifié plusieurs parties, ou si vous avez un doute sur un fichier copié depuis un “modèle” corrompu, le core remplacé vous donne un socle fiable. Et ce socle facilite ensuite l’analyse des fichiers restants.
Une règle pratique sur les “fichiers bizarres”
Si un fichier n’a pas de rôle évident dans votre stack, et qu’il est accessible via le web, je le traite comme suspect. Mais je ne supprime pas “au hasard”. Je vérifie d’abord son emplacement, son extension, et s’il est servi au navigateur. Ensuite, je décide. C’est là que la vérification d’exposition évite de supprimer quelque chose qui devrait être protégé plutôt que supprimé, ou l’inverse.
Cas limite : ce qui ressemble à une infection mais ne l’est pas
Il y a des faux positifs. Des sites changent, des plugins se mettent à jour, des caches se régénèrent, des outils d’optimisation injectent du contenu dans des fichiers. Dans ce contexte, vous pouvez confondre un changement normal avec une modification malveillante.
Voici comment éviter de vous tromper :
- Comparez les chemins à votre historique. Si un fichier apparaît pour la première fois après une période d’activité normale, la probabilité d’un lien avec un plugin déployé augmente. Regardez le contenu, pas uniquement la date. Un fichier peut être nouveau et légitime, ou ancien et malveillant. Ne confondez pas “présent” et “exposé”. Un fichier peut exister sans être servit. C’est souvent le cas de scripts dans des dossiers non exposés. L’exposition est un critère fort d’évaluation.
Ce sont des décisions de terrain. Elles ne donnent pas une vérité absolue, mais elles réduisent le risque de réagir de travers.
Rétablir la confiance : après le nettoyage
Une fois que vous pensez que c’est propre, la partie la plus importante est souvent la surveillance.
Je recommande de garder un œil sur :

- les logs d’accès et d’erreurs, surtout les requêtes vers des chemins inhabituels, les modifications de fichiers, si vous avez une solution de monitoring, les comptes WordPress, notamment les utilisateurs récents, les changements de rôle, ou les connexions anormales.
Et sur l’exposition, vous vérifiez à nouveau au moins une fois après correction. Les règles serveur, les fichiers .htaccess et certains paramètres applicatifs peuvent être remis ou altérés lors d’une restauration ou d’une mise à jour.
Si vous remarquez que des fichiers sensibles redeviennent accessibles, vous n’êtes pas “finis”, vous êtes au début. Dans ce cas, le nettoyage sans durcissement ne fait que repousser le problème.
Checklist mentale pour vérifier l’exposition des fichiers sensibles
Je termine avec une grille mentale, volontairement concise, pour garder le fil.
Vous devez être capable de répondre, au moins à un niveau raisonnable, à ces questions. Si la réponse est floue, vous avez une zone à reprendre :
- Est-ce que des fichiers contenant des secrets sont accessibles via une URL directe ? Est-ce que des sauvegardes, exports, archives ou fichiers temporaires sont servis par le web ? Est-ce que des répertoires non prévus pour le public le sont, par configuration ou permissions ? Est-ce que les fichiers récemment modifiés sont cohérents avec votre activité récente (mises à jour, déploiement, maintenance) ? Est-ce que le comportement serveur bloque correctement l’accès aux chemins sensibles attendus ?
Ce sont des questions simples, mais elles évitent un piège courant : traiter uniquement ce qui est visible, au lieu de traiter ce qui est exploitable.
Un mot sur le plan d’action selon votre situation
Chaque incident WordPress a sa réalité : taille du site, niveau de compétence, hébergement, nombre de plugins, et l’état du journal serveur. Si vous avez des accès limités, vous ne pourrez pas tout corriger au niveau serveur, mais vous pouvez au moins isoler, remplacer le core, traiter les plugins et valider l’exposition.
Si vous avez les accès serveur, la vérification d’exposition doit monter en priorité. En général, c’est elle qui détermine si l’attaquant a déjà “gagné la carte” pour revenir vite, sans avoir besoin d’un nouvel effort.
Et si vous n’avez pas les accès, la vérification de l’exposition reste utile car elle vous aide à prioriser les actions. Vous pouvez commencer par couper ce qui est lisible ou téléchargeable, puis reconstituer une base propre.
Si vous voulez, dites-moi votre contexte (type d’hébergement, présence d’un .htaccess ou Nginx, taille du site, et ce que vous avez déjà observé, par exemple fichiers modifiés, redirections, pages injectées). Je pourrai vous proposer une séquence d’investigation adaptée, toujours centrée sur l’exposition des fichiers sensibles.
