Plugin WordPress vulnérable : la porte d'entrée n°1
Formulaire, constructeur, galerie, SEO : une extension installée puis oubliée. C'est la porte n°1. Désactiver après l'attaque ne retire pas le code déjà déposé dans uploads ou en mu-plugin.
Formulaire, constructeur, galerie, SEO : une extension installée puis oubliée. Désactiver après l'attaque ne retire pas le code déjà déposé ailleurs.
Pourquoi les bots connaissent votre plugin
Les CVE et les changelogs wp.org sont publics. Des scanners testent des millions de sites dès qu'un PoC sort. Votre Contact Form, votre Revolution Slider de 2018, votre plugin de statistiques : ils n'ont pas besoin de vous connaître.
WordPress n'est pas « fragile » : il est visible. La porte est l'extension non mise à jour, ou celle hors dépôt jamais patchée. Le cœur à jour avec un plugin à la traîne, c'est le cas le plus banal. Guide.
Listez chaque extension avec sa date de dernière mise à jour wp.org et son dossier encore présent même désactivé. Les bots frappent les chemins disque, pas la case « activé ». Un `upload.php` orphelin dans un vieux plugin reste joignable. Les must-use n'apparaissent pas dans l'écran extensions : ouvrez `wp-content/mu-plugins/`. Cet inventaire de vingt minutes oriente plus qu'un énième scan.
Installé, désactivé, encore sur le disque
Désactiver retire les hooks. Le dossier `wp-content/plugins/ancien-truc/` reste appelable si un fichier PHP est directement joignable (pas d'ABSPATH, un `upload.php` orphelin). Les bots frappent ces chemins. Désinstallez, ou au minimum retirez le dossier après copie.
Les must-use ne se « désactivent » pas dans l'écran extensions. Allez dans `mu-plugins`.
Add-ons et « extensions de l'extension »
Elementor est à jour, l'add-on de 2019 non. CF7 est à jour, l'add-on d'upload de fichiers non. WooCommerce officiel, le module de paiement « pas cher » non. Cherchez la longue traîne, pas le logo du plugin star. Elementor, CF7, Woo.
Ce que la faille a laissé derrière
Un RCE ou un upload : `uploads/2024/xx/x.php`, parfois `.php.jpg`. Un admin créé. Un cron. Un mu-plugin. Un include dans `wp-config`. Fermer le plugin sans cette chasse, c'est refermer la porte d'entrée et laisser les clés sous le paillasson. Backdoor.
Un File Manager exposé : partez du principe que des fichiers ont été déposés, même si vous « n'avez rien vu ». File Manager.
Un RCE ou un upload : `uploads/2024/xx/x.php`, parfois `.php.jpg`. Un admin créé. Un cron. Un mu-plugin. Un include wp-config. Fermer le plugin sans cette chasse, c'est refermer la porte et laisser les clés sous le paillasson. Backdoor PHP.
- PHP dans uploads, doubles extensions.
- Fichier dans mu-plugins.
- User administrateur daté.
- Ligne include dans wp-config.
Identifier le coupable sans certitude magique
Dates : access.log sur `wp-admin/admin-ajax.php`, `wp-json/`, un endpoint du plugin. CVE récente + plugin présent + date de fichiers = hypothèse forte, rarement une preuve juridique. Suffisant pour prioriser.
Wordfence donne parfois le fichier « first seen ». Ce n'est pas toujours l'entrée, c'est le symptôme. Wordfence limites.
Dates access.log sur admin-ajax, wp-json, un endpoint du plugin. CVE récente + plugin présent + date de fichiers = hypothèse forte. Wordfence « first seen » est souvent le symptôme, pas l'entrée.
Remplacer n'est pas nettoyer
Installer la version à jour du plugin, ou un concurrent, après l'incident : utile pour la suite. Ça n'efface pas `radio.php`. Ordre : copie, chasse, puis remplacement / MAJ. Supprimer malware.
Installer la version à jour ou un concurrent après l'incident : utile pour la suite. Ça n'efface pas `radio.php`. Ordre : copie, chasse, puis remplacement. Supprimer malware.
Moins de surface après
Une extension = une raison. Pas trois sliders. Pas de File Manager permanent. Pas de phpMyAdmin plugin. Mises à jour auto pour les petits plugins de confiance, revue humaine pour Woo / Elementor / paiement.
PHP supporté, WP à jour une fois le site propre. PHP obsolète.
Cas fréquents : forms, builders, file tools
Formulaires avec upload : coupez l'upload si vous n'en avez pas besoin. Builders : add-ons. Outils fichiers : usage puis désinstallation le jour même. Duplicator : `installer.php` dehors. Duplicator.
Page cas WordPress piraté. Aide : créer un espace.
Moins de surface ensuite : une extension = une raison, pas de File Manager permanent, PHP supporté, WP à jour une fois le site propre. Page cas WordPress piraté. Aide : créer un espace.
WAF, mises à jour auto, et ce qu'on ne garde pas
Un WAF (Wordfence, hébergeur) peut virtual-patcher quelques jours. Ce n'est pas une raison de garder l'extension abandonnée « encore un mois ». Les bots n'attendent pas votre devis. Mises à jour auto pour les petits plugins de confiance ; revue humaine pour Woo, Elementor, paiement.
Moins de surface : pas trois sliders, pas de phpMyAdmin plugin, pas de File Manager permanent. Un plugin « nulled » même à jour : le canal d'install est la porte. Thème nulled.
Si le plugin a exposé des uploads d'identité ou des commandes, le constat décide d'une information clients. Pas automatique pour un défacement. Créer un espace.
Le lendemain d'une CVE publique
Le jour où WPScan publie, les bots tournent déjà. Mettez à jour ou retirez le dossier, même désactivé. Puis dates de fichiers : si quelque chose a été touché avant votre MAJ, la porte a servi. Chasse uploads / mu-plugins / users, pas seulement le changelog.
Wordfence Premium n'aurait pas forcément empêché un mot de passe panel. Ce n'est pas un substitut. Inventaire trimestriel des extensions abandonnées. Par où commencer. Créer un espace.