Sécurité : contrez les attaques en sécurisant XML-RPC

Pour éviter les attaques de force brute, les dénis de service et dénis de service distribués, il est indispensable de sécuriser au maximum votre site. Et d'être paré à toute éventualité.

Cet article a été mis à jour le 10 janvier 2025 ; il prend 4 minutes à lire et comporte 760 mots.

J’ai reçu un email de mon héber­geur, me disant que je subis­sais une attaque de type force brute en bonne et due forme :

Nous avons été noti­fié que votre page tsw.ovh/xmlrpc.php a été victime d’un très grand nombre d’ac­cès prove­nant de nombreux pays. Après véri­fi­ca­tion, il s’agit d’une attaque par BruteForce distri­bué afin de trou­ver votre mot de passe de votre tableau de bord de votre CMS. 

Bon, je ne me suis pas inquiété outre mesure, mon mot de passe… avant qu’un hacker le casse, de l’eau aura coulé sous les ponts. Sauf à avoir une chance de cocu 😉 mais ça, c’est son problème, pas le mien 😀 Pour info, je crée mes mots de passe faciles à mémo­ri­ser, mais pas à trou­ver, du genre C10fi6l@KC100&C ou 7.1Po6Bl@TrouV. Vous pouvez le tester sur Under News – voici le résul­tat du test de mon mot de passe actuel (je le change au gré de mes décou­vertes mnémotechniques) :

sécurité - test du mot de passe
Test de mon mot de passe

Bon, plai­san­te­rie mise à part, je n’aime quand même pas l’idée qu’un sombre idiot vienne cher­cher mon mot de passe pour défa­cer mon site ou pour y décou­vrir mes plus inavouables turpi­tudes – il serait bien mal payé de sa peine, il n’y a stric­te­ment rien à découvrir 😉

Alors pour éviter tout problème et pour décou­ra­ger toute nouvelle tenta­tive, j’ai cher­ché comment me proté­ger des attaques menées via XML-RPC.

Deux solu­tions :

  • solu­tion radi­cale, je désac­ti­vais pure­ment et simple­ment XML-RPC, mais dans ce cas-là, je ne pouvais plus me servir de certaines fonc­tion­na­li­tés de Jetpack et d’autres exten­sions pour­tant intéressantes.
  • ou alors, je désac­ti­vais unique­ment les fonc­tion­na­li­tés XML-RPC utili­sées par les mécréants qui en veulent à mon mot de passe.

Je ne vous fais pas un dessin, vous vous doutez que j’ai choisi la deuxième solution.

Je vous fais grâce de mes recherches, je vous livre le résul­tat. Quelques lignes de code à insé­rer via Code Snippets :

add_filter('xmlrpc_methods', function ($methods) {
    unset($methods['system.multicall']);
    unset($methods['system.listMethods']);
    unset($methods['system.getCapabilities']);
    unset($methods['pingback.extensions.getPingbacks']);
    unset($methods['pingback.ping']);
    return $methods;
});

add_action('wp', function () {
     header_remove('X-Pingback');
 }, 9999);

À acti­ver sur tout le site, admi­nis­tra­tion incluse. On n’est jamais trop prudent. Ce n’est pas le Pérou, mais ça évitera les attaques de force brute, les DoS et DDoS via XML-RPC. Tout en permet­tant à Jetpack et autres exten­sions de se servir des fonc­tion­na­li­tés qui n’ont pas été bloquées.

Pour ceux qui ne veulent pas mettre les mains dans le code, j’ai prévu une petite exten­sion à télé­char­ger et à instal­ler / acti­ver. L’extension a été soumise à WordPress et a été approu­vée, vous pouvez donc la récu­pé­rer direc­te­ment depuis votre inter­face d’ad­mi­nis­tra­tion ou via le réper­toire des exten­sions sur wordpress.org

Vous pouvez télé­char­ger puis télé­ver­ser et acti­ver l’ex­ten­sion, ou en extraire le fichier prin­ci­pal stop-xml-rpc-attacks.php et le télé­ver­ser dans le réper­toire /wp-content/mu-plugins/ d’où il s’exé­cu­tera auto­ma­ti­que­ment sans que vous n’ayez besoin de l’activer.

Bon, je vous préviens quand même : vu qu’on parle de sécu­rité, cette exten­sion ne fonc­tion­nera pas avec WordPress 3.5 et du PHP 5.3 – la sécu­rité, c’est aussi une version récente de PHP (8.0 mini­mum, la version 7 n’est plus main­te­nue) et la toute dernière version de WordPress.

En plus de cette sécu­ri­sa­tion, il est indis­pen­sable de passer au HTTPS (pour les retar­da­taires), de mettre à jour régu­liè­re­ment WordPress, les thèmes et les exten­sions, et d’op­ter pour une exten­sion telle que WP Cerber, Wordfence, Sucuri ou SecuPress.

Jetpack propose lui aussi de bloquer les attaques de type DoS / DDoS / force brute, mais ce n’est pas son point fort, du moins pas dans sa version gratuite. Je vous conseille vive­ment d’ins­tal­ler une exten­sion dédiée à la sécu­rité, et bien sûr d’ef­fec­tuer des sauve­gardes régu­lières de votre site.

Voilà, tout est dit. Téléchargez l’ex­ten­sion, ou copiez / collez le bout de code dans Code Snippets, et n’hé­si­tez pas à parta­ger l’ar­ticle pour qu’un maxi­mum de sites puissent contrer les attaques sans pour autant se priver des avan­tages de XML-RPC.

Et si vous avez une ques­tion, ou si vous voulez parta­ger votre propre expé­rience, direc­tion les commentaires !

8 réflexions sur “Sécurité : contrez les attaques en sécurisant XML-RPC”

  1. Suivez le lien : https://tsw.ovh/blogging/conseils/securite-attaques-xml-rpc/tsw.ovh/blogging/code/centralisez-code-snippets/ tout est expli­qué, de l’ins­tal­la­tion de Code Snippets à son utilisation.
    Mais si nous n’avez pas d’autre code person­na­lisé à utili­ser, je vous recom­mande d’ins­tal­ler mon exten­sion, elle est ultra légère, testée et véri­fiée à chaque nouvelle version de WordPress, et ne néces­site aucune configuration.

  2. Bonjour Pascal,

    Merci beau­coup pour cette appli­ca­tion très utile. Je me suis fait pira­ter récem­ment via cette vulné­ra­bi­lité XML-RPC de WordPress.
    Le seul accès qui me reste est mon FTP. J’ai installé votre mu-plugin dans le réper­toire mu-plugins, mais je ne vois pas comment récu­pé­rer mon accès à WordPress. Auriez-vous une idée s’Il vous plaît ?

  3. Les ping­backs sont désac­ti­vés si vous utili­sez l’extension.
    Si vous souhai­tez garder cette fonc­tion­na­lité (discu­table) vous devez commen­ter ou suppri­mer les lignes 5 et 6 :

    unset($methods['pingback.extensions.getPingbacks']);
    unset($methods['pingback.ping']);

    Mais les ping­backs intro­duisent une vulné­ra­bi­lité (rela­tive) sur votre blog. À vous de voir…

  4. Bonjour pascal ;

    Est-ce qu’en acti­vant ce code dans mon site, les pings auto­ma­tiques XML-RPC vers d’autres sites pour­ront fonc­tion­ner merci.

  5. Sympathique, la seule chose que je n’ai pas comprise, c’est ce que le bout de code va faire exac­te­ment pour empê­cher le hackeur d’uti­li­ser cette méthode.

Les commentaires sont fermés.

Retour en haut
Les cookies que nous utilisons sont indispensables au bon fonctionnement de ce site. Il n'y a aucun pistage publicitaire et les données statistiques recueillies sont anonymisées.
J'ai compris