Webbeveiliging

XML-RPC: definitie

Definitie

XML-RPC is een protocol om op afstand functies aan te roepen via XML-berichten. In WordPress maakt het bestand xmlrpc.php publiceren vanuit een externe app en het ontvangen van pingbacks mogelijk; het staat standaard aan en is ook een geliefd doelwit voor wachtwoordpogingen en misbruik van pingbacks.

XML-RPC, Webbeveiliging

XML-RPC is van oorsprong een algemeen protocol: een programma stuurt een XML-verzoek met de naam van een methode en de parameters, de server voert die uit en antwoordt in XML. In WordPress heeft het de vorm van het bestand xmlrpc.php, in de root van de site. Het stamt uit de tijd dat je artikelen in een desktopprogramma schreef, en het ondersteunt naast de eigen wp.*-methoden van WordPress ook de oude API's van Blogger, metaWeblog en Movable Type.

Waar XML-RPC vandaag nog voor dient

  • Publiceren op afstand vanuit een app of externe tool die inlogt met een gebruikersnaam en wachtwoord.
  • Pingbacks ontvangen, de meldingen die een ander blog stuurt wanneer het naar je verwijst (methode pingback.ping).
  • Bepaalde diensten laten werken, met name Jetpack, waarvan de koppeling met WordPress.com via xmlrpc.php loopt.

Sinds de REST API in de core zit, is er voor de meeste van die behoeften een modernere oplossing. Veel sites gebruiken XML-RPC helemaal niet meer, terwijl het standaard actief blijft.

De risico's

De officiële documentatie van WordPress noemt xmlrpc.php een veelvoorkomend doelwit van brute force: elke publicatie-aanroep accepteert een gebruikersnaam en wachtwoord, zonder dat er een pagina geladen of een cookie gezet hoeft te worden. In oktober 2015 beschreef Sucuri aanvallen die de methode system.multicall gebruikten om honderden wachtwoorden in een enkel HTTP-verzoek te testen. WordPress 4.4 heeft die versterking beperkt: na een mislukte authenticatie mislukken de volgende aanroepen in hetzelfde verzoek ook. De methode blijft echter een bron van serverbelasting en een veelvoorkomende reden voor blokkades op firewallniveau.

Pingbacks zorgen voor een ander probleem. Om een pingback te controleren, haalt WordPress de pagina op die zegt ernaar te verwijzen, op een adres dat de afzender zelf opgeeft. Zo kunnen duizenden sites, zonder gehackt te zijn, als doorgeefluik dienen voor een DDoS-aanval op hetzelfde slachtoffer.

Tabel in drie kolommen: legitiem gebruik van xmlrpc.php (publiceren vanuit een app, Jetpack, pingbacks, oude beheertools), veelvoorkomend misbruik (wachtwoordpogingen, system.multicall, misbruikte pingbacks, serverbelasting) en verweer (bestand blokkeren, pingback.ping verwijderen, applicatiewachtwoorden en 2FA, server- of CDN-regel)
xmlrpc.php heeft nog een paar legitieme toepassingen, maar trekt vooral bots aan.

Voor WordPress: XML-RPC afsluiten of beperken

Een punt dat vaak verkeerd wordt begrepen: het filter xmlrpc_enabled schakelt XML-RPC niet uit. Volgens de documentatie zet het alleen de methoden uit die authenticatie vereisen, niet de pingbacks. Afhankelijk van je gebruik:

  • Geen gebruik: blokkeer xmlrpc.php op server- of CDN-niveau (blok <Files "xmlrpc.php"> onder Apache, location = /xmlrpc.php { deny all; } onder Nginx). Alleen zo voorkom je ook dat PHP wordt belast.
  • Jetpack: dezelfde blokkade, met een uitzondering voor de IP-adressen die Jetpack publiceert.
  • Publiceren op afstand: laat het bestand staan, verwijder pingback.ping via het filter xmlrpc_methods en gebruik applicatiewachtwoorden, die je per stuk kunt intrekken.

Open na de wijziging /xmlrpc.php in een privévenster: het antwoord moet 403 of 404 zijn. Ons artikel XML-RPC in WordPress: risico's, gebruik en uitschakelen vergelijkt de methoden in detail. Houd je XML-RPC aan, dan maakt tweefactorauthenticatie op de accounts die publiceren gestolen wachtwoorden een stuk minder bruikbaar.

Video: “XML RPC uitschakelen voor extra WordPress beveiliging” (Gijs Tempel)

De module Hardening van WP Masquerade pakt XML-RPC al in de gratis versie aan: een eerste niveau verwijdert de pingbackmethoden, het volgende laat xmlrpc.php antwoorden met een 404-fout, met de waarschuwing dat Jetpack en sommige apps dan niet meer werken. Omdat WordPress zelf blokkeert, wordt PHP nog steeds aangesproken: een server- of CDN-regel haalt ook die belasting weg. Verzoeken naar het afgesloten adres worden geteld als robotval.

Verder lezen

  • Artikel Zo schakel je XML-RPC uit in WordPress: risico’s, gebruik en de juiste methode
  • Pagina WordPress hardenen

Bronnen

  1. WordPress Developer Resources: filtre xmlrpc_enabled (externe link, opent in een nieuw tabblad)
  2. WordPress Developer Resources: Brute Force Attacks (externe link, opent in een nieuw tabblad)
  3. Sucuri: Brute Force Amplification Attacks Against WordPress XMLRPC (octobre 2015) (externe link, opent in een nieuw tabblad)
  4. WordPress Developer Resources: XML-RPC WordPress API (externe link, opent in een nieuw tabblad)

Alle definities

WordPress-beveiliging, zonder ruis

Eén e-mail wanneer het ertoe doet: nieuw waargenomen aanvallen, updates van de plugin en praktische gidsen. Geen spam, afmelden met één klik.

Begin gratis, stap over op Pro wanneer je eraan toe bent

De gratis versie verbergt WordPress al en verplaatst de inlogpagina. Pro voegt aliassen, tweestapsverificatie en bewaking toe.