Mon WordPress s’est fait compromettre. Voilà ce que j’ai fait.

C’est arrivé un soir. Enfin, je l’ai découvert le lendemain.

Le site chargeait bizarrement. Une redirection vers un truc louche sur mobile. Sur desktop, rien. Comme si le problème voulait rester discret.

J’ai d’abord cru à un bug de cache. On se raconte toujours ça au début.

C’était quoi exactement

Un plugin. Pas un plugin obscur téléchargé sur un forum douteux. Un plugin relativement connu, pas mis à jour depuis quelques mois. Quelqu’un y avait glissé une backdoor. Du code obfusqué planqué dans un fichier que personne ne lit jamais.

Le genre de truc qui traîne silencieusement. Qui attend.

La backdoor permettait d’injecter du contenu. Des redirections sur mobile vers des sites de phishing. Le SEO poisoning fonctionne exactement sur ce principe : discret, efficace, et les moteurs de recherche adorent pénaliser ça.

Première réaction : ne rien toucher

Instinct de base : supprimer le plugin, vider le cache, reprendre sa vie.

Mauvaise idée.

Si la backdoor a eu le temps de tourner, elle a peut-être créé d’autres points d’entrée. D’autres fichiers modifiés. Un compte admin fantôme. Supprimer le plugin visible ne règle pas ce que tu ne vois pas encore.

J’ai demandé à Claude une todo en temps réel

Pas eu le réflexe d’aller sur un forum. J’ai ouvert Claude et posé la question directement : mon WordPress a un plugin compromis avec injection de code, par quoi je commence.

La liste qu’il m’a sortie était propre. Dans l’ordre :

  • Passer le site en mode maintenance immédiatement
  • Ne rien supprimer avant d’avoir analysé
  • Scanner avec Wordfence (scan complet, pas le scan rapide)
  • Vérifier les fichiers modifiés récemment (date de modification anormale)
  • Chercher les patterns suspects : eval(base64_decode(...)), base64, gzinflate
  • Vérifier tous les comptes utilisateurs WordPress (admin fantôme ?)
  • Vérifier les fichiers core WordPress
  • Vérifier functions.php et fichiers de thème
  • Scanner la base de données (liens externes injectés dans options, contenus, widgets)
  • Réinstaller WordPress core proprement
  • Supprimer les plugins non maintenus ou suspects
  • Changer tous les mots de passe (WP, FTP, BDD, hébergeur)
  • Régénérer les salts WordPress dans wp-config.php via api.wordpress.org/secret-key — déconnecte toutes les sessions actives
  • Activer le 2FA sur le compte admin
  • Vérifier Google Search Console (pénalité manuelle ? URLs infectées indexées ?)
  • Restaurer depuis une sauvegarde propre si l’étendue est trop large

J’ai suivi cet ordre. Ça m’a évité de faire des bêtises.

Ce que le scan a trouvé

Le rapport Wordfence sort une liste de fichiers modifiés et de fichiers suspects. eval(base64_decode(...)) c’est le signe classique. Si tu vois ça dans un fichier WordPress, c’est pas bon.

Il y avait aussi un compte admin que je n’avais pas créé. Mot de passe fort, email externe. Discret.

Supprimé.

Le nettoyage

Fichier par fichier pour les zones suspectes. Core WordPress réinstallé proprement. Plugins vérifiés un par un.

Le thème aussi. Même s’il n’était pas la source initiale, j’ai vérifié functions.php et les fichiers de template. C’est là que les injections aiment se planquer.

La base de données ensuite. Recherche de liens externes injectés dans les contenus, les options WordPress, les widgets. Souvent oublié.

Les salts régénérés dans wp-config.php. Toutes les sessions coupées d’un coup. Ça fait bizarre la première fois mais c’est exactement l’effet recherché.

Ce que j’aurais dû avoir en place avant

Sauvegardes automatiques quotidiennes hors-serveur. J’en avais, mais pas assez récentes. J’ai perdu quelques jours de config.

Surveillance des fichiers modifiés. Wordfence le fait en continu si tu l’actives correctement. Ça aurait détecté la modification bien plus tôt.

Un plugin de moins. Chaque plugin non maintenu est une porte entrouverte. J’en ai désinstallé plusieurs après ça. Pas parce qu’ils étaient compromis, parce qu’ils étaient inutiles.

Après le nettoyage

Vérification dans Google Search Console. Pas de pénalité manuelle déclarée. Mais les redirections mobiles avaient commencé à être indexées. Nettoyage des URLs via l’outil de suppression GSC.

Ce que ça m’a appris

Un plugin pas à jour c’est une porte entrouverte. Pas forcément enfoncée demain, mais entrouverte.

Le problème avec WordPress c’est qu’on l’installe, on ajoute des trucs, et on oublie de faire le ménage. Pendant ce temps les failles s’accumulent.

Je gère mes sites différemment maintenant. Moins de plugins. Mises à jour hebdomadaires. Sauvegardes hors-serveur automatiques.

Et Wordfence en surveillance active, pas juste installé et oublié dans la liste des extensions.