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:

HTML
 
<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.

PHP
 
// 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).