
CVE-2026-32475 Das Datei-Upload-Feld der Elementor-Pro-Formulare führt die Validierung und Dateiverarbeitung in zwei getrennten Schleifen mit unterschiedlicher Behandlung leerer Upload-Einträge (UPLOAD_ERR_NO_FILE) durch. Ein nicht authentifizierter Angreifer kann einen Multipart-
Das Datei-Upload-Feld des Elementor Pro Forms verarbeitet Validierung und Dateiverarbeitung in zwei getrennten Schleifen mit unterschiedlicher Behandlung leerer Upload-Einträge (UPLOAD_ERR_NO_FILE). Ein nicht authentifizierter Angreifer kann eine Multipart- Anfrage mit einem leeren ersten Dateiteil gefolgt von einem PHP-Payload für dasselbe Feld senden, wodurch validation() frühzeitig zurückkehrt, während process_field() die PHP-Datei trotzdem in ein öffentliches Verzeichnis verschiebt: wp-content/uploads/elementor/forms/.php
Ruft automatisch post_id, form_id und field_id von der Zielseite ab:
python poc.py -t http://localhost/wp --page-url "http://localhost/wp/?page_id=16" -c "whoami"
Oder:
python poc.py -t http://localhost/wp --page-id 16 -c "whoami"
Startet eine interaktive Sitzung:
python poc.py -t http://localhost/wp --page-id 16 -i
Der Kern der Schwachstelle ist die Umgehung des Datei-Upload-Mechanismus selbst. Dieser Teil unterscheidet sich nicht davon, ob du den Test in einem lokalen Labor oder gegen einen echten Server durchführst: Der leere erste Dateiteil plus PHP-Payload im Upload-Feld umgeht die Erweiterungsvalidierung, dennoch wird die Datei von process_field() weiterverarbeitet. Wir haben demonstriert, dass die Datei erfolgreich geschrieben wird, was genau das ist, was beschrieben wird.
Was den fest verdrahteten Laragon-Pfad betrifft:
Dies diente lediglich der lokalen Verifizierung.
Auf dem echten Zielsystem ist das Verzeichnismuster bekannt und fest:
/wp-content/uploads/elementor/forms/
Was nicht fest ist, ist der endgültige Dateiname.
Elementor behält den ursprünglichen Dateinamen nicht bei. In process_field() wird der gespeicherte Dateiname wie folgt generiert:
Wenn du also shell.php hochlädst, könnte der Dateiname etwa so aussehen:
66f3a1c2e9b47.php
innerhalb von:
/wp-content/uploads/elementor/forms/
uniqid() ist zeitbasiert und kein starker Zufallswert; es basiert ungefähr auf dem Zeitstempel + Mikrosekunden. Das Wiederherstellen der Datei aus der Ferne wird daher zu einem Problem der Dateinamenfindung und nicht zu einem Upload-Problem.
Du kannst beispielsweise ein Zeitfenster basierend auf dem Date-Header des Servers und dem Anfragezeitpunkt nutzen, in einem engen Bereich um den Upload-Zeitpunkt suchen oder die exakte URL wiederherstellen, wenn das Formular eine E-Mail mit [all-fields] sendet.
Ich habe den PoC darauf fokussiert, das Kernproblem selbst zu beweisen, nämlich den nicht authentifizierten Datei-Upload, klar und direkt. Die vollständige Erklärung der Remote-Wiederherstellung des uniqid()-Werts würde die Demonstration viel länger machen, als zur Validierung der Schwachstelle selbst nötig ist.