WordPress kwetsbaarheden
Geplaatst op: - Laatste aanpassing:

Toen WordPress in 2003 werd bedacht werd het voornamelijk gebruikt door bloggers maar sinds die tijd is er veel veranderd. WordPress heeft zich aangepast aan de wensen van haar gebruikers en wordt tegenwoordig gebruikt door maar liefst 43% van alle websites (bron: W3Techs, dec 2022), van webwinkels en communities tot nieuwsorganisaties en zelfs overheden. Dit toont dus aan dat WordPress razend populair is en zichzelf heeft bewezen als een goed en veilig systeem om websites mee te bouwen. Toch heeft het, net als ieder ander systeem ook kwetsbaarheden.
In dit artikel gaan we het hebben over wat de voornaamste kwetsbaarheden zijn en welke gevolgen ze kunnen hebben. Wij hopen dat je de informatie uit dit artikel kunt gebruiken om zelf actie te ondernemen en deze kwetsbaarheden te voorkomen.
Reminder: deze kwetsbaarheden gelden ook voor andere systemen, wij noemen hier expliciet WordPress om extra context te geven aan deze kwetsbaarheden binnen het WordPress ecosysteem.
Inhoudsopgave
- Gebruikers en wachtwoorden
- Plugins en thema’s
- Achterlopen met updates
- Phishing
- Brute force attacks
- SQL injectie
- Cross Site Scripting (XSS)
- Malware
- HTTP inplaats van HTTPs
- Spam e-mails
- GDPR en AVG
Gebruikers en wachtwoorden
De eenvoudigste en meestvoorkomende kwetsbaarheid is wanneer er simpel weg ingelogd kan worden met het gebruikersnaam en wachtwoord van één van de gebruikers. Vanuit het WordPress admin gedeelte is vervolgens de weg vrij om meer schade aan te richten waaronder een aantal van de kwetsbaarheden die we verder op in dit artikel benoemen.
Mogelijke kwetsbaarheden:
- Het hebben van een zwak wachtwoord
- Het missen van twee-factor-authenticatie (2FA)
- Hergebruik van hetzelfde wachtwoord op verschillende sites; wanneer een website betrokken is bij een datalek kan het zijn dat deze informatie op straat ligt, hackers hebben vervolgens vrijbaan om jouw gegevens op andere websites uit te proberen
- Het niet opruimen van inactieve gebruikers bijvoorbeeld een ex-collega die nog steeds kan inloggen
- Het hebben van meerdere gebruikers met hoge toegangsrechten
- Social engineering iemand doet zich (bijvoorbeeld via e-mail) voor als een bekende en vraagt om inloggegevens of om de gegevens waarmee ze deze informatie zelf kunnen bemachtigen
Plugins en thema’s
De grote kracht van WordPress, de enorme hoeveelheid plugins en thema’s is tegelijkertijd ook een kwetsbaarheid. Het staat iedereen vrij om een plugin en thema te bouwen ook mensen met slechte bedoelingen, hierdoor kan, als je pech hebt, een thema of plugin slechte code bevatten en voor malafide doeleinde gebruikt worden. Het gevolg is dat de kwetsbaarheden die je in dit artikel zult tegenkomen uitgevoerd kunnen worden op je WordPress site maar bijvoorbeeld ook op je computer en in extreme gevallen vanuit je computer op het netwerk.
Wees je hier dus van bewust en download van een legitieme bron, let op de hoeveelheid gebruikers, actualiteit van updates en lees de recensies.
Als ontwikkelaar: bewuste ontwikkelaars controleren de code van een plugin voor ze deze voor de eerste keer ergens gebruiken. Vaak kun je aan de kwaliteit van de code opmaken wat het ervaringsniveau van de bouwers is. Daarnaast kan een WAF (Web Application Firewall) veel voorkomende exploits tegenhouden en een Malware scan helpen bij het ontdekken van malafide code op je server.
Achterlopen met updates
WordPress heeft sinds versie 3.7 automatische achtergrond updates en probeert je website dus geautomatiseerd van de laatste updates te voorzien. Je kunt dit uitzetten maar doe dit vooral niet, zo ontvang je tijdig beveiligingsupdates als er blijkt dat er ergens een beveiligingslek zit. Sommige plugins en thema’s kunnen ook geautomatiseerd updates ontvangen maar dit gebeurt bij lange na niet altijd, zorg er dus voor dat je deze regelmatig update.
Er zijn bedrijven die “vulnerabilities” van WordPress bijhouden zoals WPScan (klik op de dropdown in het menu om ook de kwetsbaarheden in plugins en thema’s te bekijken). Dit is handig wat zo kunnen site eigenaren hier snel actie op ondernemen maar wees je ervan bewust dat hackers deze data ook gebruiken om te zoeken naar websites die aan deze voorwaarden voldoen. Dit maakt het extra belangrijk om bij te blijven met de updates.
Phishing
Phishing is een vorm van internetfraude waarbij gebruikers misleidt worden hun gegevens over te dragen door zich voor te doen als vertrouwde merken. Er bestaan meerdere vormen van phishing maar vaak wordt er een nep e-mail gestuurd die erg veel weg heeft van de officiële variant, door middel van “URL spoofing” kunnen zelfs de e-mailadressen en linkjes in de e-mail moeilijk van echt te onderscheiden zijn.
Voorbeeld: de beheerder van de WordPress site ontvangt een e-mail van wat sterk op de hostingpartij lijkt de uitstraling van de e-mail komt exact overeen met eerdere mails van de hostingpartij. In de e-mail staat dat er snel actie ondernomen moet worden omdat de website anders offline gehaald wordt. Je hoeft alleen maar even in te loggen en de nieuwe voorwaarden te accepteren! Je klikt op de link en komt op een internetpagina uit, er staat HTTPs voor het webadres en de pagina ziet er exact zo uit als die van de hostingpartij dus veilig toch? Je logt in met je gegevens en accepteert de voorwaarden.
Het resultaat is dat de mensen achter de website nu je inloggegevens hebben – ze hebben de website nagebouwd (er bestaat software om het uiterlijk en de zichtbare bestanden van websites te downloaden) en hebben het formulier zo ingesteld dat alle invoer toegestaan is, ze versturen deze gegevens naar henzelf of slaan dit op eigen server op. Met deze gegevens kunnen ze vervolgens bij de echte hostingpartij inloggen en vanuit daar schade aanrichten. HTTPs zegt iets over een versleutelde verbinding maar zegt niks over de legitimiteit van een website. Onthoud ook dat het ‘bezoeken’ van de website ook al het gevaar van malware met zich meebrengt.
Brute force attacks
Een “brute force attack” is een geautomatiseerde aanval waarbij een hacker zoveel mogelijk combinaties probeert tot het uiteindelijk lukt, dit gebeurt meestal op een inlogscherm. De hacker gebruikt hiervoor een bot netwerk om dit vanaf zoveel mogelijk computers te kunnen uitvoeren en gebruikt vaak een database met daarin veel voorkomende gebruikersnamen en wachtwoorden om het doel sneller te bereiken.
Om uit eigen ervaring te spreken; krijgen zo goed als alle publiekelijk toegankelijke WordPress websites, vroeg of laat, te maken een brute force attack, al zul je dit vaak niet eens in de gaten hebben.

Het bovenstaande screenshot is van een relatief kleine website met +/- 1000 bezoekers per maand. Doordat ik deze vroeg in de ochtend heb genomen staat de dagteller nog op 0 maar zoals je kunt zien zijn er in een maand tijd al 3714 brute force aanvallen geweest. Door het gebruik van een firewall is dit aantal overigens aanzienlijk lager doordat sommige IP adressen al vroegtijdig worden geblokkeerd, nog voordat ze als een aanval bestempelt kunnen worden.
SQL injectie
WordPress websites hebben een database waarin informatie over de site wordt opgeslagen, te denken valt aan pagina’s, berichten, reacties maar ook de inloggegevens van je gebruikers. Je website gebruikt SQL opdrachten om gegevens uit de database op te halen, gegevens bij te werken en gegevens op te slaan en toont dit volgens aan jou via de browser. Wanneer de beveiliging van je website goed geregeld is, is je website de enige die dit kan doen.
Met een SQL injectie (ook wel SQLi genoemd) probeert een hacker direct met de database te communiceren. De hacker zoekt hiervoor naar plekken waar hij of zij zelf informatie kan invoeren, enkele voorbeelden hiervan zijn:
- Invoervelden zoals voor het inloggen, zoeken, reageren en contact opnemen
- Een uploadfunctionaliteit
- De adresbalk van de website
Wanneer een SQLi succesvol is kan de aanvaller database informatie veranderen, ophalen, verwijderen en in sommige gevallen opdrachten uitvoeren op het besturingssysteem van de server. Het is dus erg belangrijk om hier rekening mee te houden zeker wanneer je met gevoelige informatie werkt.
Voorbeeld van een SQL injectie

In het bovenstaande screenshot hebben we een voorbeeld van een inlog formulier. Op het moment dat we proberen in te loggen doet de website een aanvraag naar de database om ons verzoek te valideren. De SQL opdracht die de website doet zou er zo uit kunnen zien:
"SELECT id FROM users WHERE username='" + user + "' AND password='" + password + "'"
Het code voorbeeld hierboven is gevoelig voor SQLi omdat we de invoer samenvoegen (string concatenation) en niet valideren. We kunnen vervolgens ' OR 1=1
aan ons foutieve wachtwoord toevoegen en doordat het resultaat van 1=1
(een condition) een true
oplevert zal alles achter WHERE
als correct beschouwd worden, het maakt niet meer uit of de gebruikersnaam en wachtwoord kloppen.
Cross Site Scripting (XSS)
Een Cross Site Scripting (XSS) aanval lijkt veel op een SQL injectie maar het verschil hier is dat de hacker het gemunt heeft op de bezoekers van je website en niet de database.
Bij een XSS aanval worden er van buitenaf (meestal via een browser script) malafide scripts geïnjecteerd in een website. De bezoekers die vervolgens deze website bezoeken hebben geen idee dat deze scripts niet betrouwbaar zijn en zullen ze naar waarschijnlijkheid uitvoeren omdat de scripts van een betrouwbare bron lijken te komen. Door het uitvoeren van deze scripts kan de aanvaller bij de cookies, sessies en andere gevoelige informatie komen.
Malware
Malware wordt als verzamelnaam gebruikt om alle code te omschrijven die ongeautoriseerde activiteit op je website veroorzaakt. Malware wordt geïnjecteerd via malafide scripts en hackers doen dit door middel van kwetsbaarheden in je website, bijvoorbeeld door een kwetsbaarheid in een thema of in een plugin. Om dit te voorkomen is het belangrijk dat je tijdig update (lees het onderdeel; achterlopen met updates) en kwalitatief sterke en betrouwbare thema’s en plugins gebruikt.
Soorten malware
Er bestaan verschillende soorten malware, hieronder lees je welke malware je zoal tegen kunt komen.
1. Spam pages
Spam pages ook wel “SEO spam” genoemd is een vorm van malware waarbij hackers posities van de website in zoekmachines zoals Google kapen en manipuleren. Hackers infecteren de website met malware en passen vervolgens de inhoud van pagina’s, berichten en SEO metadata aan, in een poging om het zoekverkeer naar eigen websites en producten te begeleiden. Deze inhoud heeft vaak betrekking op hoog concurrerende zoektermen zoals online gokken, gewichtsverlies en 18+ content.
Als website eigenaar heb je deze malware misschien pas in de gaten wanneer je zelf pagina’s opzoekt in Google of wanneer je vreemde verwijzigingen in Google Analytics ziet. De malware kan schadelijk zijn voor de betrouwbaarheid van je merk maar ook voor SEO omdat Google malafide websites bestraft.
2. Malafide redirects
Er bestaat ook malware die het verkeer van je website doorverwijst naar een andere website door middel van een redirect. Dit wordt een malafide redirect (of in het Engels; malicious redirect) genoemd. Het is ook mogelijk dat er ook redirects zijn geplaatst op de wp-admin waardoor site eigenaren niet meer bij hun eigen website kunnen komen.
In het meest gunstige geval kun je de redirect op één enkele plek vinden, bijvoorbeeld in het .htaccess bestand in de root van je WordPress installatie. Maar het is ook mogelijk dat de malware een redirect binnen individuele pagina van je website heeft geplaatst of in meerdere bestanden op de server staat. Net als bij de spam pages malware hierboven kan dit schadelijk zijn voor de betrouwbaarheid van je merk en de SEO.
3. Backdoors
Een backdoor is mogelijk de meeste frustrerende kwetsbaarheid waar je mee te maken kunt krijgen, want zoals de naam al aangeeft is dit een manier voor hackers om via een achterdeurtje (opnieuw) toegang te krijgen. Ook hier injecteren hackers malafide scripts (malware) en wanneer je denkt dat je deze scripts eindelijk hebt gevonden en hebt verwijderd, weten ze opnieuw toegang te krijgen tot je website.
Backdoors zijn vaak lastig te vinden doordat ze goed verstopt zitten, bijvoorbeeld in diepe folder structuren of namen hebben waardoor ze op legitieme website bestanden lijken, bijvoorbeeld op de bestanden van WordPress.
Hoe kom je van malware af?
Afhankelijk van de malware en de hoeveelheid content op je website kan het ingewikkeld en tijdrovend zijn om van malware te herstellen.
Heb je een recente backup van voordat je website last kreeg van de malware? Dan kun je deze misschien terugzetten; let wel op dat het lek welke door de hackers misbruikt is waarschijnlijk ook in de backup versie te vinden zal zijn. Zorg er in ieder geval voor dat je de malware eerst opspoort en deze verwijdert omdat de kans bestaat dat de gevolgen anders terug blijven komen.
Je kunt de malware opsporen door een malware scanner te gebruiken, na het verwijderen van de malware is het verstandig je WordPress installatie en database te doorlopen en op zoek te gaan naar de gewijzigde inhoud, zorg er ook voor dat je de bestanden van je server grondig inspecteert om er zeker van te zijn dat hier niks in is veranderd. Schakel de hulp van een professional in wanneer je niet (goed) weet hoe je dit doet.
HTTP inplaats van HTTPs
HTTP staat voor Hypertext Transfer Protocol en zorgt ervoor dat systemen met elkaar kunnen communiceren en data kunnen uitwisselen. HTTPS staat voor Hypertext Transfer Protocol Secure en voegt hier een encryptie laag aan toe wat ervoor zorgt dat de communicatie tussen de webserver en browser versleuteld is en derde dit niet kunnen onderscheppen.
Wanneer je website geen gebruikt maakt van een veilige verbinding kunnen cybercriminelen dit onderscheppen en ‘meeluisteren’ met gevoelige data zoals gebruikersnamen, wachtwoorden maar bijvoorbeeld ook rekeningnummers mocht je website over deze data beschikken. De gebruikers van je website kunnen hierdoor slachtoffer worden van een hack of zelfs identiteitsfraude.
Een HTTPs verbinding is dus noodzakelijk wanneer je website te maken heeft met persoonsgegevens maar straalt ook vertrouwen uit naar de bezoekers van je website en speelt een rol bij de laadsnelheid en SEO score van je website.
Spam e-mails
Veel websites maken gebruik van e-mail om bezoekers betrokken te houden en met ze te communiceren. In een wereld waarbij mensen al zoveel e-mails ontvangen is het belangrijk dat jouw e-mails van meerwaarde zijn en als betrouwbaar en niet storend beschouwd worden anders schrijven abonnees zich al snel uit. Het is dus belangrijk dat je zorgvuldig om gaat met de abonnees en de e-mails die je verstuurd.
Kijk uit voor malware
Mochten hackers erin slagen malware te injecteren op je website dan is het mogelijk dat ze misbruik maken van de gegevens van je abonnees maar bijvoorbeeld ook van de functionaliteit die je gebruikt om vanaf je website e-mails te versturen. Dit kan de wp_mail() functie zijn (dit is de functie waarmee WordPress doorgaans e-mail verzend) maar bijvoorbeeld ook een WordPress plugin die je gebruikt voor het verzenden van e-mail.
Interessant voor kwaadwillende
Dit type malware is voor kwaadwillende interessant omdat ze ineens toegang tot je doelgroep hebben en schadelijke e-mails kunnen versturen. Hierbij is de kans groter is dat de e-mails in eerste instantie door e-mailproviders worden toegelaten en door de lezers worden geopend omdat ze in van een betrouwbare bron afkomstig lijken te zijn.
Naast de vertrouwensbreuk met- en de schade die dit voor je abonnees kan veroorzaken, loop je ook het risico dat je op een zwarte lijst terecht komt waardoor je website slechter scoort en je e-mails in het vervolg niet meer aankomen of tussen de spamfilters verdwijnen.
GDPR en AVG
Als laatste onderdeel wil ik benoemen dat je volgens de Europese wet GDPR (General Data Protection Regulation) en het Nederlandse AVG (Algemene Verordening Gegevensbescherming) een plicht hebt zorgvuldig met de gegevens van je bezoekers, gebruikers en klanten om te gaan. Door gegevens op je website en andere systemen niet langer te bewaren dan strikt noodzakelijk en alleen de gegevens uit te vragen welke nodig zijn voor je dienstverlening, bescherm je jezelf en het merk ook ten tijden van een hack.
Verwijder dus gegevens die je niet langer nodig hebt, dit kunnen de inzendingen van formulieren zijn maar ook persoonsgegevens van inactieve gebruikers en zet het bewaartermijn en het bewaardoel in je privacy voorwaarden.
Tot slot
Zoals je hebt kunnen lezen komen een hoop van deze kwetsbaarheden door ons eigen gedrag. Door hiervan op de hoogte te zijn weten we beter waar we op moeten letten en heb je een ijzersterk systeem. We hebben ook een artikel geschreven over WordPress beveiligen waar we je oplossingen bieden om een aantal van deze dingen te voorkomen.