
CVE-2026-32475 O campo File Upload do Elementor Pro Forms trata a validação e o processamento de arquivos em dois loops separados, com tratamento diferente para entradas de upload vazias (UPLOAD_ERR_NO_FILE). Um atacante não autenticado pode enviar um multipart
O campo File Upload dos Formulários do Elementor Pro lida com validação e processamento de arquivo em dois loops separados, com tratamento diferente para entradas de upload vazias (UPLOAD_ERR_NO_FILE). Um atacante não autenticado pode enviar uma solicitação multipart com uma primeira parte de arquivo vazia seguida por um payload PHP para o mesmo campo, fazendo com que validation() retorne antecipadamente enquanto process_field() ainda move o arquivo PHP para um diretório público: wp-content/uploads/elementor/forms/.php
Obtém automaticamente o post_id, form_id e field_id da página alvo:
python poc.py -t http://localhost/wp --page-url "http://localhost/wp/?page_id=16" -c "whoami"
Ou:
python poc.py -t http://localhost/wp --page-id 16 -c "whoami"
Inicie uma sessão interativa:
python poc.py -t http://localhost/wp --page-id 16 -i
O núcleo da vulnerabilidade é a burla do mecanismo de upload de arquivo em si. Essa parte não difere se você realizar o teste em um laboratório local ou contra um servidor real: a primeira parte de arquivo vazia + payload PHP no campo de upload contorna a validação de extensão, mas o arquivo ainda é processado por process_field(). Demonstramos que o arquivo é gravado com sucesso, que é exatamente o que ele descreve.
Em relação ao caminho fixo do Laragon:
Isso serviu apenas para facilitar a verificação local.
No alvo real, o padrão de diretório é conhecido e fixo:
/wp-content/uploads/elementor/forms/
O que não é fixo é o nome final do arquivo.
O Elementor não mantém o nome original do arquivo. Em process_field(), o nome armazenado é gerado da seguinte forma:
Portanto, se você enviar shell.php, o nome do arquivo pode se tornar algo como:
66f3a1c2e9b47.php
dentro de:
/wp-content/uploads/elementor/forms/
uniqid() é baseado em tempo e não é um valor aleatório forte; ele é baseado aproximadamente no timestamp + microssegundos. Portanto, recuperar o arquivo remotamente torna-se um problema de descoberta de nome de arquivo, e não de upload.
Por exemplo, você pode usar uma janela de tempo baseada no cabeçalho Date do servidor e no tempo da solicitação, pesquisar em um intervalo estreito em torno do horário do upload ou recuperar a URL exata se o formulário enviar um e-mail contendo [all-fields].
Mantive o PoC focado em provar o problema central em si, que é o upload de arquivo não autenticado, de forma clara e direta. Explicar totalmente a recuperação remota do valor de uniqid() tornaria a demonstração muito mais longa do que o necessário para validar a vulnerabilidade em si.