[WordPress] Nettoyage après un piratage

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é.

#ÉtapeObjectif
1Reconnaître la compromissionConfirmer qu'il s'agit bien d'un piratage
2Préserver l'état actuelSauvegarder les preuves, mettre le site hors ligne
3Constater l'étendueSavoir ce qui a été modifié
4NettoyerRestaurer les fichiers, purger la base
5Reprendre les accèsCouper l'attaquant du site
6Mettre à jourFermer la faille d'entrée
7RenforcerÉ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

  1. 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.
  2. Ne lancez aucune mise à jour pour l'instant — voir l'avertissement ci-dessus.
  3. 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 :

EmplacementPourquoi 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).