
Dépôt de recherche pour CVE-2026-19089, une vulnérabilité d'exécution de commande à distance dans WooCommerce Product Input Fields de Tyche Softwares. Contient un script de recherche préliminaire et des notes pour des tests en laboratoire autorisés.

Product Input Fields for WooCommerce < 2.0.2 - téléversement de fichier arbitraire non authentifié
Le plugin Product Input Fields for WooCommerce de Tyche Softwares ne valide pas les types de fichiers téléversés lorsque le paramètre des types acceptés du champ est laissé vide (sa propre documentation le présente comme « accepter tous les fichiers »). Un invité non authentifié peut joindre un fichier arbitraire lors de l'ajout au panier, finaliser la commande et récupérer l'objet dans le répertoire de téléversement du plugin. Sur les hôtes qui exécutent cette arborescence en PHP, ce même chemin constitue une exécution de code à distance.
| CVE | CVE-2026-19089 |
| CWE | CWE-434: Unrestricted Upload of File with Dangerous Type |
| CVSS 3.1 | 9.8 Critique (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H) |
| Éditeur | Tyche Softwares |
| Produit | Product Input Fields for WooCommerce (product-input-fields-for-woocommerce) |
| Affecté | 2.0.0 jusqu'à 2.0.1 (plugin antérieur à 2.0.2) |
| Corrigé | 2.0.2 |
| Associé | CVE-2024-13359 (AFU limité jusqu'à 1.12.0) |
| CNA | WPScan |
Ce dépôt contient une preuve de concept d'Abraxas Labs destinée exclusivement à des tests autorisés - divulgation à l'éditeur, reproduction en laboratoire, ou un hôte pour lequel vous disposez d'une autorisation écrite d'évaluation.
J'ai exécuté le client contre une boutique WooCommerce locale avec Product Input Fields 2.0.1, la commande en tant qu'invité plus le paiement à la livraison, et un champ File global dont les types acceptés étaient vides. Le script prépare le téléversement et la commande ; il ne fournit pas de webshell.
Un champ de saisie de produit de type File est lié au formulaire d'ajout au panier de la boutique sous la forme alg_wc_pif_global_* / alg_wc_pif_local_*. Lorsque les types de fichiers acceptés sont vides, le plugin stocke tout ce que l'invité a envoyé. Après une commande réussie, le fichier est conservé sous wp-content/uploads/product_input_fields/, généralement nommé {item_id}_{original_filename}.
Les sites sont exposés lorsque toutes les conditions suivantes sont réunies :
Dans ces conditions, l'impact est une écriture de fichier arbitraire avec les privilèges de l'utilisateur web. Si le répertoire de téléversement est exécutable, cela équivaut à une prise de contrôle du site.
Le client reste sur la boutique. Il n'inclut ni webshell PHP ni reverse shell.
GET sur l'URL du produit, collecte des noms de champs PIF file et de l'identifiant produit add-to-cart.POST sur add-to-cart avec un marqueur PNG bénin (image/png) sous le nom du champ PIF. Le nom de fichier par défaut est pifx.php afin qu'un laboratoire puisse voir si le plugin a autorisé une extension dangereuse. Le marqueur n'est pas du PHP exécutable./?wc-ajax=checkout avec paiement à la livraison.redirect de commande si présente, puis balayage de wp-content/uploads/product_input_fields/{1..499}_{name} et POST x à la recherche du témoin SHELL_OK. [ LIVE ] ne s'affiche que lorsque ce témoin est renvoyé.CVE-2026-19089-WooCommerce-Tyche-Abraxas-Labs.py est un petit client Python 3 : bannière figlet colorée, puis les quatre étapes ci-dessus. Il ne communique qu'avec les URL que vous passez en ligne de commande.
requestsSur macOS avec le Python de Homebrew (PEP 668), utilisez un venv plutôt qu'un pip install système :
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/
Un troisième argument définit le nom du fichier téléversé ; la valeur par défaut est pifx.php.
Avec moins de deux arguments, le script affiche la bannière et l'utilisation, puis se termine avec le code 1. C'est un moyen sûr de confirmer que le client démarre.
WooCommerce avec commande en tant qu'invité et une passerelle utilisable (le client envoie payment_method=cod), Product Input Fields antérieur à 2.0.2, et un produit publié dont le champ File accepte tout type. Face à 2.0.2+ ou à un champ doté d'une liste d'autorisation stricte, l'objet ne devrait pas aboutir en tant que téléversement .php.
Ne pointez pas ceci vers un hôte que vous ne possédez pas ou pour lequel vous ne disposez pas d'une autorisation écrite de test.
wp-content/uploads/product_input_fields/ (et woocommerce_uploads/alg_uploads/product_input_fields/ selon certaines configurations), supprimez les objets inattendus et renouvelez les secrets pour wp-admin.Usage de recherche et éducatif uniquement. N'exécutez pas, ne déployez pas et n'utilisez pas ce contenu contre un hôte sans autorisation écrite explicite de la part à la fois de la partie hébergeant ce dépôt et du propriétaire des systèmes cibles.
Abraxas Labs · abraxaslabs.tech · github.com/abraxas · @abraxas_null