
Laut einem aktuellen Bericht des Sicherheitsanbieters Wordfence sind mehr als 10.000 WordPress-Websites von schwerwiegenden Sicherheitslücken im Plugin „HT Contact Form“ betroffen.
Die erste Schwachstelle wurde am 24. Juni 2025 gemeldet. Sie erlaubt es nicht authentifizierten Angreifern, beliebige Dateien auf betroffenen Websites hochzuladen oder zu löschen – darunter auch kritische Konfigurationsdateien wie „wp-config.php“. Eine erfolgreiche Ausnutzung kann zur vollständigen Kompromittierung einer Website führen.
Am 4. Juli 2025 wurde eine weitere Sicherheitslücke bekannt: Diese ermöglicht das Verschieben beliebiger Dateien – ebenfalls ohne Authentifizierung. Auch hier könnten Angreifer zentrale Dateien manipulieren, um sich unbefugten Zugriff zu verschaffen oder die Seite funktionsunfähig zu machen.
Nach der Kontaktaufnahme durch Wordfence am 8. Juli hat sich das verantwortliche Entwicklerteam von HasTech IT am Folgetag beim Wordfence Vulnerability Management Portal registriert. Bereits am 13. Juli 2025 wurde ein Sicherheitspatch veröffentlicht.
Wordfence rät allen Nutzern des Plugins dringend, auf die aktuellste Version 2.2.2 zu aktualisieren, um ihre Websites vor potenziellen Angriffen zu schützen.
HT-Kontaktformular-Widget für Elementor Page Builder, Gutenberg-Blöcke und Formular-Builder. <= 2.2.1 – Unauthentifizierter Upload beliebiger Dateien.
CVSS-Bewertung: 9.8 (kritisch)
CVE-ID
Betroffene Versionen
<= 2.2.1
Gepatchte Version
2.2.2
Betroffene Software
HT Kontaktformular-Widget für Elementor Page Builder & Gutenberg Blocks & Form Builder.
Betroffene Software-Slug
Das HT Contact Form Widget For Elementor Page Builder & Gutenberg Blocks & Form Builder-Plugin für WordPress ist aufgrund einer fehlenden Dateitypüberprüfung in der Funktion temp_file_upload() in allen Versionen bis einschließlich 2.2.1 anfällig für das Hochladen beliebiger Dateien. Dadurch können nicht authentifizierte Angreifer beliebige Dateien auf den Server der betroffenen Website hochladen, was die Ausführung von Remote-Code ermöglichen kann.
HT-Kontaktformular-Widget für Elementor Page Builder, Gutenberg-Blöcke und Formular-Builder. <= 2.2.1 – Unauthentifizierte Löschung beliebiger Dateien.
CVSS-Bewertung: 9.1 (kritisch)
CVE-ID
Betroffene Versionen
<= 2.2.1
Gepatchte Version
2.2.2
Betroffene Software
HT Kontaktformular-Widget für Elementor Page Builder & Gutenberg Blocks & Form Builder.
Betroffene Software-Slug
Das HT Contact Form Widget For Elementor Page Builder & Gutenberg Blocks & Form Builder-Plugin für WordPress ist aufgrund einer unzureichenden Dateipfadvalidierung in der Funktion temp_file_delete() in allen Versionen bis einschließlich 2.2.1 anfällig für das Löschen beliebiger Dateien. Dadurch können nicht authentifizierte Angreifer beliebige Dateien auf dem Server löschen, was leicht zur Ausführung von Remote-Code führen kann, wenn die richtige Datei gelöscht wird (z. B. wp-config.php).
HT-Kontaktformular-Widget für Elementor Page Builder, Gutenberg-Blöcke und Formular-Builder. <= 2.2.1 – Verzeichnisdurchquerung zum Verschieben beliebiger Dateien.
CVSS-Bewertung: 9.1 (kritisch)
CVE-ID
Betroffene Versionen
<= 2.2.1
Gepatchte Version
2.2.2
Betroffene Software
HT Kontaktformular-Widget für Elementor Page Builder & Gutenberg Blocks & Form Builder.
Betroffene Software-Slug
Das HT Contact Form Widget für Elementor Page Builder & Gutenberg Blocks & Form Builder-Plugin für WordPress ist aufgrund einer unzureichenden Dateipfadvalidierung in der Funktion handle_files_upload() in allen Versionen bis einschließlich 2.2.1 anfällig für das Verschieben beliebiger Dateien. Dadurch können nicht authentifizierte Angreifer beliebige Dateien auf dem Server verschieben, was leicht zur Ausführung von Remote-Code führen kann, wenn die richtige Datei verschoben wird (z. B. wp-config.php).
Technische Analyse Nr. 1: Beliebiger Datei-Upload
Eine Untersuchung des Codes zeigt, dass das Plugin die Funktion temp_file_upload() in der Klasse Ajax verwendet, um temporäre Datei-Uploads über AJAX zu verarbeiten.
|
59
60
61
62
63
64
65
66
67
68
69
|
public function temp_file_upload() { check_ajax_referer('ht_form_ajax_nonce', '_wpnonce'); $file = $_FILES['ht_form_file']; // Check if file is present if (!isset($file)) { wp_send_json_error('No file uploaded.'); } return $this->file_manager->temp_file_upload($file);} |
Diese Funktion ruft die Funktion temp_file_upload() in der Klasse FileManager auf, die die Datei mit der Funktion move_uploaded_file() in den temporären Ordner hochlädt.
|
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
public function temp_file_upload($file) { $destination = "{$this->dir}/temp"; $this->maybe_create_directories($destination); // Validate file $validation = $this->validate($file); if (!$validation['valid']) { wp_send_json_error($validation['message']); return; } // Process the file $filename = $this->process_filename($file['name']); $file_path = "{$destination}/$filename"; // Check if directory is writable if (!is_writable($destination)) { wp_send_json_error("Directory is not writable: {$destination}"); return; } // Move file to temporary directory if (move_uploaded_file($file['tmp_name'], $file_path)) { wp_send_json_success([ 'file_id' => $filename, 'file_name' => $file['name'], 'file_size' => $file['size'] ]); return; } else { $upload_error = error_get_last(); wp_send_json_error('Failed to save uploaded file. Error: ' . ($upload_error ? $upload_error['message'] : 'Unknown error')); return; }} |
Darüber hinaus umfasst die Funktion in der anfälligen Version keine Überprüfung des Dateityps oder der Dateiendung. Das bedeutet, dass nicht nur sichere Dateitypen hochgeladen werden können, sondern auch .php-Dateien. Die Datei wird in den WordPress-Upload-Ordner hochgeladen, auf den standardmäßig öffentlich zugegriffen werden kann. Dadurch können nicht authentifizierte Angreifer beliebigen bösartigen PHP-Code hochladen und anschließend auf die Datei zugreifen, um eine Remote-Code-Ausführung auf dem Server auszulösen.
Wie bei allen Schwachstellen, die das Hochladen beliebiger Dateien ermöglichen, kann dies durch die Verwendung von Webshells und anderen Techniken zur vollständigen Kompromittierung der Website führen.
Der Patch
Der Hersteller hat dieses Problem behoben, indem er eine Dateityp-Prüfung mit der Funktion wp_check_filetype() in der Funktion temp_file_upload() hinzugefügt hat. Dadurch wird sichergestellt, dass nur sichere Dateitypen hochgeladen werden können.
|
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
public function temp_file_upload($file) { $destination = "{$this->dir}/temp"; $this->maybe_create_directories($destination); // Validate file $validation = $this->validate($file); if (!$validation['valid']) { wp_send_json_error($validation['message']); return; } // Process the file $filename = $this->process_filename($file['name']); $file_path = "{$destination}/$filename"; // File type validation check $validate = wp_check_filetype( $filename ); if ($validate['type'] === false) { wp_send_json_error('Invalid file type.'); return; } // Check if directory is writable if (!is_writable($destination)) { wp_send_json_error("Directory is not writable: {$destination}"); return; } // Move file to temporary directory if (move_uploaded_file($file['tmp_name'], $file_path)) { |
Technische Analyse Nr. 2: Willkürliche Dateilöschung
Eine Untersuchung des Codes zeigt, dass das Plugin die Funktion temp_file_delete() in der Klasse Ajax verwendet, um temporäre Dateien über AJAX zu löschen.
|
74
75
76
77
78
79
80
81
82
83
84
85
86
|
public function temp_file_delete() { check_ajax_referer('ht_form_ajax_nonce', '_wpnonce'); $file_id = isset($_POST['ht_form_file_id']) ? sanitize_text_field(wp_unslash($_POST['ht_form_file_id'])) : ''; if (!$file_id) { wp_send_json_error('No file ID provided'); } if ($this->file_manager->temp_file_delete($file_id)) { wp_send_json_success(); } else { wp_send_json_error('Failed to delete file'); }} |
Diese Funktion ruft die Funktion temp_file_delete() in der Klasse FileManager auf, die temporäre Dateien aus dem temporären Ordner löscht.
|
104
105
106
107
108
109
110
111
|
public function temp_file_delete($file_id) { $file = "{$this->dir}/temp/$file_id"; if (file_exists($file) && is_writable($file)) { @unlink($file); return true; } return false;} |
Leider wird der Parameter file_id nicht ordnungsgemäß validiert, sodass beliebige Pfade angegeben werden können.
Dadurch können nicht authentifizierte Angreifer beliebige Dateien auf dem Server löschen, einschließlich der Datei wp-config.php der Website. Durch das Löschen der Datei „wp-config.php“ wird die Website in einen Einrichtungszustand versetzt, sodass ein Angreifer die Kontrolle übernehmen kann, indem er sie auf eine Datenbank umleitet, die unter seiner Kontrolle steht. Dadurch erhält er Zugriff auf den Server der Website, wo weitere Infektionen stattfinden können.
Der Patch
Der Anbieter hat dieses Problem behoben, indem er die Funktion „sanitize_file_name()“ auf den Parameter „ht_form_file_id“ in der Funktion „temp_file_delete()“ angewendet hat.
|
74
75
76
77
78
79
80
81
82
83
84
85
86
|
public function temp_file_delete() { check_ajax_referer('ht_form_ajax_nonce', '_wpnonce'); $file_id = isset($_POST['ht_form_file_id']) ? sanitize_file_name(wp_unslash($_POST['ht_form_file_id'])) : ''; if (!$file_id) { wp_send_json_error('No file ID provided'); } if ($this->file_manager->temp_file_delete($file_id)) { wp_send_json_success(); } else { wp_send_json_error('Failed to delete file'); }} |
Technische Analyse Nr. 3: Willkürliche Dateiverschiebung
Eine Untersuchung des Codes zeigt, dass das Plugin die Funktion upload_file() in der Klasse Submission verwendet, um Datei-Uploads für Formularübermittlungen zu verarbeiten.
|
443
444
445
446
447
448
449
450
451
452
453
454
455
456
|
public function handle_files_upload($form_data, $form) { foreach ($form['fields'] as $field) { if ($field['type'] === 'file_upload') { $destination = $field['settings']['upload_location'] ?? 'ht_form_default'; $files = $form_data[$field['settings']['name_attribute']]; if (!empty($files)) { foreach ($files as $key => $file) { $form_data[$field['settings']['name_attribute']][$key] = $this->upload_file($file, $destination); } } } } return $form_data;} |
|
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
|
public function upload_file($file_name, $destination) { $upload_dir = wp_upload_dir(); $temp_file = $upload_dir['basedir'] . '/ht_form/temp/' . $file_name; if($destination === 'media_library') { // === ATTACH TO MEDIA LIBRARY === require_once ABSPATH . 'wp-admin/includes/file.php'; require_once ABSPATH . 'wp-admin/includes/media.php'; require_once ABSPATH . 'wp-admin/includes/image.php'; $file = [ 'name' => basename($file_name), 'tmp_name' => $temp_file, 'type' => mime_content_type($temp_file), 'error' => 0, 'size' => filesize($temp_file), ]; $attachment_id = media_handle_sideload($file, 0); if(is_wp_error($attachment_id)) { return $attachment_id->get_error_message(); } else { @unlink($temp_file); return wp_get_attachment_url($attachment_id); } } elseif($destination === 'ht_form_default') { $destination = $upload_dir['basedir'] . '/ht_form'; if (!file_exists($destination)) { wp_mkdir_p($destination); } $file_name = wp_unique_filename($destination, $file_name); $file_path = "$destination/$file_name"; if (rename($temp_file, $file_path)) { |
Leider wird der Dateiname-Parameter nicht ordnungsgemäß validiert, sodass beliebige Pfade angegeben werden können. Diese Dateidaten werden dann an die Funktion rename() weitergeleitet, die die Quelldatei in das Verzeichnis „uploads“ verschiebt.
Das bedeutet, dass Angreifer jede beliebige Datei auf dem Server zum Verschieben angeben können, was effektiv zu deren Löschung führt. Dadurch können nicht authentifizierte Angreifer beliebige Dateien auf dem Server verschieben, einschließlich der Datei wp-config.php der Website. Durch das Verschieben von „wp-config.php“ wird die Website in einen Einrichtungszustand versetzt, sodass ein Angreifer eine Website-Übernahme initiieren kann, indem er sie mit einer Datenbank unter seiner Kontrolle verbindet.
Der Patch
Der Anbieter hat dieses Problem behoben, indem er die Funktion „sanitize_file_name()“ auf die Variable „file“ in der Funktion „handle_files_upload()“ angewendet hat.
|
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
|
public function handle_files_upload($form_data, $form) { foreach ($form['fields'] as $field) { if ($field['type'] === 'file_upload') { $destination = $field['settings']['upload_location'] ?? 'ht_form_default'; $files = $form_data[$field['settings']['name_attribute']]; if (!empty($files)) { foreach ($files as $key => $file) { $file = sanitize_file_name($file); $form_data[$field['settings']['name_attribute']][$key] = $this->upload_file($file, $destination); } } } } return $form_data;} |
Alle Wordfence-Benutzer, einschließlich derjenigen, die Wordfence Premium, Wordfence Care und Wordfence Response verwenden, sowie Websites, auf denen die kostenlose Version von Wordfence läuft, sind durch die in die Wordfence-Firewall integrierten Schutzfunktionen gegen das Hochladen bösartiger Dateien und das Durchlaufen von Verzeichnissen vollständig vor diesen Sicherheitslücken geschützt.
Das könnte Sie ebenfalls interessieren
Bild/Quelle: https://depositphotos.com/de/home.html
Fachartikel

Der Wettbewerbsvorteil dezentraler Identität im europäischen Finanzwesen

Wo sind Deine Daten hin?

Autonome APTs: Die Claude-basierte Operation wird nicht die letzte sein

Stand der Technik umsetzen: Wie Unternehmen jetzt handeln sollten

Industrielles Phishing gegen Italiens Infrastruktur: Group‑IB entdeckt automatisiertes Aruba‑Imitierendes Phishing‑Kit
Studien

49 Prozent der IT-Verantwortlichen in Sicherheitsirrtum

Deutschland im Glasfaserausbau international abgehängt

NIS2 kommt – Proliance-Studie zeigt die Lage im Mittelstand

BSI-Lagebericht 2025: Fortschritte in der Cybersicherheit – Deutschland bleibt verwundbar

Forrester veröffentlicht Technologie- und Sicherheitsprognosen für 2026
Whitepaper

Industrial AI: KI als Treiber der Wettbewerbsfähigkeit

Vorbereitung auf künftige Cyberbedrohungen: Google veröffentlicht „Cybersecurity Forecast 2026“

Aktuelle Studie zeigt: Jeder Vierte in Deutschland bereits Opfer von digitalem Betrug

Cybersecurity in Deutschland: 200 Milliarden Euro Schaden trotz steigender IT-Ausgaben

Die EU bleibt weiterhin Ziel zahlreicher, sich überschneidender Bedrohungsgruppen
Hamsterrad-Rebell

Sicherer Remote-Zugriff (SRA) für Operational Technology (OT) und industrielle Steuerungs- und Produktionssysteme (ICS)

Identity und Access Management (IAM) im Zeitalter der KI-Agenten: Sichere Integration von KI in Unternehmenssysteme

Infoblox zeigt praxisnahe IT-Security-Strategien auf it-sa 2025 und exklusivem Führungskräfte-Event in Frankfurt

IT-Security Konferenz in Nürnberg: qSkills Security Summit 2025 setzt auf Handeln statt Zögern







