Een van de meest kritieke aspecten van een e-commerce website is de integriteit van de klantgegevens. Klanten vertrouwen erop dat hun adresgegevens, telefoonnummers en bestelgeschiedenis veilig zijn opgeslagen. Een Insecure Direct Object References (IDOR) kwetsbaarheid in de profielbeheer-omgeving van een WooCommerce-winkel kan dit vertrouwen in één klap vernietigen. Als een plug-in voor adresbeheer of facturatie niet controleert wie de aanvrager is, kan een aanvaller de adresgegevens van willekeurige klanten inzien of zelfs aanpassen.

Hoe het lek zich manifesteert

In WooCommerce worden klantgegevens opgeslagen in de wp_usermeta tabel, gekoppeld aan een uniek user_id. Wanneer een klant zijn adres aanpast in de "/mijn-account/" omgeving, stuurt de browser een formulier naar de server.

Als een slecht geprogrammeerde add-on (bijvoorbeeld een plug-in voor een apart afleveradres of B2B-klantenprofielen) het user_id als een verborgen invoerveld in het formulier opneemt, ontstaat er een gevaarlijke situatie:

HTML
 
<input type="hidden" name="edit_user_profile_id" value="142" />

Een kwaadwillende klant met account-ID 500 kan de HTML-code van de pagina aanpassen, de waarde veranderen naar 142 (een willekeurige andere klant), en op "Opslaan" klikken. Als de server-side code de data verwerkt zonder te verifiëren of de ingelogde gebruiker daadwerkelijk ID 142 heeft, worden de adresgegevens van klant 142 overschreven met de data van de aanvaller.

Gevaren voor identiteitsfraude en diefstal

De gevolgen van dit type IDOR-lek zijn tweeledig:

  1. Datalek (Informatie-lekkage): De aanvaller kan de profielpagina herladen om de bestaande adresgegevens van andere klanten te bekijken (schending van de AVG/GDPR).

  2. Pakketdiefstal (Frauduleuze omleiding): De aanvaller kan het verzendadres van een klant wijzigen vlak voordat die klant een dure bestelling plaatst, waardoor het pakket per ongeluk naar de aanvaller wordt verzonden.

Hoe ontwikkelaars IDOR op profielen voorkomen

De oplossing is even simpel als essentieel: Gebruik nooit de gebruikers-ID die via een formulier of URL-parameter wordt meegestuurd. Gebruik in plaats daarvan altijd de ID van de actuele, geauthenticeerde sessie die veilig op de server is opgeslagen.

In WordPress-code vertaalt zich dit naar het exclusieve gebruik van get_current_user_id():

PHP
 
// ONVEILIGE AANPAK
$user_to_edit = intval($_POST['edit_user_profile_id']);
update_user_meta($user_to_edit, 'billing_address_1', sanitize_text_field($_POST['address']));

// VEILIGE AANPAK
$secure_user_id = get_current_user_id(); // Haalt ID rechtstreeks uit de veilige sessie-cookie
if ($secure_user_id > 0) {
    update_user_meta($secure_user_id, 'billing_address_1', sanitize_text_field($_POST['address']));
}

Advies voor site-beheerders

  • Controleer custom registratieformulieren: Als u plug-ins gebruikt om extra velden aan het registratie- of profielformulier van WooCommerce toe te voegen, zorg er dan voor dat deze plug-ins up-to-date zijn en goede recensies hebben op het gebied van veiligheid.

  • Penetratietesten: Laat uw ontwikkelaar of een externe security-expert regelmatig een "IDOR-check" uitvoeren op alle formulieren binnen de klantomgeving.