Server-Side Request Forgery (SSRF) is een kwetsbaarheid waarbij een aanvaller de server van uw webshop kan dwingen om ongewenste HTTP-verzoeken te sturen. Binnen WooCommerce is er een specifiek risico verbonden aan PDF-factuur plug-ins die klanten toestaan om aangepaste HTML-sjablonen te gebruiken. Als de PDF-engine (zoals Dompdf of iText) afbeeldingen of stylesheets van externe URL's ophaalt zonder restricties, kan dit leiden tot SSRF en informatie-lekkage uit het interne netwerk.
Het mechanisme van PDF-gebaseerde SSRF
Wanneer WooCommerce een factuur genereert, zet de PDF-engine HTML-code om naar een PDF-document. Stel dat een klant zijn bedrijfsnaam of een aangepast veld in de checkout invult met een HTML-tag die verwijst naar een interne serverbron:
<img src="http://127.0.0.1:8080/internal-status-dashboard" />
Wanneer de beheerder de factuur genereert, leest de PDF-engine deze HTML-tag. De server zal proberen verbinding te maken met localhost op poort 8080 om de "afbeelding" op te halen. De PDF-engine zal de HTML van het interne dashboard vervolgens renderen binnen het PDF-document. De aanvaller hoeft de factuur daarna alleen maar te downloaden om de geheime data van het interne netwerk te bekijken.
Hoe ontwikkelaars PDF SSRF voorkomen
Ontwikkelaars van WooCommerce PDF-extensies moeten de configuratie van de onderliggende PDF-bibliotheek strikt dicteren.
-
Schakel het laden van externe protocollen uit: Configureer de PDF-engine zo dat deze alleen lokale bestanden uit specifieke mappen mag inladen.
-
Gebruik chroot-restricties: Beperk de bestandsrechten van de PDF-engine tot uitsluitend de actieve thema- of plug-inmap.
// Voorbeeld configuratie voor Dompdf
use Dompdf\Options;
use Dompdf\Dompdf;
$options = new Options();
$options->set('isRemoteEnabled', false); // Blokkeer het laden van externe afbeeldingen via HTTP
$options->set('chroot', WP_CONTENT_DIR . '/uploads/pdf-templates/'); // Beperk bestandstoegang
$dompdf = new Dompdf($options);
Advies voor site-beheerders
-
Beperk HTML-invoer in de checkout: Zorg ervoor dat alle invoervelden in de WooCommerce checkout (zoals bedrijfsnaam, adres en bestelnotities) strikt worden gesaniseerd en dat HTML-tags volledig worden gestript voordat ze in de database worden opgeslagen.
-
Monitoor serververkeer: Gebruik netwerkbeveiligingstools om te voorkomen dat de webserver uitgaande verzoeken start naar gevoelige interne IP-adressen (zoals het cloud-metadata endpoint
169.254.169.254).
