Host Header Injection is een kwetsbaarheid die optreet wanneer een webserver of een applicatie (zoals WordPress) de waarde van de HTTP Host-header blindelings vertrouwt om links, e-mails of omleidingen te genereren. Binnen WooCommerce kan dit type injectie door aanvallers worden misbruikt om wachtwoord-reset-links te manipuleren, waardoor klanten of administrators per ongeluk hun inloggegevens rechtstreeks naar de hacker sturen.
Hoe een Host Header Injection werkt
Wanneer een browser een website opvraagt, stuurt hij een Host-header mee: Host: uwbetrouwbarewebshop.nl
WordPress gebruikt deze header soms om dynamisch absolute URL's te genereren, bijvoorbeeld bij het verzenden van de automatische "Wachtwoord vergeten" e-mails. Een aanvaller kan een HTTP-verzoek handmatig aanpassen en een valse Host-header meesturen naar de inlogpagina van uw webshop: Host: kwaadaardigewebsite.com
Als de server en de WordPress-configuratie dit toelaten, zal WordPress het verzoek verwerken en een wachtwoord-reset-e-mail sturen naar de administrator. Echter, de link in die e-mail zal er zo uitzien: https://kwaadaardigewebsite.com/wp-login.php?action=rp&key=geheimetoken&login=admin
Wanneer de administrator op deze link klikt (omdat hij denkt dat het een legitieme systeem-e-mail is), wordt het geheime reset-token direct naar de server van de hacker verzonden, die daarmee onmiddellijk het wachtwoord kan wijzigen en de site kan overnemen.
De impact op WooCommerce klanten
Binnen WooCommerce kan dit op grote schaal worden toegepast op de "/mijn-account/" pagina. Als aanvallers geautomatiseerde scripts gebruiken om voor duizenden klanten tegelijkertijd een wachtwoord-reset aan te vragen met een gemanipuleerde Host-header, zullen veel onwetende klanten op de link klikken, wat resulteert in grootschalige account-kaping (Account Takeover).
Hoe u Host Header Injection voorkomt
1. Fixeer de Site URL in wp-config.php
De effectiefste manier om te voorkomen dat WordPress dynamisch de Host-header gebruikt voor het genereren van links, is door de website URL's hardcoded vast te leggen in het wp-config.php bestand. Hierdoor negeert WordPress de HTTP-header van de client.
define('WP_HOME', 'https://uwbetrouwbarewebshop.nl');
define('WP_SITEURL', 'https://uwbetrouwbarewebshop.nl');
2. Configureer uw webserver correct
Zorg ervoor dat uw webserver (Apache of Nginx) zo is ingesteld dat hij verzoeken met een onbekende of niet-geconfigureerde Host-header direct weigert met een 444 (Nginx) of 403 (Apache) statuscode. Stel een zogenaamd 'default server block' in dat alle verzoeken opvangt die niet expliciet aan uw domeinnaam zijn gekoppeld.
Voor Nginx:
server {
listen 80 default_server;
listen 443 default_server;
server_name _;
return 444; # Verbreek direct de verbinding bij een valse host
}
Conclusie
Host Header Injection is een klassiek voorbeeld van hoe een infrastructurele instelling de veiligheid van de applicatielaag (WooCommerce) kan ondermijnen. Door uw URL's hardcoded vast te zetten, elimineert u dit risico in één klap.
