
Forschungs-Repository für CVE-2026-19089, eine Schwachstelle zur Remote-Codeausführung in WooCommerce Product Input Fields von Tyche Softwares. Enthält einen Entwurf des Forschungs-Skripts und Notizen für autorisierte Labortests.

Product Input Fields for WooCommerce < 2.0.2 – unauthentifizierter beliebiger Datei-Upload
Das Plugin Product Input Fields for WooCommerce von Tyche Softwares validiert hochgeladene Dateitypen nicht, wenn die Einstellung für akzeptierte Typen des Feldes leer bleibt (die eigene Dokumentation bewirbt dies als „alle Dateien akzeptieren"). Ein unauthentifizierter Gast kann beim Hinzufügen zum Warenkorb eine beliebige Datei anhängen, den Checkout abschließen und das Objekt im Upload-Verzeichnis des Plugins abrufen. Auf Hosts, die diesen Verzeichnisbaum als PHP ausführen, ist derselbe Pfad eine Remote-Code-Ausführung.
| CVE | CVE-2026-19089 |
| CWE | CWE-434: Unrestricted Upload of File with Dangerous Type |
| CVSS 3.1 | 9.8 Critical (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H) |
| Hersteller | Tyche Softwares |
| Produkt | Product Input Fields for WooCommerce (product-input-fields-for-woocommerce) |
| Betroffen | 2.0.0 bis 2.0.1 (Plugin vor 2.0.2) |
| Gepatcht | 2.0.2 |
| Verwandt | CVE-2024-13359 (eingeschränkter AFU bis 1.12.0) |
| CNA | WPScan |
Dieses Repository enthält einen Proof-of-Concept von Abraxas Labs für ausschließlich autorisierte Tests – Vendor-Disclosure, Lab-Reproduktion oder einen Host, für dessen Bewertung Sie eine schriftliche Genehmigung haben.
Ich habe den Client gegen einen lokalen WooCommerce-Shop mit Product Input Fields 2.0.1, Gast-Checkout plus Nachnahme und einem globalen Datei-Feld mit leerer Liste akzeptierter Typen ausgeführt. Das Skript bereitet den Upload und den Checkout vor; es liefert keine Webshell mit.
Ein Produkt-Eingabefeld vom Typ Datei wird als alg_wc_pif_global_* / alg_wc_pif_local_* an das Add-to-Cart-Formular des Storefronts gebunden. Wenn die akzeptierten Dateitypen leer sind, speichert das Plugin alles, was der Gast übermittelt hat. Nach einer erfolgreichen Bestellung wird die Datei unter wp-content/uploads/product_input_fields/ persistiert, typischerweise benannt als {item_id}_{original_filename}.
Websites sind exponiert, wenn alle der folgenden Bedingungen zutreffen:
Unter diesen Bedingungen ist die Auswirkung ein beliebiger Dateischreibvorgang als der Web-Benutzer. Wenn das Upload-Verzeichnis ausführbar ist, bedeutet das die Übernahme der Website.
Der Client bleibt im Storefront. Er enthält keine PHP-Webshell und keine Reverse Shell.
GET auf die Produkt-URL, Sammeln der PIF-Dateifeldnamen und der add-to-cart-Produkt-ID.POST add-to-cart mit einem harmlosen PNG-Marker (image/png) unter dem PIF-Feldnamen. Der Standarddateiname ist pifx.php, damit ein Lab sehen kann, ob das Plugin eine gefährliche Erweiterung zugelassen hat. Der Marker ist kein ausführbares PHP./?wc-ajax=checkout mit Nachnahme.redirect folgen, falls vorhanden, dann wp-content/uploads/product_input_fields/{1..499}_{name} durchsuchen und POST x senden, um nach dem SHELL_OK-Witness zu suchen. [ LIVE ] wird nur ausgegeben, wenn dieser Witness zurückkommt.CVE-2026-19089-WooCommerce-Tyche-Abraxas-Labs.py ist ein kleiner Python-3-Client: farbiges Figlet-Banner, dann die vier obigen Schritte. Er kommuniziert nur mit den URLs, die Sie auf der Kommandozeile übergeben.
requestsUnter macOS mit Homebrew-Python (PEP 668) verwenden Sie ein venv statt eines systemweiten pip install:
python3 -m venv .venv
.venv/bin/pip install requests
CVE-2026-19089-WooCommerce-Tyche-Abraxas-Labs.py <base_url> <product_url> [shell_name]
.venv/bin/python3 CVE-2026-19089-WooCommerce-Tyche-Abraxas-Labs.py \
https://shop.example \
https://shop.example/product/demo/
Ein drittes Argument legt den hochgeladenen Dateinamen fest; der Standard ist pifx.php.
Bei weniger als zwei Argumenten gibt das Skript das Banner und die Verwendung aus und beendet sich mit 1. Das ist eine sichere Möglichkeit, um zu bestätigen, dass der Client startet.
WooCommerce mit Gast-Checkout und einem nutzbaren Gateway (der Client sendet payment_method=cod), Product Input Fields vor 2.0.2 und ein veröffentlichtes Produkt, dessen Datei-Feld jeden Typ akzeptiert. Gegen 2.0.2+ oder ein Feld mit einer engen Allow-List sollte das Objekt nicht als .php-Upload landen.
Richten Sie dies nicht auf einen Host, den Sie nicht besitzen oder für dessen Test Sie keine schriftliche Autorisierung haben.
wp-content/uploads/product_input_fields/ (und woocommerce_uploads/alg_uploads/product_input_fields/ bei einigen Layouts), entfernen Sie unerwartete Objekte und rotieren Sie die Secrets für wp-admin.Nur für Forschungs- und Bildungszwecke. Führen Sie dieses Material nicht aus, setzen Sie es nicht ein und verwenden Sie es nicht gegen einen Host, es sei denn, Sie haben die ausdrückliche schriftliche Genehmigung sowohl der Partei, die dieses Repository hostet, als auch des Eigentümers der Zielsysteme.
Abraxas Labs · abraxaslabs.tech · github.com/abraxas · @abraxas_null