
Repositório de pesquisa para CVE-2026-19089, uma vulnerabilidade de execução remota de comandos em WooCommerce Product Input Fields da Tyche Softwares. Contém script de pesquisa preliminar e notas para testes autorizados em laboratório.

Product Input Fields for WooCommerce < 2.0.2 - upload arbitrário de arquivo sem autenticação
O plugin Product Input Fields for WooCommerce da Tyche Softwares não valida os tipos de arquivo enviados quando a configuração de tipos aceitos do campo é deixada vazia (sua própria documentação anuncia isso como "aceitar todos os arquivos"). Um visitante não autenticado pode anexar um arquivo arbitrário ao adicionar ao carrinho, concluir o checkout e recuperar o objeto no diretório de upload do plugin. Em hosts que executam essa árvore como PHP, o mesmo caminho é execução 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) |
| Fornecedor | Tyche Softwares |
| Produto | Product Input Fields for WooCommerce (product-input-fields-for-woocommerce) |
| Afetado | 2.0.0 até 2.0.1 (plugin anterior a 2.0.2) |
| Corrigido | 2.0.2 |
| Relacionado | CVE-2024-13359 (AFU limitado até 1.12.0) |
| CNA | WPScan |
Este repositório contém uma prova de conceito do Abraxas Labs para testes autorizados apenas - divulgação ao fornecedor, reprodução em laboratório ou um host para o qual você tenha permissão escrita de avaliação.
Executei o cliente contra uma loja WooCommerce local com Product Input Fields 2.0.1, checkout de visitante mais Pagamento na Entrega, e um campo File global cujos tipos aceitos estavam em branco. O script prepara o upload e o checkout; ele não envia um webshell.
Um campo de entrada de produto do tipo File é vinculado ao formulário de adicionar ao carrinho da loja como alg_wc_pif_global_* / alg_wc_pif_local_*. Quando os tipos de arquivo aceitos estão vazios, o plugin armazena o que o visitante enviou. Após um pedido bem-sucedido, o arquivo é persistido em wp-content/uploads/product_input_fields/, normalmente nomeado {item_id}_{original_filename}.
Os sites ficam expostos quando todas estas condições são verdadeiras:
Nessas condições, o impacto é escrita arbitrária de arquivo como o usuário web. Se o diretório de upload for executável, isso significa tomada de controle do site.
O cliente permanece na loja. Ele não inclui um webshell PHP nem um reverse shell.
GET na URL do produto, coleta os nomes dos campos de arquivo do PIF e o id do produto em add-to-cart.POST de adicionar ao carrinho com um marcador PNG benigno (image/png) sob o nome do campo PIF. O nome de arquivo padrão é pifx.php para que um laboratório possa ver se o plugin permitiu uma extensão perigosa. O marcador não é PHP executável./?wc-ajax=checkout com Pagamento na Entrega.redirect de checkout, se presente, depois varre wp-content/uploads/product_input_fields/{1..499}_{name} e POST x procurando pela testemunha SHELL_OK. [ LIVE ] só é impresso quando essa testemunha retorna.CVE-2026-19089-WooCommerce-Tyche-Abraxas-Labs.py é um pequeno cliente Python 3: banner figlet colorido, depois os quatro passos acima. Ele se comunica apenas com as URLs que você passa na linha de comando.
requestsNo macOS com Homebrew Python (PEP 668), use um venv em vez de um pip install do 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/
Um terceiro argumento define o nome do arquivo enviado; o padrão é pifx.php.
Com menos de dois argumentos, o script imprime o banner e as instruções de uso, depois sai com 1. Essa é uma forma segura de confirmar que o cliente inicia.
WooCommerce com checkout de visitante e um gateway utilizável (o cliente envia payment_method=cod), Product Input Fields anterior a 2.0.2, e um produto publicado cujo campo File aceita qualquer tipo. Contra 2.0.2+ ou um campo com uma lista de permissões restrita, o objeto não deve ser armazenado como um upload .php.
Não aponte isto para nenhum host que você não possua ou para o qual não tenha autorização escrita de teste.
wp-content/uploads/product_input_fields/ (e woocommerce_uploads/alg_uploads/product_input_fields/ em alguns layouts), remova objetos inesperados e rotacione os segredos de wp-admin.Apenas para uso em pesquisa e educacional. Não execute, implante ou use este material contra qualquer host, a menos que você tenha permissão escrita explícita tanto da parte que hospeda este repositório quanto do proprietário dos sistemas alvo.
Abraxas Labs · abraxaslabs.tech · github.com/abraxas · @abraxas_null