
Product Input Fields for WooCommerce < 2.0.2 - 未认证任意文件上传
Tyche Softwares 的 Product Input Fields for WooCommerce 插件在字段的 accepted-types 设置为空时(其自身文档将其宣传为“接受所有文件”),不会验证上传的文件类型。未认证的访客可以在加入购物车时附加任意文件,完成结账,并在插件上传目录下检索该对象。在将该目录树作为 PHP 执行的主机上,同一路径即为远程代码执行。
| 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) |
| Vendor | Tyche Softwares |
| Product | Product Input Fields for WooCommerce (product-input-fields-for-woocommerce) |
| Affected | 2.0.0 至 2.0.1(2.0.2 之前的插件) |
| Patched | 2.0.2 |
| Related | CVE-2024-13359(通过 1.12.0 的有限 AFU) |
| CNA | WPScan |
本仓库包含 Abraxas Labs 的概念验证,仅供授权测试使用——供应商披露、实验室复现,或您已获得书面许可进行评估的主机。
我在本地 WooCommerce 商店上运行了该客户端,使用 Product Input Fields 2.0.1、访客结账加货到付款,以及一个 accepted types 为空的全局 File 字段。该脚本执行上传和结账的暂存;它不附带 webshell。
File 类型的商品输入字段通过 alg_wc_pif_global_* / alg_wc_pif_local_* 绑定到店面加入购物车表单。当 accepted file types 为空时,插件会存储访客提交的任何内容。订单成功后,文件会持久化到 wp-content/uploads/product_input_fields/ 下,通常命名为 {item_id}_{original_filename}。
当以下所有条件均满足时,站点会暴露:
在这些条件下,影响是以 Web 用户身份进行任意文件写入。如果上传目录可执行,那就是站点接管。
该客户端仅停留在店面。它不包含 PHP webshell 或反向 shell。
GET,收集 PIF 文件字段名称和 add-to-cart 商品 id。image/png)对加入购物车执行 POST。默认文件名为 pifx.php,以便实验室可以看到插件是否允许危险扩展名。该标记不是可执行的 PHP。/?wc-ajax=checkout 使用货到付款进行访客结账。redirect 则跟随,然后扫描 wp-content/uploads/product_input_fields/{1..499}_{name} 并 POST x 以查找 SHELL_OK 见证。仅当该见证返回时才打印 [ LIVE ]。CVE-2026-19089-WooCommerce-Tyche-Abraxas-Labs.py 是一个小型 Python 3 客户端:彩色 figlet 横幅,然后是上述四个步骤。它仅与您在命令行中传入的 URL 通信。
requests在 macOS 上使用 Homebrew Python(PEP 668)时,请使用 venv 而不是系统 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/
第三个参数设置上传的文件名;默认为 pifx.php。
如果参数少于两个,脚本会打印横幅和用法,然后以 1 退出。这是确认客户端启动的安全方式。
WooCommerce 启用访客结账和可用的支付网关(客户端发送 payment_method=cod),Product Input Fields 2.0.2 之前,以及一个已发布的商品,其 File 字段接受任何类型。针对 2.0.2+ 或具有严格允许列表的字段,该对象不应作为 .php 上传落地。
不要将此指向任何您不拥有或没有书面授权测试的主机。
wp-content/uploads/product_input_fields/(以及某些布局下的 woocommerce_uploads/alg_uploads/product_input_fields/),移除意外对象,并轮换 wp-admin 的密钥。仅供研究和教育使用。除非您获得托管此仓库的一方和目标系统所有者的明确书面许可,否则不要对任何主机运行、部署或使用此材料。
Abraxas Labs · abraxaslabs.tech · github.com/abraxas · @abraxas_null