
Repositorio de investigación para CVE-2026-19089, una vulnerabilidad de ejecución remota de comandos en WooCommerce Product Input Fields de Tyche Softwares. Contiene un borrador de script de investigación y notas para pruebas autorizadas en laboratorio.

Product Input Fields for WooCommerce < 2.0.2 - carga arbitraria de archivos sin autenticación
El plugin Product Input Fields for WooCommerce de Tyche Softwares no valida los tipos de archivo subidos cuando la configuración de tipos aceptados del campo se deja vacía (su propia documentación lo anuncia como "aceptar todos los archivos"). Un invitado no autenticado puede adjuntar un archivo arbitrario al añadir al carrito, completar el checkout y recuperar el objeto bajo el directorio de subidas del plugin. En hosts que ejecutan ese árbol como PHP, la misma ruta es ejecución remota de código.
| CVE | CVE-2026-19089 |
| CWE | CWE-434: Unrestricted Upload of File with Dangerous Type |
| CVSS 3.1 | 9.8 Crítico (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H) |
| Vendor | Tyche Softwares |
| Product | Product Input Fields for WooCommerce (product-input-fields-for-woocommerce) |
| Affected | 2.0.0 hasta 2.0.1 (plugin anterior a 2.0.2) |
| Patched | 2.0.2 |
| Related | CVE-2024-13359 (AFU limitado hasta 1.12.0) |
| CNA | WPScan |
Este repositorio contiene una prueba de concepto de Abraxas Labs para pruebas autorizadas únicamente - divulgación al proveedor, reproducción en laboratorio o un host para el que tenga permiso escrito de evaluación.
Ejecuté el cliente contra una tienda WooCommerce local con Product Input Fields 2.0.1, checkout de invitado más pago contra reembolso, y un campo File global cuyos tipos aceptados estaban en blanco. El script prepara la subida y el checkout; no incluye un webshell.
Un campo de entrada de producto de tipo File se vincula al formulario de añadir al carrito de la tienda como alg_wc_pif_global_* / alg_wc_pif_local_*. Cuando los tipos de archivo aceptados están vacíos, el plugin almacena lo que el invitado haya enviado. Tras un pedido exitoso, el archivo se persiste bajo wp-content/uploads/product_input_fields/, normalmente nombrado {item_id}_{original_filename}.
Los sitios están expuestos cuando todas estas condiciones son verdaderas:
Bajo esas condiciones, el impacto es escritura arbitraria de archivos como el usuario web. Si el directorio de subidas es ejecutable, eso es toma de control del sitio.
El cliente permanece en la tienda. No incluye un webshell PHP ni un reverse shell.
GET a la URL del producto, recopilar los nombres de los campos de archivo PIF y el id de producto de add-to-cart.POST a add-to-cart con un marcador PNG benigno (image/png) bajo el nombre del campo PIF. El nombre de archivo predeterminado es pifx.php para que un laboratorio pueda ver si el plugin permitió una extensión peligrosa. El marcador no es PHP ejecutable./?wc-ajax=checkout con pago contra reembolso.redirect de checkout si está presente, luego barrer wp-content/uploads/product_input_fields/{1..499}_{name} y POST x buscando el testigo SHELL_OK. [ LIVE ] se imprime solo cuando ese testigo regresa.CVE-2026-19089-WooCommerce-Tyche-Abraxas-Labs.py es un pequeño cliente Python 3: banner figlet en color, luego los cuatro pasos anteriores. Solo se comunica con las URLs que se pasan en la línea de comandos.
requestsEn macOS con Homebrew Python (PEP 668), use un venv en lugar de un pip install del sistema:
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 tercer argumento establece el nombre de archivo subido; el valor predeterminado es pifx.php.
Con menos de dos argumentos, el script imprime el banner y el uso, luego sale con 1. Esa es una forma segura de confirmar que el cliente arranca.
WooCommerce con checkout de invitado y una pasarela utilizable (el cliente envía payment_method=cod), Product Input Fields anterior a 2.0.2, y un producto publicado cuyo campo File acepte cualquier tipo. Contra 2.0.2+ o un campo con una lista de permitidos estricta, el objeto no debería aterrizar como una subida .php.
No apunte esto a ningún host que no posea o para el que no tenga autorización escrita de probar.
wp-content/uploads/product_input_fields/ (y woocommerce_uploads/alg_uploads/product_input_fields/ en algunas configuraciones), elimine objetos inesperados y rote los secretos de wp-admin.Solo para uso investigativo y educativo. No ejecute, despliegue ni use este material contra ningún host a menos que tenga permiso escrito explícito tanto de la parte que aloja este repositorio como del propietario de los sistemas objetivo.
Abraxas Labs · abraxaslabs.tech · github.com/abraxas · @abraxas_null