Si votre site WordPress héberge des fichiers malveillants, redirige vos visiteurs ou envoie du spam, il a probablement été compromis. Cet article décrit la marche à suivre, dans l'ordre, en ligne de commande avec WP-CLI via votre accès SSH.
L'ordre des étapes compte
Mettre à jour WordPress avant d'avoir constaté les dégâts efface les traces de l'intrusion sans supprimer la porte dérobée. Suivez les étapes dans l'ordre indiqué.
| # | Étape | Objectif |
|---|
| 1 | Reconnaître la compromission | Confirmer qu'il s'agit bien d'un piratage |
| 2 | Préserver l'état actuel | Sauvegarder les preuves, mettre le site hors ligne |
| 3 | Constater l'étendue | Savoir ce qui a été modifié |
| 4 | Nettoyer | Restaurer les fichiers, purger la base |
| 5 | Reprendre les accès | Couper l'attaquant du site |
| 6 | Mettre à jour | Fermer la faille d'entrée |
| 7 | Renforcer | Éviter la récidive |
1. Reconnaître une compromission
- Redirections inattendues, pages injectées, ou contenu qui n'apparaît que pour les visiteurs venant d'un moteur de recherche
- Pics de trafic sur des URL que vous ne connaissez pas
- Fichiers malveillants signalés par votre hébergeur ou par votre navigateur
- Comptes administrateurs que vous n'avez pas créés
- Envoi de spam depuis le domaine, ou domaine placé sur une liste noire
2. Avant toute chose : préserver l'état actuel
- Sauvegardez le site tel qu'il est, fichiers et base de données, même infecté. C'est votre seule copie des preuves, et votre filet si le nettoyage casse quelque chose.
- Ne lancez aucune mise à jour pour l'instant — voir l'avertissement ci-dessus.
- Rendez le site indisponible le temps de l'intervention, pour ne plus servir de contenu malveillant à vos visiteurs.
wp maintenance-mode activate
3. Constater l'étendue des dégâts
Connectez-vous en SSH sur votre compte, puis placez-vous dans le répertoire du site.
Fichiers du cœur de WordPress
wp core verify-checksums
Compare votre installation aux fichiers officiels. Tout fichier modifié, ajouté ou manquant est signalé.
Extensions
wp plugin verify-checksums --all
Portée limitée. Cette vérification s'appuie sur les sommes de contrôle publiées par WordPress.org. Les extensions premium, sur mesure ou installées manuellement ne peuvent pas être vérifiées ainsi : contrôlez-les à la main ou réinstallez-les depuis leur source d'origine. Les thèmes ne disposent d'aucune vérification équivalente.
Fichiers PHP là où il ne devrait pas y en avoir
Le dossier uploads ne doit contenir que des médias. Un fichier PHP qui s'y trouve est un signal fort :
find wp-content/uploads -type f -name "*.php"
Repérez aussi les fichiers modifiés récemment, en gardant à l'esprit qu'une intrusion peut être ancienne :
find . -type f -name "*.php" -mtime -30
Emplacements de persistance classiques
Une porte dérobée survit souvent à un nettoyage superficiel en se cachant ici :
| Emplacement | Pourquoi c'est un point sensible |
|---|
wp-content/mu-plugins/ | Extensions chargées automatiquement, invisibles dans la liste des extensions |
wp-content/object-cache.php
advanced-cache.php
db.php | Fichiers « drop-in », chargés très tôt par WordPress |
wp-config.php
.htaccess | Code ou règles de redirection ajoutés en fin de fichier |
Comptes et tâches planifiées
wp user list --role=administrator
wp cron event list
Un compte administrateur inconnu, ou une tâche planifiée dont le nom ne correspond à aucune extension installée, sont des indices sérieux.
4. Nettoyer
Restaurer le cœur de WordPress
wp core download --force
N'utilisez pas wp core update pour cela
Si votre site est déjà dans la dernière version, wp core update considère qu'il n'y a rien à faire et laisse en place les fichiers modifiés par l'attaquant. Seul wp core download --force réécrit les fichiers existants dans tous les cas. Cette commande ne touche ni à wp-content, ni à wp-config.php, ni à votre base de données.
Extensions et thèmes
- Supprimez tout ce qui n'est pas utilisé — un thème ou une extension inactive reste exécutable
- Réinstallez depuis la source officielle les éléments signalés comme modifiés
- Supprimez toute extension qui n'est plus maintenue par son auteur
Base de données
Recherchez les injections les plus courantes :
wp db search "<script" --all-tables
wp db search "base64_decode" --all-tables
À ne pas confondre. wp db check et wp db repair vérifient l'intégrité technique des tables MySQL. Ils ne détectent ni ne suppriment aucun contenu malveillant et n'ont pas leur place dans un nettoyage de piratage.
5. Reprendre le contrôle des accès
Tant que cette étape n'est pas faite, l'attaquant peut revenir avec les identifiants ou la session qu'il possède déjà.
wp user delete <ID> --reassign=<ID_d_un_compte_légitime>
wp user reset-password <utilisateur> --show-password
Puis invalidez toutes les sessions ouvertes en régénérant les clés de sécurité — l'étape la plus souvent oubliée :
wp config shuffle-salts
Tous les utilisateurs, attaquant compris, sont immédiatement déconnectés.
N'oubliez pas les accès hors WordPress : mot de passe du compte d'hébergement, accès FTP/SFTP et SSH, et utilisateur de la base de données (à répercuter dans wp-config.php).
6. Mettre à jour — maintenant seulement
Le constat est fait et les accès sont repris : les mises à jour peuvent être appliquées.
wp core update
wp plugin update --all
wp theme update --all
7. Réduire le risque de récidive
wp config set DISALLOW_FILE_EDIT true --raw
wp config set FORCE_SSL_ADMIN true --raw
La première commande désactive l'éditeur de fichiers de l'administration, qui permet à un compte compromis de modifier du code sans accès au serveur. La seconde force l'administration en HTTPS.
Complétez avec :
- l'authentification à deux facteurs sur les comptes administrateurs
- la limitation des tentatives de connexion
- une extension de sécurité reconnue, ou un pare-feu applicatif (WAF)
- des mises à jour régulières — la grande majorité des compromissions exploitent une faille corrigée depuis des mois
Puis remettez le site en ligne :
wp maintenance-mode deactivate
Quand se faire aider
Un nettoyage réussi ne laisse aucun fichier modifié à la seconde vérification. Si wp core verify-checksums continue de signaler des fichiers, si les injections réapparaissent, ou si vous n'êtes pas à l'aise avec ces manipulations, ne laissez pas le site en production : ouvrez un ticket auprès de notre support en précisant ce que vous avez déjà tenté.
Voir aussi : Outil pour la gestion de votre site WordPress via votre accès SSH (wp-cli).