Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Einreichen
ToolsExploitsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

FeedsKontaktDatenschutz© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2026-32475 — Proof-of-Concept-Exploit für CVE-2026-32475, einen nicht authentifizierten beliebigen Datei-Upload in Elementor Pro, der zu Remote-Code-Ausführung führt. Enthält automatisierte Erkennung, Upload und Befehlsausführung mit Bereinigung. | Kitploit
Tools/GitHubGitHub/sahmsec/cve-2026-32475
SchwachstellenanalyseExploitationWebanwendungs-ExploitationPenetrationstestsLernen & BildungRed Teaming
GitHubsahmsec/cve-2026-32475

CVE-2026-32475

Proof-of-Concept-Exploit für CVE-2026-32475, einen nicht authentifizierten beliebigen Datei-Upload in Elementor Pro, der zu Remote-Code-Ausführung führt. Enthält automatisierte Erkennung, Upload und Befehlsausführung mit Bereinigung.

Repository anzeigen
119vor 1 MonatNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

CVE-2026-32475 — Elementor Pro ≤ 4.2.1 Nicht authentifizierter beliebiger Datei-Upload → RCE

PoC für CVE-2026-32475 (CVSS 9.0 Kritisch, CWE-434): ein nicht authentifizierter beliebiger Datei-Upload im Elementor Pro Forms-Modul, der zur Remote-Code-Ausführung führt. Behoben in Elementor Pro 4.2.2 (19.08.2026). Gemeldet von Tin Pham (TF1T) über das Patchstack Bug-Bounty-Programm.

  ███████╗  █████╗  ██╗  ██╗ ███╗   ███╗ ███████╗ ███████╗  ██████╗
  ██╔════╝ ██╔══██╗ ██║  ██║ ████╗ ████║ ██╔════╝ ██╔════╝ ██╔════╝
  ███████╗ ███████║ ███████║ ██╔████╔██║ ███████╗ █████╗   ██║
  ╚════██║ ██╔══██║ ██╔══██║ ██║╚██╔╝██║ ╚════██║ ██╔══╝   ██║
  ███████║ ██║  ██║ ██║  ██║ ██║ ╚═╝ ██║ ███████║ ███████╗ ╚██████╗
  ╚══════╝ ╚═╝  ╚═╝ ╚═╝  ╚═╝ ╚═╝     ╚═╝ ╚══════╝ ╚══════╝  ╚═════╝

⚠️ Rechtlicher Haftungsausschluss

Dieser Proof of Concept wird ausschließlich für autorisierte Sicherheitsforschung, Bildung und defensive Tests bereitgestellt.

  • Du musst Eigentümer des Zielsystems sein oder über eine ausdrückliche schriftliche Genehmigung des Systemeigentümers verfügen, bevor du dieses Tool gegen das System einsetzt.
  • Unautorisierter Zugriff auf Computersysteme ist in den meisten Rechtsordnungen illegal (z. B. der Computer Fraud and Abuse Act in den USA, der Computer Misuse Act im Vereinigten Königreich und ähnliche Gesetze weltweit) und kann straf- und zivilrechtliche Konsequenzen nach sich ziehen.
  • Die Autoren und Mitwirkenden übernehmen keine Haftung für Missbrauch, Schäden oder rechtliche Konsequenzen, die aus der Verwendung dieses Codes entstehen.
  • Durch die Nutzung dieser Software erklärst du dich bereit, sie verantwortungsvoll und in Übereinstimmung mit allen geltenden Gesetzen zu verwenden.

Worin die Schwachstelle besteht

Das Datei-Upload-Feld von Elementor Pro-Formularen verarbeitet hochgeladene Einträge in zwei getrennten Schleifen mit unterschiedlicher Semantik (modules/forms/fields/upload.php):

// validation()
foreach ( $files[$id] as $index => $file ) {
    if ( ! $field['required'] && UPLOAD_ERR_NO_FILE === $file['error'] ) {
        return;                    // <-- bricht die GESAMTE Methode ab
    }
    // is_file_type_valid() ...    // wird für Eintrag #2 nie erreicht
}

// process_field()
foreach ( $files[$id] as $index => $file ) {
    if ( UPLOAD_ERR_NO_FILE === $file['error'] ) {
        continue;                  // <-- überspringt nur DIESEN Eintrag
    }
    $filename = uniqid() . '.' . $file_extension;   // angreiferkontrollierte Endung
    move_uploaded_file( $file['tmp_name'], $new_file );
}

Das Übermitteln von zwei Dateiteilen für dasselbe Upload-Feld — ein leerer erster Teil (filename="" → UPLOAD_ERR_NO_FILE), gefolgt von der .php-Payload — führt dazu, dass validation() zurückkehrt, bevor die Endungs-Blocklist die Payload je sieht, während process_field() sie dennoch nach wp-content/uploads/elementor/forms/<uniqid()>.php, einem öffentlichen Webverzeichnis, verschiebt. Das direkte Aufrufen dieser URL = Remote-Code-Ausführung.

Der Upload wird über POST /wp-admin/admin-ajax.php (action=elementor_pro_forms_send_form) verarbeitet — ohne Authentifizierung und ohne Nonce. Die post_id, form_id und der Upload-Feldname sind im öffentlichen Seiten-HTML sichtbar, sodass der gesamte Angriff nicht authentifiziert ist.

Anforderungen

Ziel:

  • Elementor Pro ≤ 4.2.1 (alle älteren Versionen sind betroffen)
  • Mindestens eine veröffentlichte Seite mit einem Formular-Widget, das ein Datei-Upload-Feld enthält
  • Das Upload-Feld darf nicht als Pflichtfeld markiert sein (Standardzustand)
  • Kein CAPTCHA im Formular (reCAPTCHA/turnstile blockiert die nicht authentifizierte Übermittlung)
  • Das Upload-Verzeichnis muss PHP ausführen (Standard bei den meisten Apache/cPanel- Hostings; bei einigen gehärteten nginx-Setups blockiert)

Angreifer:

  • Python 3.9+ (nur Standardbibliothek — keine Abhängigkeiten)
  • Netzwerkzugriff auf das Ziel

Verwendung

Einzelnes Ziel (ermittelt die Formularseite automatisch über Sitemap/Startseite):

python script.py --url https://target.example --command "id; hostname; uname -a" --cleanup

Explizite Formularseite:

python script.py --url https://target.example --page-url https://target.example/contact/ --cleanup

Batch-Modus (sites.txt: eine Site pro Zeile — base_url oder base_url page_url):

python script.py --list sites.txt --command "id" --cleanup --out results.json

JSON-Listenformat:

[{"url": "https://a.example"}, {"url": "https://b.example", "page_url": "https://b.example/jobs/"}]

Befehl auf einer bereits hochgeladenen Shell ausführen:

python script.py --url https://target.example --shell-url https://target.example/wp-content/uploads/elementor/forms/<name>.php --command "id"

Wichtige Optionen

FlagStandardBedeutung
--url-Basis-URL für Einzelziel
--list-Listendatei für Batch-Modus
--page-url--urlSeite, die das Formular enthält
--commandid; hostname; uname -aBefehl, der über die Shell ausgeführt wird
--cleanupausWebshell nach dem Test selbst löschen
--field k=v-Ein automatisch ausgefülltes Formularfeld überschreiben (wiederholbar)
--tail0.3Sekunden vor der geschätzten Upload-Zeit für den Feinscan
--step-fine1Mikrosekunden-Schritt des Feinscans
--full-secondausDie gesamte uniqid-Sekunde brute-forcen (überwindet Uhrenabweichung)
--attempts1Upload+Scan-Versuche (jedes Mal neuer zufälliger Dateiname)
--max-probes600000Scan-Anfragebudget pro Versuch
--workers50Parallele Scan-Threads
--insecureausTLS-Fehler ignorieren (selbstsignierte Ziele)
--out file.json-Bericht als JSON schreiben

Wie das Tool funktioniert

  1. Erkennung — ruft die Zielseite ab (oder durchsucht die Sitemap und Startseiten-Links, max. 20 Seiten), um ein Formular mit einem Datei-Upload-Feld zu finden.
  2. Scraping — extrahiert post_id, form_id, den Upload-Feldnamen und jedes andere Formularfeld; füllt alle Felder automatisch mit plausiblen Werten, sodass Pflichtfelder die Validierung bestehen (mit --field überschreibbar).
  3. Upload — sendet den zweiteiligen Multipart-POST an admin-ajax.php. Hinweis: success:false mit einem leeren errors-Objekt wird dennoch als hochgeladen behandelt, da die Standard-E-Mail-Aktion nach der Dateiverschiebung fehlschlägt, wenn wp_mail() versagt. Nur eine Ablehnung des Upload-Felds selbst (file type is not allowed) zählt als blockiert.
  4. Dateinamen-Wiederherstellung — uniqid() = 8 Hex-Sekunden + 5 Hex-Mikrosekunden. Die Sekunden stammen aus dem Date-Header der Antwort; der Sub-Sekunden-Anteil wird aus (t1 - date_epoch) % 1 geschätzt (genau, wenn Angreifer- und Server-Uhren nahe beieinanderliegen). Ein Keep-Alive-Prober (~30x schneller als eine Anfrage pro Verbindung) scannt das Verschiebungsfenster mit Mikrosekunden- Auflösung; --full-second brute-forct die gesamte Sekunde bei Uhrenabweichung.
  5. Ausführung — GET <shell>?c=<command> führt den Befehl aus; --cleanup löscht die Shell über ?x=1.

Ergebniszustände

StatusBedeutung
vulnerableShell hochgeladen und Befehl ausgeführt — sofort patchen
blockedUpload-Feld abgelehnt (gepatcht 4.2.2+, Pflichtfeld, WAF, Captcha)
uploaded_no_execDatei gelandet, aber Dateiname nicht wiederhergestellt (mit --full-second erneut versuchen)
no_formKein verwundbares Formular auf dem Ziel gefunden
errorVerbindungs-/Netzwerkfehler

Labor-Reproduktion

docker-compose.yml + setup_form_page.php reproduzieren das verwundbare Ziel:

Tool herunterladen