
1. Mises à jour automatiques du cœur, assumées
Les versions mineures du cœur portent les correctifs de sécurité, et elles sont conçues pour s’appliquer les yeux fermés. WordPress.org a poussé des mises à jour forcées pour wp2shell — mais uniquement vers les sites où les mises à jour auto étaient actives et les fichiers du cœur inscriptibles.2. Différer les mises à jour d’extensions, ne pas les désactiver
C’est le point contre-intuitif de la liste, et l’incident ARVE en est l’argument. Les portes dérobées dans les extensions sont détectées vite — celle-ci en moins de deux heures — mais elles le sont après publication. Appliquer chaque mise à jour d’extension à la minute où elle sort vous place en première ligne pour recevoir une version compromise. Ne jamais les appliquer vous laisse exposé aux vulnérabilités ordinaires, bien plus fréquentes. Le juste milieu : des mises à jour automatiques pour les extensions, volontairement décalées de quelques jours, avec les publications de sécurité exemptées du délai. Quel que soit l’outil avec lequel vous gérez vos sites à l’échelle, c’est le réglage à chercher. Si vous gérez quelques sites à la main, la même logique s’applique sans machinerie : vérifiez les mises à jour chaque semaine, appliquez immédiatement celles de sécurité et le reste à votre prochain passage.3. Moins d’extensions
Chaque extension est une autorisation permanente d’exécuter du code accordée à un tiers, renouvelée à chaque mise à jour. Le contrôle le plus efficace reste une liste plus courte.4. Moindre privilège sur les comptes
La chaîne wp2shell se termine par la création d’un administrateur. Beaucoup d’attaques se terminent en utilisant un administrateur qui traînait déjà. La plupart des gens qui se connectent à un site WordPress n’ont pas besoin d’installer des extensions. Le rôle Éditeur suffit pour publier. Administrateur devrait être détenu par une ou deux personnes, pas être le rôle par défaut de tous ceux qui ont un accès.5. Couper l’exécution de code dans les uploads
Un webshell doit atterrir quelque part, etwp-content/uploads est l’endroit habituel. Ce répertoire contient des images et des PDF. Il n’a aucune raison d’exécuter du PHP.
Pour nginx :
.htaccess à la racine de wp-content/uploads :
6. Désactiver l’éditeur de fichiers du tableau de bord
L’éditeur d’extensions et de thèmes intégré permet à quiconque a les droits administrateur d’écrire du PHP directement sur le disque. C’est un confort qui ne vaut presque rien et un chemin d’escalade qui vaut beaucoup.DISALLOW_FILE_MODS bloque aussi l’installation et la mise à jour d’extensions et de thèmes depuis le tableau de bord — adapté aux sites déployés depuis un dépôt, gênant pour les sites gérés à la main. Notez qu’elle désactive également les mises à jour automatiques d’extensions : à réserver aux cas où la chaîne de déploiement s’en charge.
7. Des sauvegardes que vous avez restaurées au moins une fois
Toutes les réponses à incident ci-dessus se terminent pareil : restaurer une sauvegarde antérieure à la compromission. Cette étape ne fonctionne que si la sauvegarde existe, remonte assez loin, et se restaure réellement. Trois propriétés comptent, et seule la première est habituellement contrôlée :- La sauvegarde tourne. Facile à vérifier, et c’est là que la plupart des gens s’arrêtent.
- La rétention survit à la détection. Une compromission découverte en septembre exige une sauvegarde d’août. Sept jours de rétention, ce n’est pas une sauvegarde de sécurité, c’est un bouton d’annulation.
- La restauration a été testée. Restaurez une fois sur un site de préproduction. C’est le seul moyen d’apprendre que le dump de la base était tronqué avant d’en avoir besoin.
Un contrôle de cinq minutes, tout de suite
Si vous ne faites rien d’autre après cette lecture, lancez ces quatre commandes :Rien de tout cela ne rend un site inviolable. Cela raccourcit la liste de ce qui le casse, et rend ce qui passe quand même plus facile à repérer et moins coûteux à réparer. C’est précisément ce qu’est le durcissement.

