XMLRPC en WordPress

Ingediend door Dirk Hornstra op 13-nov-2023 20:19

Van mijn oud-dorpsgenoot en volger van mij op LinkedIn (en dit blog) Bert Sinnema kreeg ik een tip over WordPress. Hij deelde namelijk dit artikel van securi.net van mei 2023: link.

In elke Wordpress-installatie staat in de root het bestand xmlrpc.php. Zoals je in het artikel kunt lezen kon je in het verleden dat bestand niet standaard gebruiken, daarvoor moest je wat aanzetten. Vanaf een bepaalde versie is dit bestand standaard actief zonder dat je wat extra's hoeft uit te voeren.

Zoals de auteur aangeeft, het kan "mogelijk" gebruikt worden om acties op jouw website uit te voeren die je niet wilt. En inmiddels heb je de Wordpress API en hoeft die xmlrpc.php niet meer gebruikt te worden. Hoewel je "nog wel moet inloggen met je eigen gegevens" en niet zomaar berichten aan kunt passen of verwijderen is er wel het risico dat als je inloggegevens uitlekken (of iemand laat het resetten naar een Welkom123), dan is alleen een IP-block op de /wp-admin URL niet voldoende. Want hij/zij kan, als dit bestand niet aanvullend afgeschermd is, toch nog nare dingen doen.

Ik heb bij al mijn WordPress-sites inmiddels dit bestand uitgeschakeld via het .htaccess bestand zoals dat genoemd wordt in het blog.

De oude API - xmlrpc.php

Ik heb me nooit zover in WordPress verdiept (jij misschien ook niet), dat je een API kunt gebruiken. Ik heb wel eens een thema gemaakt, wat plug-ins en dat was het dan.
Je kunt online de inhoud van de code bekijken, dus ik start met xmlrpc.php: link.

Daar gebeurt niet zoveel in, je ziet dat je de URL aan kunt roepen met ?rsd=true en dan krijg je wat informatie te zien. Je ziet daar onder andere WP-API (dat zal de "nieuwe"  API zijn waarover de auteur van het artikel het heeft), dat verwijst naar /wp-json/ Daar kom ik later nog op terug.

In ieder geval, je ziet dat een paar bestanden geïnclude worden. Waaronder /wp-includes/class-wp-xmlrpc-server.php (link) en je ziet dat daar bijna alle code in zit. Daar zit een deel in waarmee je in kunt loggen, waarbij je berichten aan kunt passen of verwijderen. Een botje zou in theorie dus kunnen proberen om met allemaal verschillende gebruikersnamen en wachtwoorden in te loggen: is dat gelukt, dan ben je de sjaak.

De nieuwe API

Ik wist wel dat je op het endpoint /wp-json vaak veel informatie kon terug vinden, dat is dus nu de API van WordPress. Ik gebruik het onder andere bij een aantal websites van locaties waar artiesten optreden en waarmee ik dus op een redelijk makkelijke manier de pagina op wparty.nl kan vullen.

Ik heb even gekeken, je kunt hier documentatie van WP over de API vinden: link.

In WordPress kun je bij een user een "Application Password" aanmaken. Dat gebruik je voor acties met de API die authenticatie nodig hebben. Dus niet meer met je "echte username en password" in de API inloggen en het risico lopen dat die gegevens ergens lekken. En mocht dat "Application Password" wel ergens uitlekken, dan kun je snel dat token "revoken" en een nieuwe aanmaken.

 

In ieder geval, zet onderstaande in je .htaccess-bestand om de boel dicht te gooien. Jou zullen ze niet pakken!



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