Elementor Pro 4.2.2 schließt kritische Upload-Schwachstelle
Elementor Pro bis einschließlich Version 4.2.1 enthält eine kritische Schwachstelle für beliebige Datei-Uploads. Angreifer brauchen kein Benutzerkonto, um ausführbare PHP-Dateien auf eine verwundbare WordPress-Installation hochzuladen. Daraus kann Remote Code Execution entstehen, also die Ausführung von Code auf dem Server, bis hin zur vollständigen Übernahme der Website.
Sofort aktualisieren
Aktualisiere Elementor Pro umgehend auf Version 4.2.2 oder neuer. Betroffen sind alle Versionen bis einschließlich 4.2.1. Die Schwachstelle trägt die Kennung CVE-2026-32475 und erreicht einen CVSS-Wert von 9,8 von 10.
Welche Websites sind angreifbar?
Die Lücke betrifft Elementor Website Builder Pro, ein Premium-Plugin mit geschätzt sechs Millionen aktiven Installationen. Ein Angriff funktioniert nur, wenn eine veröffentlichte Seite ein Elementor-Pro-Form-Widget enthält, das mindestens ein nicht als erforderlich markiertes File-Upload-Feld besitzt.
Für den Angriff reicht ein Aufruf durch einen nicht angemeldeten Besucher. Das betroffene Formular verarbeitet die Übermittlung über die öffentlich erreichbare Methode ajax_send_form() der Klasse Ajax_Handler. Elementor Pro packt die vom Client gesendeten Formulardaten und hochgeladenen Dateien in ein Form_Record-Objekt und leitet sie anschließend durch Validierung und Verarbeitung.
Der Fehler in der Dateiprüfung
Bei File-Upload-Feldern übernimmt die Klasse ElementorProModulesFormsFieldsUpload die Prüfung in validation() und den eigentlichen Upload in process_field(). Der Fehler steckt in der Schleife von validation(): Trifft sie bei einem nicht erforderlichen Feld auf einen leeren Upload-Slot mit UPLOAD_ERR_NO_FILE, beendet return die gesamte Funktion.
foreach ( $files[ $id ] as $index => $file ) {
// Bei einem optionalen, leeren Slot beendet return die gesamte Validierung.
if ( ! $field['required'] && UPLOAD_ERR_NO_FILE === $file['error'] ) {
return;
}
if ( $field['required'] && UPLOAD_ERR_NO_FILE === $file['error'] ) {
$ajax_handler->add_error( $id, $upload_errors[ $file['error'] ] );
return;
}
if ( $file['error'] > UPLOAD_ERR_OK ) {
$ajax_handler->add_error( $id, $upload_errors[ $file['error'] ] );
return;
}
if ( ! $this->is_file_type_valid( $field, $file ) ) {
$ajax_handler->add_error( $id, esc_html__( 'This file type is not allowed.', 'elementor-pro' ) );
}
if ( ! $this->is_file_size_valid( $field, $file ) ) {
$ajax_handler->add_error( $id, esc_html__( 'This file exceeds the maximum allowed size.', 'elementor-pro' ) );
}
}An dieser Stelle müsste continue stehen. continue überspringt nur den leeren Eintrag und prüft danach die weiteren Dateien desselben Felds. return beendet dagegen alle folgenden Prüfungen. Elementor Pro prüft damit weder Dateiendung noch Dateityp und Dateigröße der verbleibenden Dateien.
So umgehen Angreifer die Validierung
Ein Angreifer sendet das Upload-Feld als Array mit zwei Einträgen. Der erste Eintrag bleibt leer und löst UPLOAD_ERR_NO_FILE aus. Dadurch bricht validation() vorzeitig ab. Der zweite Eintrag enthält eine PHP-Nutzlast mit einer vom Angreifer gewählten Dateiendung, die keine Prüfung mehr erreicht.
Die anschließende Methode process_field() überspringt leere Einträge korrekt mit continue. Sie verarbeitet daher die zweite, zuvor ungeprüfte Datei weiter. Dabei übernimmt sie die Erweiterung direkt aus dem vom Client übermittelten Dateinamen und legt die Datei im Upload-Verzeichnis ab.
foreach ( $files[ $id ] as $index => $file ) {
if ( UPLOAD_ERR_NO_FILE === $file['error'] ) {
continue;
}
$uploads_dir = $this->get_ensure_upload_dir();
$file_extension = pathinfo( $file['name'], PATHINFO_EXTENSION );
$filename = uniqid() . '.' . $file_extension;
$filename = wp_unique_filename( $uploads_dir, $filename );
$new_file = trailingslashit( $uploads_dir ) . $filename;
if ( is_dir( $uploads_dir ) && is_writable( $uploads_dir ) ) {
Plugin::instance()->php_api->move_uploaded_file(
$file['tmp_name'],
$new_file
);
}
}Eine Datei mit der Endung .php landet so direkt in /wp-content/uploads/elementor/forms/. Ruft der Angreifer diese Datei anschließend ab, kann der Server die darin enthaltene PHP-Nutzlast ausführen. Beliebige Datei-Uploads ermöglichen typischerweise Webshells und weitere Methoden, die letztlich eine vollständige Kompromittierung der Website erlauben.
Zeitlicher Ablauf
- 24. Juli 2026: Die Schwachstelle für nicht authentifizierte beliebige Datei-Uploads in Elementor Pro wurde gemeldet.
- 27. Juli 2026: Der Bericht und ein Proof of Concept wurden validiert, anschließend ging die Meldung an Elementor.
- 2. August 2026: Elementor teilte mit, dass ein weiterer Sicherheitsforscher dieselbe Schwachstelle gemeldet hatte und an einem Patch gearbeitet wird.
- 19. August 2026: Elementor veröffentlichte die vollständig korrigierte Version 4.2.2.
Jetzt Version prüfen und aktualisieren
Prüfe in deiner WordPress-Administration die installierte Version von Elementor Pro. Läuft noch 4.2.1 oder eine ältere Ausgabe, installiere sofort Version 4.2.2 oder neuer. Kontrolliere besonders Websites mit veröffentlichten Formularen, deren File-Upload-Felder nicht erforderlich sind, denn genau diese Konfiguration ist Voraussetzung für den beschriebenen Angriff.
Markus Weber
Senior-Entwickler, Spezialist für Datenbankoptimierung und Performance-Tuning. PostgreSQL und Redis sind meine Favoriten. Ich liebe es, komplexe Probleme in einfache Lösungen zu zerlegen.
Alle Beiträge