Supprimer un malware WordPress : le plan étape par étape
Supprimer un malware WordPress en huit étapes : isoler le site, garder les preuves, trouver la faille, nettoyer depuis des sources sûres, changer les secrets, renforcer.
Aussi en : English Deutsch Español Italiano Polski Português Türkçe
Pour supprimer durablement un malware WordPress, il faut remplacer tout ce qui peut l’être à partir de sources fiables, refermer la faille par laquelle l’attaquant est entré et changer tous les secrets qu’il a pu voir. Effacer le seul fichier suspect que vous avez trouvé ne suffit pas, car les attaquants se ménagent presque toujours plusieurs portes de retour.
Ce plan compte huit étapes. Suivez-les dans l’ordre et prenez des notes au fur et à mesure : vous en aurez besoin pour Google, pour votre hébergeur et peut-être pour l’autorité de protection des données. Si vous n’êtes pas encore certain que le site soit compromis, commencez par nos 12 signes d’un site WordPress piraté.
Avant de supprimer le malware WordPress : nettoyer, restaurer ou se faire aider ?
Tranchez cette question en premier, car elle conditionne tout le reste du plan.
- Restaurez une sauvegarde saine si vous savez à peu près quand l’infection a commencé et que vous disposez d’une sauvegarde antérieure à cette date. Les étapes 3, 5 et 6 restent indispensables, sinon l’attaquant reviendra par la même faille. Les commandes, commentaires ou messages de formulaire créés depuis la sauvegarde seront perdus, à moins de les exporter d’abord.
- Faites appel à un professionnel si le site encaisse des paiements ou contient des données sensibles, si l’infection est revenue après un premier nettoyage, si plusieurs sites du même serveur sont touchés, s’il vous faut un rapport d’analyse forensique pour un assureur ou une autorité, ou si vous n’êtes pas à l’aise avec la ligne de commande. Beaucoup d’hébergeurs proposent aussi ce service.
- Nettoyez vous-même si vous disposez d’un accès SSH et de WP-CLI, de la liste des extensions et thèmes que vous utilisez, et du temps nécessaire pour bien faire les choses.
Contenir : stopper les dégâts, conserver les preuves
Étape 1 : limiter les dégâts
Mettez le site hors ligne ou restreignez-en l’accès pour que les visiteurs ne soient pas infectés. wp maintenance-mode activate affiche un avis de maintenance, mais uniquement pour les requêtes qui chargent WordPress : un fichier de porte dérobée appelé directement s’exécute toujours. Le vrai confinement se fait au niveau du serveur ; demandez donc à votre hébergeur de bloquer l’accès public ou de le limiter à votre adresse IP.
Verrouillez ensuite l’administration. Cette commande déconnecte tous les utilisateurs :
wp user list --field=ID | xargs -n 1 wp user session destroy --all
Changez votre propre mot de passe administrateur depuis un appareil sain. Notez les comptes inconnus, mais ne les supprimez qu’après l’étape 2. Sur un site infecté, vous pouvez ajouter --skip-plugins --skip-themes aux commandes WP-CLI pour que le code des extensions et des thèmes ne s’exécute pas ; les extensions indispensables (must-use) et wp-config.php sont toutefois toujours chargés.
Étape 2 : figer l’état infecté
Avant de toucher à quoi que ce soit, sauvegardez le site piraté exactement tel qu’il est. Vous en aurez besoin pour trouver le point d’entrée, pour répondre à un assureur ou à une autorité, et comme solution de repli si le nettoyage casse quelque chose.
# à lancer à la racine de WordPress ; ~/evidence doit se trouver hors de la racine web
mkdir -p ~/evidence
wp db export ~/evidence/db-infected-$(date +%F).sql
tar -czf ~/evidence/files-infected-$(date +%F).tar.gz .
sha256sum ~/evidence/*
La ligne sha256sum enregistre des sommes de contrôle, grâce auxquelles vous pourrez montrer plus tard que les copies n’ont pas été modifiées. Téléchargez aussi les journaux d’accès et d’erreurs ; beaucoup d’hébergeurs ne les conservent que pendant une durée limitée.
Nettoyer : refermer la faille et remplacer ce qui a été touché
Étape 3 : trouver le point d’entrée
Si vous sautez cette étape, vous risquez de nettoyer le même site la semaine prochaine. Les points d’entrée typiques sont des extensions ou des thèmes vulnérables, des mots de passe volés ou réutilisés, et d’autres sites infectés sur le même compte d’hébergement.
- Extensions et thèmes vulnérables. Lancez
wp plugin list --fields=name,status,version,updateetwp theme list, puis recherchez chaque élément obsolète dans une base de données de vulnérabilités. La rapidité compte : l’éditeur de solutions de sécurité Patchstack indique que, pour les vulnérabilités massivement exploitées en 2025, le délai médian pondéré avant exploitation de masse était de 5 heures (State of WordPress Security in 2026). - Identifiants volés. Vérifiez quand les comptes administrateurs inconnus ont été créés et repérez les connexions depuis des adresses IP inhabituelles.
- Journaux du serveur. Cherchez des requêtes POST vers des fichiers inhabituels autour de la date du premier fichier modifié.
grep '"POST ' access.log | awk '{print $7}' | sort | uniq -c | sort -rn | head -20
find . -type f -name '*.php' -mtime -14 -printf '%TY-%Tm-%Td %TH:%TM %p\n' | sort
Remplacez access.log par votre propre fichier journal. La première commande liste les chemins qui ont reçu le plus de requêtes POST ; la seconde, les fichiers PHP modifiés au cours des 14 derniers jours. Les horodatages peuvent être falsifiés : traitez-les comme des indices. Si vous ne trouvez pas le point d’entrée, partez du pire : remplacez toutes les extensions et tous les thèmes, et renouvelez tous les identifiants.
Étape 4 : nettoyer à partir de sources fiables
Remplacer plutôt que réparer : des copies neuves issues de la source officielle sont plus sûres que la lecture de code obfusqué.
Le cœur de WordPress. Supprimez wp-admin et wp-includes, puis téléchargez à nouveau la même version, afin que disparaissent aussi les fichiers supplémentaires cachés dans ces dossiers. Lancez ces commandes à la racine de WordPress, c’est-à-dire dans le dossier qui contient wp-load.php et wp-admin :
VER=$(wp core version)
[ -n "$VER" ] && [ -f wp-load.php ] && rm -rf wp-admin wp-includes && \
wp core download --version="$VER" --skip-content --force
wp core verify-checksums --include-root
La deuxième ligne ne supprime rien si aucune version n’a été trouvée ou si vous n’êtes pas à la racine de WordPress. --include-root (WP-CLI 2.8 ou ultérieur) liste en plus les fichiers inconnus du dossier racine.
Extensions et thèmes. Remplacez chaque dossier d’extension et de thème par une copie neuve provenant de WordPress.org ou de l’espace de téléchargement de l’éditeur. Pour les extensions de WordPress.org, wp plugin install <slug> --force écrase la copie installée ; wp plugin verify-checksums --all signale ensuite les fichiers modifiés et ajoutés. Supprimez tout ce que vous n’utilisez pas, et ne réinstallez jamais à partir d’une copie « nulled » (piratée).
Les uploads. Les fichiers téléversés ne se réinstallent pas : il faut donc les inspecter. Recherchez les fichiers PHP avec find wp-content/uploads -type f -iname '*.php', comparez le dossier avec une sauvegarde antérieure à l’infection et retirez tout ce qui n’est pas un média.
Configuration et drop-ins. Vérifiez à la main wp-config.php, .htaccess, .user.ini, wp-content/mu-plugins et les drop-ins comme object-cache.php.
La base de données. Les malwares se logent aussi dans les articles, les options, les utilisateurs et les tâches planifiées :
wp user list --role=administrator --skip-plugins --skip-themes
wp option get siteurl && wp option get home
wp db search '<script' --all-tables
wp cron event list --fields=hook,next_run_relative,recurrence
wp db search trouve aussi des scripts légitimes, comme les extraits de code d’outils de mesure d’audience. Ne supprimez les administrateurs inconnus, les articles de spam et les options injectées qu’après avoir examiné chacun d’eux.
Étape 5 : renouveler tous les identifiants et le salage
Partez du principe que l’attaquant a lu wp-config.php et tous les secrets stockés sur le serveur. Changez :
- tous les comptes WordPress dotés de droits d’administrateur ou d’éditeur, et révoquez les mots de passe d’application que vous ne reconnaissez pas ;
- les accès au panneau de contrôle de l’hébergement, à SFTP/FTP et à SSH, y compris les clés SSH autorisées ;
- le mot de passe de la base de données, chez votre hébergeur et dans
wp-config.phpen même temps ; - les clés d’API stockées dans les extensions : paiement, SMTP, stockage des sauvegardes, CDN ;
- le compte e-mail qui reçoit les réinitialisations de mot de passe des administrateurs.
Remplacez ensuite les clés d’authentification et le salage dans wp-config.php. D’après la documentation développeur de WordPress, les modifier invalide tous les cookies existants : tout le monde doit se reconnecter, y compris un attaquant qui aurait volé une session.
wp config shuffle-salts
Suivi : renforcer, surveiller, documenter
Étape 6 : renforcer le site
- Mettez à jour le cœur, les extensions et les thèmes ; notre guide sur les extensions WordPress vulnérables traite des audits et des mises à jour automatiques.
- Ajoutez
define( 'DISALLOW_FILE_EDIT', true );danswp-config.phppour supprimer les éditeurs de fichiers du tableau de bord.DISALLOW_FILE_MODSva plus loin et bloque aussi les mises à jour depuis le tableau de bord ainsi que les mises à jour automatiques : ne l’utilisez que si vous mettez à jour par un autre moyen. - Activez l’authentification à deux facteurs pour chaque administrateur. Le cœur de WordPress ne l’intègre pas.
- Bloquez l’exécution de PHP dans les uploads. Pour Apache 2.4, dans
wp-content/uploads/.htaccess:
<FilesMatch "\.(?i:php|phtml|phar)$">
Require all denied
</FilesMatch>
Pour nginx, placez cette règle avant votre bloc général location ~ \.php$, car nginx applique le premier bloc location à expression régulière qui correspond :
location ~* ^/wp-content/uploads/.*\.(php|phtml|phar)$ { deny all; }
Lancez nginx -t avant de recharger la configuration, puis vérifiez que les images s’affichent toujours.
Étape 7 : surveiller et demander un réexamen
Surveillez le site de près dans les semaines qui suivent : relancez le contrôle des sommes de contrôle et celui du dossier uploads, comparez les listes de fichiers avec votre état sain et lisez les journaux d’accès. Si l’infection revient, c’est que le point d’entrée est toujours ouvert, et c’est le moment de faire appel à un professionnel.
Security Audit & Compliance de secaudit.eu peut vous épauler dans cette phase : l’extension conserve une référence d’intégrité des fichiers, vérifie les sommes de contrôle du cœur et recherche les administrateurs cachés, les tâches cron suspectes et le spam SEO caché. Elle détecte et signale ; elle ne nettoie pas le site à votre place.
Si Google a signalé le site, ouvrez Problèmes de sécurité dans la Search Console une fois que tout est propre, choisissez Demander un examen et décrivez ce que vous avez corrigé. Selon Google, l’examen prend environ un jour pour le phishing, quelques jours pour un malware et jusqu’à plusieurs semaines pour le spam lié au piratage. Ne demandez votre retrait des listes de blocage de messagerie qu’une fois le spam stoppé.
Étape 8 : évaluer la violation au regard du RGPD et la documenter
Cette étape arrive en dernier dans la liste, mais son délai court dès le premier jour. Si des données clients, des comptes utilisateurs, des messages de formulaire ou des commandes ont été exposés, modifiés ou rendus indisponibles, le piratage constitue généralement une violation de données à caractère personnel. Vous devez alors la notifier à votre autorité de contrôle (en France, la CNIL) dans les meilleurs délais et, si possible, 72 heures au plus tard après en avoir pris connaissance, à moins qu’elle ne soit pas susceptible d’engendrer un risque (art. 33 du RGPD). Si le risque pour les personnes est élevé, vous devez aussi les en informer (art. 34).
Quelle que soit votre décision, documentez les faits, leurs effets et les mesures prises pour y remédier : l’article 33, paragraphe 5, l’exige pour chaque violation, même celles que vous ne notifiez pas. Notre guide sur la notification sous 72 heures détaille cette évaluation. Si votre organisation relève de la directive NIS 2, les incidents importants exigent en outre une alerte précoce dans les 24 heures ; vérifiez la loi nationale qui transpose NIS 2 dans votre pays.
FAQ
Une extension de sécurité peut-elle supprimer le malware à ma place ?
Certains outils proposent un nettoyage automatique des malwares connus. Aucun ne peut vous dire avec certitude comment l’attaquant est entré ni quels mots de passe il a récupérés : les étapes 3, 5 et 6 restent donc de votre ressort.
Réinstaller le cœur de WordPress efface-t-il mon contenu ?
Non. Les articles, les pages et les réglages sont stockés dans la base de données, et avec --skip-content vos extensions, thèmes et uploads ne sont pas touchés. Seuls les fichiers du cœur situés dans wp-admin, wp-includes et le dossier racine sont remplacés ; wp-config.php est conservé.
Cet article est une information générale et ne constitue pas un conseil juridique.
Vérifiez votre propre site
Security Audit & Compliance est l’extension WordPress de secaudit.eu : elle recherche les logiciels malveillants, le spam caché, les fichiers du cœur modifiés et le code vulnérable, et rattache ses constats à l’article 32 du RGPD, à l’article 21 de NIS2 et à l’OWASP Top 10.
Voir ce que vérifie l’extension