À propos de XML-RPC

XML-RPC est un protocole d'appel de procédures à distance qui utilise XML pour l'échange de données. Avec XML-RPC, le client qui souhaite appeler une méthode distante crée les paramètres d'entrée au format XML et les envoie, par une requête HTTP, à un serveur distant qui implémente le protocole XML-RPC.

Comprendre XML-RPC dans WordPress

WordPress est une plateforme de blog complète. Elle est hautement personnalisable et facilite le développement d’un site web. Grâce à XML-RPC de WordPress, il est possible de créer des clients de blog WordPress ou d’autres logiciels qui effectuent des tâches par lots, comme la création de plusieurs articles à partir d’un fichier. Le système XML-RPC peut être étendu par des extensions WordPress afin de modifier son comportement. La fonctionnalité XML-RPC est activée par défaut depuis WP 3.5. XML-RPC est activé par défaut, notamment pour les appareils mobiles et les applications de bureau tierces qui l’utilisent pour communiquer avec WordPress.

Le problème de XML-RPC est qu’il peut provoquer un épuisement du processeur et de la mémoire, et amener la base de données du site à atteindre le nombre maximal de connexions ouvertes. Le site vulnérable (et le serveur) peut alors devenir indisponible pendant un certain temps, ce qui affecte la disponibilité de votre site web.

L’API XML-RPC de WP peut être exploitée de quatre manières par un attaquant :

  • Collecte d’informations — l’attaquant peut sonder des ports spécifiques du réseau interne de la cible
  • Analyse de ports — l’attaquant peut effectuer une analyse de ports des hôtes du réseau interne
  • Attaques DoS — Outre le transfert de données, xmplrpc.php est également chargé d’activer les pingbacks et les trackbacks. Ce sont les notifications que vous recevez lorsqu’un blog ou un site web tiers publie un lien vers votre site. Bien qu’il ait été remplacé, certains sites utilisent encore XML-RPC.php pour des raisons de rétrocompatibilité. Si c’est votre cas, des pirates peuvent lancer des attaques DDoS contre xmlrpc.php en envoyant un grand nombre de pingbacks et mettre votre site hors service, ou plus exactement le rendre indisponible pour vos utilisateurs.
  • Piratage de routeur — l’attaquant peut reconfigurer un routeur interne du réseau
  • Attaques par force brute - XML-RPC (XML remote procedure call) permet des appels distants encodés, transportés via HTTP, qui vous permettent de publier, modifier ou supprimer à distance un fichier ou un contenu de votre site WordPress. À chaque requête, xmplrpc.php envoie les informations d’authentification. Cela facilite l’envoi d’une grande quantité de données en une seule fois. Mais la possibilité d’envoyer une grande quantité de données en une seule fois signifie que des pirates peuvent également y glisser un grand nombre de mots de passe. Si un pirate envoie suffisamment de requêtes d’authentification avec différentes combinaisons de nom d’utilisateur et de mot de passe, il peut finir par trouver la bonne, et votre site se retrouve alors compromis.

Vérifier si XML-RPC est déjà désactivé sur votre blog

Avant d’aller plus loin, nous devons effectuer une vérification simple pour savoir si XML-RPC est activé sur votre blog. Pour cela, essayez d’accéder au fichier xmlrpc.php dans votre navigateur en ouvrant l’URL https://domain.com/xmlrpc.php (remplacez domain.com par votre nom de domaine).

S’il est désactivé, vous obtiendrez le message « 403 – Forbidden ». Si vous obtenez un autre message, poursuivez votre lecture pour découvrir les solutions de protection possibles.

Mesures de protection ou solutions de contournement par le code

1. Si vous n’utilisez pas du tout la fonctionnalité XML-RPC, ajoutez les lignes ci-dessous au fichier .htaccess afin de vous protéger contre d’éventuelles vulnérabilités :

# protect xmlrpc
<IfModule mod_alias.c>
RedirectMatch 403 /xmlrpc.php
</IfModule>

2. Pour rediriger les requêtes vers xmlrpc.php vers une page personnalisée, modifiez la directive RedirectMatch comme suit :

# protect xmlrpc
Redirect 301 /xmlrpc.php http://example.com/custom-page.php

3. Refuser tout accès à xmlrpc.php :

# protect xmlrpc
<Files xmlrpc.php>
Order Deny,Allow
Deny from all
</Files>

4. Autoriser l’accès à xmlrpc.php uniquement à certaines adresses IP.

# protect xmlrpc
<Files xmlrpc.php>
Order Deny,Allow
Deny from all
Allow from <IP>
Allow from <IP>
</Files>

Vous pouvez également ajouter le code suivant à votre fichier wp_config.php, après la ligne require_once(ABSPATH . ‘wp-settings.php’); si vous souhaitez désactiver XML-RPC pour votre site.

add_filter('xmlrpc_enabled', '__return_false');