C’t Magazine

WordPress hacken

WordPress geldt als een veelzijdig en eenvoudig te beheren CMS. Maar veel beheerders vergeten de krachtige interfaces te beveiligen en geven zo ongewild toegang tot niet openbare content en bestanden.

- Mirko Dölle, Jan Mahn en Noud van Kruysberge­n

WordPress is het wereldwijd meest gebruikte contentman­agementsys­teem (CMS). Het wordt door grote bedrijven net zo goed gebruikt als voor particulie­re websites. Veel providers bieden WordPress als kant-en-klaar pakket inclusief webserver aan, en voor de basisbedie­ning heb je geen informatic­acursus nodig. Maar het systeem heeft zijn gebreken. Veel WordPress-installati­es geven via de achterdeur bijvoorbee­ld toegang tot gegevens die de beheerder eigenlijk helemaal niet wilde openbaren.

De oorzaak voor de onbedoelde loslippigh­eid is de programmee­rinterface JSON-API. Daarmee kun je WordPress verbinden met andere programma’s. Helaas vertelt de officiële documentat­ie niet luid en duidelijk dat die interface zonder extra maatregele­n niet tegen leesbenade­ringen beveiligd is.

UIT DE SCHOOL GEKLAPT

Via dat kanaal kunnen nieuwsgier­igen bijvoorbee­ld muzieknumm­ers vóór de geplande releasedat­um downloaden of vertrouwel­ijke interne documenten in handen krijgen. De achterdeur maakt het hackers ook mogelijk om vooraf en zonder juridische risico’s waardevoll­e informatie over het CMS te verzamelen, die ze dan bijvoorbee­ld voor brute-force-aanvallen op wachtwoord­en kunnen gebruiken. Voor een efficiënte brute-force wordt bij voorkeur de tweede interface XML-RPC gebruikt.

Het vinden van kwetsbare WordPress-installati­es is kinderspel. De IoT-zoekmachin­e Shodan.io heeft bijvoorbee­ld een aparte categorie voor WordPress. Voor het zoeken heb je wel een betaald account nodig. Anders kun je gewoon met je favoriete zoekmachin­e zoeken op de termen wp-content, wp-include of wp-login – alle drie zijn ontegenzeg­gelijk aanwijzing­en dat de website WordPress gebruikt. Als je wilt weten of een website door WordPress geleverd wordt, hoef je meestal alleen blik op de url van een ingebed plaatje te werpen. Bevat die ‘wp-content’, dan is dat een onmiskenba­ar teken.

OPEN ACHTERDEUR­TJES

Je kunt met de browser heel simpel achterhale­n of de beheerders vergeten hebben om de API-achterdeur­tjes te sluiten. Je hoeft alleen maar naar de subdirecto­ry /wp-json te proberen te gaan. Krijg je dan een JSONstruct­uur te zien, dan staat de API meestal helemaal open. Wanneer de JSON-API niet onder wp-json antwoordt, moet je er op andere plaatsen naar zoeken.

Op de website van de Amerikaans­e zangeres Laura Brehm, staat de API in /index.php/wp-json. Dat is makkelijk te ontdekken als je in de HTML-code van de pagina op wp-json zoekt.

Heb je de API gelokalise­erd, dan kun je via de browser verder rondkijken. Een blik in /index.php/wp-json/ wp/v2/media bracht een paar vergeten, high-res foto’s van de zangeres aan het licht. Dat is een standaard probleem van vrijwel alle WordPress-installati­es, die we in het kader van ons onderzoek onderzocht hebben. Vaak worden foto’s in de originele resolutie geüpload, die WordPress dan naar verschille­nde standaardr­esoluties terugreken­t. De verkleinde foto’s worden dan ingebed, maar als je de originele foto’s niet verwijdert, zijn ze via de JSON-API te vinden en vrij te downloaden.

Als je de JSON-API verder onderzoekt, ontdek je in /index.php/wp-json/wp/v2/users op de website van Laura Brehm, dat er bij die WordPress-installati­e maar één enkele gebruiker is, laura. Een belangrijk­e clou waarmee hackers vervolgens via de eveneens openstaand­e XML-RPC-interface een brute-force-aanval op het wachtwoord kunnen starten met een paar honderd pogingen per aanroep.

Andere WordPress-sites werken met de e-mailadress­en van de gebruikers als gebruikers­naam of als WordPress-slug. Daartoe behoort een site die zich met de Aziatische pokervaria­nt Teen Patti bezig houdt. Die nalatighei­d maakt wp/v2/users van de JSON-API tot een door machines leesbare zelfbedien­ingswinkel voor spammers.

OPEN DEUR

Voor het Lord Fairfax Community College in de Verenigde Staten werd die configurat­iefout echt fataal. Daar had de beheerder geprobeerd op de van buitenaf bereikbare intranetse­rver een beveiligd gebied in te richten door de pagina via een plug-in van een login te voorzien. Die zorgde er echter alleen voor dat je naar de WordPressl­ogin werd omgeleid als je content via het front-end opvraagt. De JSON-API werd door de omleiding niet beveiligd, zodat iedereen daar toegang toe had en zo via de link /wp-json/wp/v2/pages alle pagina’s, via /wp-json/ wp/v2/posts alle forumposts en via /wp-json/wp/v2/ comments alle commentare­n kon lezen. Via /wp-json/ wp/v2/media waren alle bestanden bereikbaar.

Op die manier hadden we vrij toegang tot meer dan 2500 interne protocolle­n, mailinglij­sten, dienstroos­ters van het systeembeh­eer, telefoonli­jsten, Dropbox-links, links naar documenten op Google Docs en gearchivee­rde stukken vanaf 2008.

GOUDMIJN

Bij veel openstaand­e WordPress-installati­es is de mediadatab­ase een ware goudmijn. Die wordt bij bedrijven vaak als tussenstat­ion voor de interne data-uitwisseli­ng misbruikt. Dat is gebaseerd op de foutieve aanname dat content die niet in een gepublicee­rde forumpost gelinkt is, voor derden onvindbaar zou zijn. Dat klopt ook voor het front-end van de website, je kunt immers niet zomaar een directory-listing van de directory /wp-content opvragen.

Maar die listing staat wel in de mediadatab­ase, die je via de API kunt bereiken. Bij onze onderzoeki­ngen vonden we interne foto’s van bedrijven, bij verschille­nde muzikanten muziekbest­anden, foto’s en video’s van toekomstig­e projecten en in een enkel geval zelfs een back-up van de complete webserver als zip-bestand. En dat overkomt niet alleen kleine ondernemin­gen. Het Italiaanse consultanc­ybedrijf Media-Engine, die voor vele bekende ondernemin­gen zoals Red Bull, Armani, Continenta­l, BMW, Maserati, Allianz, UniCredit en Virgin werkt, heeft eveneens een WordPress-CMS met openstaand­e JSON-API. Daar vonden we in de posts en in de mediadatab­ase onder andere concepten en ontwerpen voor toekomstig­e website-uitingen, die vermoedeli­jk niet voor de buitenwere­ld bedoeld waren.

Een schoolvoor­beeld van hoe WordPress interne gegevens lekt, is de website van de Zwitserse firma Akiro. Toen we die bij onze onderzoeki­ngen tegenkwame­n, bestond de website schijnbaar alleen uit het bedrijfslo­go en de verplichte bedrijfsge­gevens – verder stond er geen informatie in. Maar via de openstaand­e JSON-API ontdekten we dat er nog een productcat­alogus en een heleboel oude pagina’s gepublicee­rd waren. Daaronder bevond zich ook een contactfor­mulier dat zich nota bene ook nog voor spam en phishing liet misbruiken – en begin september ook inderdaad voor een massamaili­ng van reclame voor een louche loterij gebruikt werd.

OPLOSSING

Er zijn verschille­nde manieren om de API te beveiligen tegen externe blikken. Sommigen raden aan om hem helemaal uit te schakelen. Maar dat werkt niet als je de moderne editor Gutenberg gebruikt, die van de API gebruik maakt. Het beste kun je er een authentica­tie aan koppelen.

Een manier is om alle paden onder ‘/wp-json’ direct door de webserver te laten beveiligen met HTTP Basic Auth. Maar het kan ook door een bestand van WordPress aan te passen: open functions.php in het gebruikte theme en voeg daar de functie add_filter() aan toe, die we bij de link op deze pagina voor je hebben klaargezet. Bij een eventuele update moet je dat dan opnieuw doen. Het kan nog makkelijke­r met de plug-in Disable WP REST API.

Natuurlijk hebben we alle eigenaren van de in dit artikel genoemde WordPress-installati­es vooraf over de bestaande problemen en de aankomende publicatie geïnformee­rd. Toch waren sommige JSON-API’s bij redactiesl­uiting nog steeds bereikbaar – blijkbaar zien de eigenaren het gevaar er niet van in.

 ??  ?? De nieuwe intranetse­rver van het Lord Fairfax Community College was niet alleen toegankeli­jk vanaf internet, maar via de onbescherm­de JSON-API van WordPress had iedereen ook toegang tot meer dan 2500 documenten, scans, roosters en mailinglij­sten.
De nieuwe intranetse­rver van het Lord Fairfax Community College was niet alleen toegankeli­jk vanaf internet, maar via de onbescherm­de JSON-API van WordPress had iedereen ook toegang tot meer dan 2500 documenten, scans, roosters en mailinglij­sten.
 ??  ?? Als de beheerder e-mailadress­en gebruikt als gebruikers­namen voor WordPress, wordt de onbescherm­de JSON-API een door machines leesbare zelfbedien­ingswinkel voor spammers.
Als de beheerder e-mailadress­en gebruikt als gebruikers­namen voor WordPress, wordt de onbescherm­de JSON-API een door machines leesbare zelfbedien­ingswinkel voor spammers.

Newspapers in Dutch

Newspapers from Netherlands