Host Header Injection is een infrastructurele kwetsbaarheid die grote gevolgen kan hebben voor de applicatielaag van WordPress en WooCommerce. Het treedt op wanneer de webserver zo is geconfigureerd dat hij de waarde van de HTTP Host header blindelings accepteert van de client. Cybercriminelen kunnen dit misbruiken om de automatische e-mails voor wachtwoordherstel te manipuleren, wat kan leiden tot grootschalige account-overnames (Account Takeovers).

Het mechanisme van de wachtwoord-reset exploit

Wanneer een klant zijn wachtwoord is vergeten, vult hij zijn e-mailadres in op de "/mijn-account/" pagina. WooCommerce roept vervolgens de WordPress-core aan om een unieke link met een geheim hersteltoken te genereren en deze per e-mail te verzenden.

Als de server de Host-header niet valideert, kan een aanvaller het HTTP-verzoek handmatig aanpassen:

Plaintext
 
POST /wp-login.php?action=lostpassword HTTP/1.1
Host: kwaadaardigewebsite.com

Wanneer WordPress de e-mail opbouwt, gebruikt het de variabele $_SERVER['HTTP_HOST'] om de link te construeren. De klant ontvangt een legitieme e-mail in zijn inbox, maar de link verwijst naar de server van de hacker: https://kwaadaardigewebsite.com/wp-login.php?action=rp&key=secret_token&login=klant_email

Als de klant (die de e-mail verwachtte) op de link klikt, landt hij op een nagemaakte inlogpagina van de hacker. De server van de hacker registreert het geheime token (key) direct uit de URL. De hacker kan dit token nu gebruiken om binnen de officiële webshop het wachtwoord van de klant te wijzigen en het account over te nemen.

Hoe u Host Header Injection voorkomt

1. Hardcodeer de Site URL in wp-config.php

De eenvoudigste en meest effectieve verdediging is het fixeren de de website-URL's in het configuratiebestand van WordPress. Hierdoor negeert de applicatie de dynamische Host-header van de browser bij het bouwen van links:

PHP
 
define('WP_HOME', 'https://www.uwbetrouwbarewebshop.nl');
define('WP_SITEURL', 'https://www.uwbetrouwbarewebshop.nl');

2. Configureer een strikt Server Block (Nginx)

Zorg ervoor dat uw webserver verzoeken met een onbekende of gemanipuleerde Host-header direct weigert met een foutcode, in plaats van ze door te sturen naar PHP.

Nginx
 
server {
    listen 80 default_server;
    listen 443 default_server;
    server_name _;
    return 444; # Verbreek direct de verbinding zonder antwoord
}

Conclusie

Het beveiligen van uw WooCommerce-winkel tegen Host Header Injection vereist een nauwe samenwerking tussen goede codeerpraktijken en een veilige serverconfiguratie. Door uw URL's vast te zetten, sluit u deze geavanceerde phishing-vector effectief af.