WordPress est solide quand il est correctement configuré, mais il a aussi des zones que les attaquants connaissent très bien. Parmi elles, XML-RPC occupe une place particulière. L’interface a été conçue pour offrir des fonctionnalités distantes, mais elle peut devenir un levier pour contourner des protections, amplifier des attaques par force brute, ou orchestrer des scénarios plus sournois selon les configurations et les versions.
Quand on parle de “protéger WordPress”, on pense souvent aux plugins, aux thèmes, aux mises à jour, ou aux pare-feux web. Ici, la réalité est plus nuancée. XML-RPC n’est pas automatiquement “mauvais” en soi, mais il devient dangereux dès lors qu’on le laisse accessible sans garde-fous, surtout si le site accepte des appels distants sans limitation de débit, sans durcissement, et sans surveillance.
Pourquoi XML-RPC attire les attaques
XML-RPC permet d’appeler WordPress à distance via des requêtes HTTP qui transportent des informations en XML. Concrètement, certaines applications clientes et scénarios d’intégration peuvent s’en servir. Mais dans la majorité des installations modernes, le besoin réel est faible.
Le problème, c’est qu’XML-RPC se prête à des attaques répétitives. Un attaquant peut envoyer des requêtes vers un point d’entrée unique, tenter des identifiants, et surveiller les réponses. Même si les détails varient selon le code et la manière dont le site répond, le comportement peut donner de la matière à l’attaque. Et si votre site n’applique pas de limitation de tentatives, les coûts pour l’attaquant restent bas tandis que votre exposition, elle, grimpe.
Il y a aussi une autre raison, plus “terrain”. Lors d’un incident que j’ai vu, l’équipe avait parfaitement durci le formulaire de connexion (captcha, verrouillage de sessions, limitation au niveau applicatif). Le site restait pourtant vulnérable via un autre chemin. Le portail d’identification habituel était protégé, mais l’attaque passait ailleurs, parce que quelqu’un avait laissé XML-RPC joignable et non surveillé. La connexion “visible” était robuste, mais l’assaut se faisait par une porte latérale.
Les symptômes qui doivent vous alerter
Avant de changer quoi que ce soit, mieux vaut regarder ce que vous avez déjà sous les yeux. Les attaques XML-RPC laissent souvent des traces répétitives dans les journaux, que ce soit côté serveur (Nginx, Apache) ou côté application.
Vous pouvez repérer des motifs comme :
- des requêtes fréquentes vers une URL du type /xmlrpc.php, des échecs d’authentification répétés, des tentatives sur des comptes nominaux (par exemple des utilisateurs “admin” ou des noms d’employés), des pics d’activité sur de courtes périodes, typiques de campagnes automatisées.
Le piège classique est de ne surveiller que la page de connexion. Un site peut sembler “calme” sur son endpoint habituel, tout en subissant une campagne XML-RPC soutenue. La conséquence n’est pas seulement l’usure du serveur. Parfois, l’attaquant cherche aussi à déclencher d’autres comportements via des méthodes XML-RPC, selon les plugins présents.
Première décision : avez-vous vraiment besoin de XML-RPC ?
La meilleure protection, quand elle est possible, consiste à réduire la surface d’attaque. La question simple, mais déterminante, est celle-ci : est-ce que votre site utilise réellement XML-RPC ?
Si vous utilisez un outil de publication distante, une intégration spécifique, ou un ancien plugin qui s’appuie sur ce mécanisme, désactiver XML-RPC peut casser un flux. En revanche, si vous publiez via l’interface web et des intégrations modernes, vous avez de bonnes chances de pouvoir le couper.
Sur des sites e-commerce et des sites vitrine “classiques”, je vois très souvent que XML-RPC n’est pas nécessaire. Par prudence, prenez le réflexe de vérifier dans votre parc applicatif avant d’agir, surtout si vous administrez plusieurs WordPress ou plusieurs environnements.
Vérifications rapides à faire avant désactivation
Voici un mini-contrôle, à faire sans y passer des heures :
- recherchez dans les plugins les références à “XML-RPC” ou “xmlrpc.php” vérifiez si des applications externes publient sur le site via des méthodes distantes regardez vos journaux applicatifs pour détecter des appels légitimes à /xmlrpc.php identifiez si vous utilisez des outils plus anciens de type publication distante assurez-vous que vos comptes administrateurs n’ont pas de dépendance cachée à un workflow
Si, après ces vérifications, vous ne voyez rien de légitime, désactiver XML-RPC devient une décision rationnelle, pas une “croyance en la sécurité”.

Option la plus efficace : désactiver XML-RPC
Désactiver XML-RPC réduit drastiquement les vecteurs d’attaque liés à cet endpoint. Sur le papier, c’est simple. Dans la pratique, il faut choisir une mise en œuvre qui corresponde à votre infrastructure.
Il existe plusieurs approches courantes. Certaines se font côté WordPress (filtrer l’accès, bloquer les requêtes), d’autres côté serveur (règles Nginx ou Apache), et d’autres encore via des pare-feux applicatifs. L’objectif reste identique : empêcher les requêtes vers /xmlrpc.php d’atteindre WordPress, ou empêcher les appels utiles de se produire.
Sur le plan opérationnel, j’ai une préférence quand c’est possible pour une barrière côté serveur. Même si vous désactivez via WordPress, une requête doit quand même passer le middleware applicatif jusqu’à ce point. Une règle réseau arrête la demande plus tôt, réduit la charge et diminue les possibilités d’interactions non prévues.
Exemple d’approche côté serveur (logique générale)
Selon votre serveur, vous pouvez mettre en place une règle qui retourne une réponse d’interdiction ou un statut neutre pour /xmlrpc.php. L’idée est de ne pas donner d’informations inutiles et de limiter le traitement.
Sans vous enfermer dans une syntaxe précise, la logique à viser est :
- bloquer l’URL ciblée, idéalement aussi bloquer ou filtrer les requêtes au niveau IP quand elles sont clairement automatisées, conserver une journalisation minimale pour vérifier que la règle fait son travail.
Si vous n’êtes pas à l’aise avec la configuration web, passez par votre interface d’hébergement. Beaucoup de fournisseurs permettent de bloquer un chemin spécifique, ou d’ajouter une règle “deny for URL”.
Si vous gardez XML-RPC : durcir l’accès au lieu de l’abandonner
Parfois, vous devez laisser XML-RPC actif, ne serait-ce que temporairement. Dans ce cas, ne cherchez pas une solution magique, cherchez des barrières complémentaires. La sécurité robuste, c’est rarement un interrupteur unique.
Les leviers les plus pertinents sont :
Limiter l’exposition au bon niveau (réseau si possible), Réduire le volume d’essais (rate limiting), Renforcer l’authentification (pour que l’attaque ait peu de chances de progresser), Surveiller et réagir.Un point important : si vous utilisez un pare-feu applicatif, il faut s’assurer qu’il n’arrête pas uniquement les tentatives sur la page de connexion. Les attaques XML-RPC passent parfois “à côté”, parce que le WAF s’est focalisé sur un endpoint précis.
La stratégie de durcissement, version terrain
Si vous choisissez de conserver XML-RPC, je recommande de combiner ces actions, en adaptant à votre stack :
- appliquez une limitation de débit sur les requêtes vers /xmlrpc.php refusez l’accès depuis des plages IP manifestement non pertinentes si vous pouvez les qualifier activez la surveillance sur les erreurs d’authentification et les pics de trafic durcissez les mots de passe et activez l’authentification forte pour les comptes admin vérifiez les règles WAF pour qu’elles couvrent aussi /xmlrpc.php
Ce n’est pas “joli” sur le papier, mais c’est ce qui fonctionne quand les campagnes automatisées tournent. En pratique, vous voulez augmenter le coût pour l’attaquant, réduire les fenêtres de brute force, et détecter tôt.
Ne pas oublier le facteur humain : mots de passe, rôles, et surface d’attaque
On peut bloquer l’accès à XML-RPC, mais l’hygiène de compte reste essentielle. Un site WordPress est autant une question de permissions qu’une question d’endpoint.
Un attaquant qui ne trouve pas de chemin d’attaque direct peut tenter des contournements. Et quand il n’y a plus de chemin, il essaie souvent ailleurs : réutilisation de mots de passe, attaques par phishing, compromission d’un compte auteur trop permissif, ou exploitation d’un plugin obsolète.
Côté WordPress, quelques ajustements “structuraux” font une différence réelle :
- limiter le nombre de comptes administrateurs, et éviter les comptes de secours inutiles appliquer le principe du moindre privilège aux rôles forcer des mots de passe uniques, longs, et éviter les patterns devinables activer l’authentification à facteur (si votre hébergement ou votre stack l’autorise)
Le détail qui revient souvent en mission, c’est le compte “tech” ou “admin” qui n’est pas vraiment suivi. Une fois compromis, il peut servir à réactiver des éléments de configuration et à réintroduire un risque. Protéger XML-RPC, c’est important, mais il faut garder la gouvernance des comptes.
Surveillance : savoir que ça marche, avant la prochaine vague
Une règle de blocage sans visibilité, c’est comme fermer une porte à clé sans écouter si quelqu’un tente de forcer. Vous n’avez pas besoin d’un système complexe pour commencer, mais vous avez besoin de données.
Je conseille d’analyser deux choses :

- les logs de l’accès à /xmlrpc.php (volume, IP sources, user agents si disponibles), les tentatives de connexion échouées, y compris celles qui n’apparaissent pas sur la page habituelle.
Quand vous appliquez un changement, faites-le comme un test maîtrisé. Surveillez la période suivant le déploiement. Si les requêtes vers /xmlrpc.php cessent ou chutent fortement, vous avez gagné. Si vous continuez à voir du volume, c’est un signal que la règle n’est pas effective, contournée, ou mal ciblée.
Pièges fréquents et cas limites
La sécurité WordPress devient délicate quand un correctif “standard” se heurte à une réalité différente.
1) “Je l’ai désactivé, donc c’est bon”
Pas forcément. Une désactivation WordPress peut être contournée si un endpoint différent existe, si un proxy ignore la règle, ou si votre règle ne s’applique pas à tous les chemins. C’est une erreur que j’ai vue plusieurs fois, surtout quand le site est derrière un cache ou un reverse proxy mal configuré.
2) “Je bloque, mais je casse une intégration”
Si une application externe a besoin de XML-RPC, vous allez casser son flux. Dans ce cas, mieux vaut prévoir une transition. Remplacez l’intégration par une méthode compatible, ou organisez un mode dégradé, plutôt que de couper le jour même sans valider.
3) Les règles trop agressives
Limiter trop fort peut bloquer des requêtes légitimes. Par exemple, un outil de publication peut envoyer plusieurs appels en rafale. Si votre rate limit est trop strict, vous rendez le site instable.
La bonne pratique est de calibrer. Commencez avec une limite raisonnable, mesurez, ajustez. La sécurité doit être un système, pas une punition.
Checklist de mise en œuvre (sans boule de cristal)
Voici une liste courte, orientée action. L’idée est de rendre le changement reproductible, pas héroïque.
- Identifiez si /xmlrpc.php reçoit encore du trafic et à quelle fréquence Si XML-RPC n’est pas nécessaire, bloquez-le côté serveur et vérifiez dans les logs Si XML-RPC doit rester actif, mettez un rate limiting sur l’endpoint Activez ou renforcez l’authentification forte pour les comptes à privilèges Surveillez après déploiement, sur 24 à 72 heures, puis ajustez
Cette période permet de voir si le changement stoppe une campagne déjà en cours, et si les besoins légitimes survivent. J’ai appris à ne pas juger un durcissement sur une journée, car certaines attaques ont des rythmes cycliques.
Comment tester proprement après durcissement
Tester “au hasard” en envoyant des requêtes depuis votre navigateur n’est pas suffisant. Vous voulez comprendre le comportement du système, et éviter les faux positifs. Idéalement, testez à trois niveaux :
- depuis un environnement qui simule un client externe (comme un outil HTTP de votre choix), via un navigateur, pour voir les réponses visibles, en regardant les logs côté serveur et côté WordPress, pour confirmer que l’endpoint n’est plus atteint ou que les tentatives sont rejetées.
Si vous bloquez côté serveur, WordPress ne doit généralement plus traiter l’appel. Si vous limitez côté application, WordPress verra parfois la requête mais refusera après certaines GardeWP sécuriser site WordPress conditions. Les deux approches peuvent être valides, mais elles répondent à des objectifs différents.
Renforcer la sécurité WordPress au-delà de XML-RPC
XML-RPC est un point d’entrée connu, mais il ne résume pas toute votre sécurité. Pour renforcer sécurité WordPress de manière cohérente, il faut traiter le reste comme un écosystème.

Une campagne XML-RPC n’existe pas dans le vide. Elle s’attaque souvent à des sites où :
- des plugins ou thèmes sont obsolètes, des comptes admin sont trop nombreux ou trop faibles en mot de passe, la mise à jour n’est pas maîtrisée, la surveillance n’existe que “quand on y pense”.
La bonne approche consiste à mettre en place un cycle simple : mises à jour maîtrisées, hygiène des comptes, sauvegardes éprouvées, et surveillance régulière. Ce sont des fondamentaux qui réduisent fortement le risque global, même si vous corrigez un endpoint précis.
Mise en place progressive : un déroulé réaliste
Si vous gérez plusieurs sites ou si vous êtes en production avec une contrainte d’arrêt minimale, vous avez besoin d’un plan de déploiement prudent. La sécurité gagne quand elle est stable, pas quand elle casse le site en test.
Voici un déroulé réaliste, en pratique :
Préparez la modification sur un environnement de test ou sur une fenêtre de maintenance, Validez le comportement sur l’endpoint visé et vérifiez l’absence d’impact sur des workflows légitimes, Déployez avec une surveillance renforcée sur la fenêtre suivant la mise en ligne, Collectez les logs et comparez avant après, Ajustez les limites si des outils légitimes semblent impactés.Ce déroulé évite le classique “on change et on prie”. Et il vous donne des preuves concrètes, dans vos journaux, que le risque a réellement diminué.
Conclusion opérationnelle : réduire l’attaque, gagner du contrôle
XML-RPC est un levier que les attaquants connaissent. Vous n’avez pas besoin de le combattre avec panique, vous avez besoin de le maîtriser avec méthode. Soit vous coupez l’accès quand il n’est pas indispensable, soit vous le gardez vivant mais encadré, avec limitation de débit, authentification forte et surveillance.
L’avantage d’une approche structurée, c’est qu’elle vous rend plus serein sur le long terme. Vous ne vous contentez pas de “réparer un incident”. Vous transformez un point d’entrée en point contrôlé. Et à l’échelle d’un parc WordPress, ce genre de discipline réduit la charge mentale, améliore la stabilité, et rend les attaques automatisées beaucoup moins utiles pour ceux qui s’y attardent.