XML-RPC ist eine dieser WordPress-Funktionen, von denen die meisten Seitenbetreiber noch nie gehört haben, und trotzdem läuft sie seit über einem Jahrzehnt still im Hintergrund fast jeder WordPress-Installation. Die Datei xmlrpc.php liegt im Stammverzeichnis und nimmt Anfragen von außen entgegen. Ursprünglich war sie der einzige Weg, einen WordPress-Blog aus der Ferne zu verwalten. Heute ist sie vor allem ein Sicherheitsrisiko, das Angreifer gerne ausnutzen.
Was XML-RPC in WordPress macht
XML-RPC steht für Extensible Markup Language – Remote Procedure Call. Vereinfacht gesagt ist es ein Weg für externe Software, über HTTP mit deiner WordPress-Seite zu kommunizieren. Die externe Anwendung schickt eine speziell formatierte XML-Anfrage an deineseite.de/xmlrpc.php, WordPress verarbeitet sie und gibt eine XML-Antwort zurück.
Über diese Schnittstelle können entfernte Clients Dinge tun wie:
- Beiträge und Seiten erstellen, bearbeiten und löschen
- Bilder und andere Medien hochladen
- Kommentare moderieren und verwalten
- Website-Konfiguration und Metadaten abrufen
- Pingbacks zwischen Blogs senden und empfangen
Stell es dir als primitive API vor, funktional, aber konzipiert in einer Zeit, bevor REST-APIs üblich waren.
XML-RPC vs. REST API: Vom Standard zum Sicherheitsrisiko
Mitte der 2000er Jahre war XML-RPC deine einzige Option, wenn du einen Blogbeitrag vom Handy oder einer Desktop-App wie Windows Live Writer schreiben wolltest. WordPress übernahm die MetaWeblog-API und die Blogger-API, beide auf XML-RPC aufgebaut, damit diese Tools mit deiner Seite kommunizieren konnten.
Dann lieferte WordPress 4.7 im Jahr 2016 die REST-API direkt mit aus. Plötzlich gab es einen modernen, standardisierten Weg, mit WordPress zu interagieren, einen, der JSON statt XML nutzt, ordentliche Authentifizierung unterstützt und deutlich einfacher zu handhaben ist. Ab diesem Zeitpunkt wurde XML-RPC zum Relikt. Die meisten modernen Plugins, Apps und Integrationen nutzen ausschließlich die REST-API.
XML-RPC Sicherheitsrisiken: Brute Force, DDoS und mehr
Die Datei ist standardmäßig auf jeder WordPress-Seite öffentlich erreichbar. Das allein ist schon nicht ideal, aber die eigentlichen Probleme liegen tiefer:
- Brute-Force-Verstärkung: XML-RPC hat eine Methode namens
system.multicall, mit der du Hunderte Anfragen bündeln kannst. Ein Angreifer kann 500 Benutzername-Passwort-Kombinationen in einer einzigen HTTP-Anfrage testen. Viele Login-Schutz-Plugins bekommen davon gar nichts mit, weil sie nurwp-login.phpüberwachen. - Pingback-Missbrauch: Die Pingback-Funktion lässt sich für DDoS-Angriffe instrumentalisieren. Ein Angreifer weist Tausende WordPress-Seiten an, einen Zielserver zu „pingen", und verwandelt damit unschuldige Seiten in ein Botnet. Das ist in der Praxis schon mehrfach passiert.
- Benutzernamen-Aufzählung: Selbst ohne gültige Zugangsdaten können XML-RPC-Antworten bestätigen, ob ein Benutzername existiert, und geben Angreifern damit die Hälfte der nötigen Informationen.
- Unnötige Angriffsfläche: Jeder öffentlich erreichbare Endpunkt, der Authentifizierung akzeptiert, ist ein potenzieller Einstiegspunkt. Wenn du XML-RPC nicht nutzt, ist es so, als würdest du eine Tür offenlassen, durch die nie jemand geht.
Braucht deine WordPress-Seite noch XML-RPC?
Die ehrliche Antwort: fast niemand. Es gibt ein paar Sonderfälle:
- Jetpack hat sich früher stark auf XML-RPC gestützt, wechselt aber zur REST-API. Neuere Jetpack-Versionen kommen für die meisten Funktionen ohne aus.
- Sehr alte mobile Apps: Die aktuelle WordPress-Mobile-App nutzt die REST-API. Nur veraltete Versionen von vor 2016 brauchen noch XML-RPC.
- Legacy-Drittanbieter-Tools: Einige uralte IFTTT-Rezepte oder Publishing-Plattformen nutzen es vielleicht noch, aber für alle gibt es Alternativen.
Wenn nichts davon auf dich zutrifft, gibt es keinen guten Grund, XML-RPC aktiviert zu lassen.
XML-RPC in WordPress deaktivieren
Am schnellsten geht es mit einem Filter in der functions.php deines Themes oder einem eigenen Plugin:
add_filter('xmlrpc_enabled', '__return_false');Das deaktiviert die XML-RPC-Methoden, die Datei antwortet aber weiterhin. Um den Zugriff komplett auf Server-Ebene zu blockieren, füge das in deine .htaccess ein:
<Files xmlrpc.php>
Require all denied
</Files>Oder bei Nginx:
location = /xmlrpc.php {
deny all;
return 403;
}Viele Sicherheits-Plugins (Wordfence, iThemes Security, Sucuri) bieten auch einen Ein-Klick-Schalter zum Deaktivieren von XML-RPC.
Offenen XML-RPC-Endpunkt erkennen mit InspectWP
InspectWP prüft, ob dein xmlrpc.php-Endpunkt von außen erreichbar ist. Wenn er auf Anfragen antwortet, markiert der Bericht das und erklärt, warum du eine Deaktivierung in Betracht ziehen solltest, besonders wenn deine Seite keinen legitimen Grund hat, ihn aktiv zu halten.