Een van de meest over het hoofd geziene informatie-lekken binnen WordPress is de standaard structuur van de auteursarchieven. Via een eenvoudige URL-manipulatie kan iedereen de exacte gebruikersnaam van de website-beheerders achterhalen. Hoewel dit voor een standaard blog wellicht onschuldig is, vormt het voor een WooCommerce-webshop een direct beveiligingsrisico. Het stelt kwaadwillenden in staat om binnen enkele seconden de eerste helft van de inloggegevens (de gebruikersnaam) te bemachtigen, waarna ze gerichte brute-force aanvallen kunnen starten.

Hoe auteursenumeratie werkt

WordPress wijst aan elke geregistreerde gebruiker een uniek numeriek ID toe. De eerste gebruiker die tijdens de installatie wordt aangemaakt (meestal de administrator), krijgt ID 1.

Een aanvaller kan de volgende URL in zijn browser typen: https://uwwebshop.nl/?author=1

Als de website niet is beveiligd tegen enumeratie, zal de WordPress-core het verzoek herkennen en de browser automatisch omleiden naar de specifieke archiefpagina van die auteur. De uiteindelijke URL in de adresbalk verandert dan in iets als: https://uwwebshop.nl/author/jan-de-beheerder/

De aanvaller weet nu direct dat jan-de-beheerder een geldige gebruikersnaam is op de website. Dit proces kan geautomatiseerd worden herhaald voor ?author=2, ?author=3, enzovoort, om zo de gebruikersnamen van het hele team en mogelijk ook van klanten te achterhalen.

Waarom dit WooCommerce-shops raakt

WooCommerce-winkels hebben vaak meerdere medewerkers met verschillende rollen (Shop Manager, Administrator, Klantenservice). Wanneer een aanvaller de unieke gebruikersnamen van het administratieve personeel in kaart brengt, kunnen ze hun botnets veel efficiënter inzetten. In plaats van willekeurige namen zoals 'admin' of 'root' te proberen, richten ze hun brute-force aanval direct op de echte gebruikersnamen, wat de kans op een succesvolle inbreuk aanzienlijk vergroot.

Hoe u auteursenumeratie kunt blokkeren

Er zijn verschillende manieren om dit lek te dichten, variërend van het toevoegen van code tot het gebruik van .htaccess.

Optie 1: Blokkeren via code (functions.php)

U kunt een filter toevoegen aan het functions.php bestand van uw child-theme dat verzoeken met de parameter author direct blokkeert of omleidt naar de homepage wanneer de gebruiker niet is ingelogd:

PHP
 
function block_user_enumeration() {
    if (is_admin()) return;

    if (isset($_GET['author']) && !is_user_logged_in()) {
        wp_safe_redirect(home_url(), 301);
        exit;
    }
}
add_action('init', 'block_user_enumeration');

Optie 2: Blokkeren via .htaccess (Apache-servers)

Als u het verzoek wilt stoppen voordat WordPress überhaupt wordt geladen, kunt u de volgende regels toevoegen aan uw .htaccess bestand:

Apache
 
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/$
RewriteCond %{QUERY_STRING} ^author=([0-9]*) [NC]
RewriteRule ^ - [F,L]

Deze regel zorgt ervoor dat iedereen die probeert te zoeken naar ?author=X direct een '403 Forbidden' foutmelding krijgt te zien.

Aanvullende aanbevelingen

  • Gebruik nooit 'admin' als gebruikersnaam: Als u tijdens de installatie de naam 'admin' heeft gekozen, maak dan direct een nieuwe administrator aan met een unieke naam en verwijder het oude 'admin' account.

  • Gebruik een Security Plug-in: Veel alles-in-één beveiligingsplug-ins (zoals Wordfence, iThemes Security of Sucuri) hebben een ingebouwde optie om gebruikersenumeratie via zowel de auteurs-URL als de REST API met één vinkje uit te schakelen.