Si ha recibido un correo mío que le remite a esta página, es porque su sitio web parece estar ejecutando una versión de Bookly (el plugin de reservas de citas para WordPress bookly-responsive-appointment-booking-tool) que se encuentra dentro del rango afectado por un problema de seguridad conocido. Esta página explica en qué consiste, cómo comprobar su versión, cómo actualizar y el único paso posterior que conviene dar.

Se trata de CVE-2026-13395, una inyección SQL sin autenticación en el flujo de reservas del plugin. Afecta a las versiones 11.3 hasta 27.7 y está corregida en 27.8, publicada el 10 de julio de 2026. Si utiliza una versión afectada, actualice Bookly a la 27.8 o posterior (la 27.9 es la versión actual y también incluye la corrección). No hay indicios de que este problema se esté explotando contra ningún sitio, ni informe público de explotación en ninguna parte: esta página es un aviso preventivo, no un informe de incidente.

A diferencia de otros avisos que he enviado, este no depende de cómo esté configurado su sitio. No hay ningún ajuste que deba estar activado para que el fallo sea alcanzable: la ruta de petición afectada está abierta a visitantes que no han iniciado sesión, en una instalación corriente. Si su versión de Bookly está en el rango afectado, conviene actualizar pronto.

Es un fallo del plugin, no del núcleo de WordPress. Un WordPress completamente actualizado no le protege si el propio plugin Bookly está en una versión afectada.

¿Es legítimo este mensaje?

Sí. Es un aviso de divulgación responsable y de buena fe de un investigador de seguridad independiente. No le pido dinero, contraseñas ni acceso a su sitio, y no he intentado entrar en él, enviarle nada ni explotar nada.

Lo único que hice fue mirar archivos públicos que su sitio sirve a cualquier visitante (igual que su página de inicio es pública) y anotar el número de versión que publica el plugin Bookly. En concreto, no envié nada a su formulario de reservas ni a la ruta de petición implicada, y esta comprobación no toca sus datos, su área de administración ni ninguna parte privada del sitio (más detalle en Qué hice y qué no hice).

Si desea verificar quién soy, consulte los datos de contacto al final de esta página y la página Acerca de.

Por qué importa

Bookly es uno de los plugins de reserva de citas más utilizados de WordPress: está en el directorio oficial desde 2014 y funciona en decenas de miles de sitios. Publica un formulario de reservas en la parte pública de su sitio para que los visitantes elijan un servicio, un profesional y una franja horaria sin necesidad de tener cuenta.

En las versiones afectadas, uno de los valores que ese formulario devuelve, el identificador del profesional que el visitante ha seleccionado, se guarda tal cual llega, sin comprobación, y después se inserta directamente en una consulta a la base de datos en lugar de pasarse como parámetro. Quien envíe un valor manipulado en lugar de un identificador normal puede, por tanto, alterar el significado de esa consulta. El efecto práctico: alguien sin cuenta y sin iniciar sesión podría leer datos de la base de datos de su sitio que la consulta nunca debía devolver, incluidos los hashes de contraseña de sus cuentas de WordPress.

Conviene decir dos cosas con claridad, en ambos sentidos.

Primero, para situarlo: es un problema de lectura de datos, no una toma de control del servidor ni del administrador. Por sí mismo no permite ejecutar código en su servidor ni entrar en su área de administración. Un hash no es una contraseña: todavía hay que romperlo para que se convierta en acceso. Y no hay pruebas de explotación: la autoridad que asignó el CVE no publicó puntuación de gravedad, no figura en el catálogo de vulnerabilidades explotadas conocidas (KEV) de CISA, su puntuación de probabilidad de explotación (EPSS) no está asignada y no conozco ningún informe de explotación.

Segundo, sin quitarle importancia: ni un inicio de sesión, ni un nonce, ni ningún ajuste del plugin se interponen entre un visitante anónimo y esa ruta. Es alcanzable en una instalación por defecto del plugin gratuito. Por eso la recomendación es actualizar pronto y no dejarlo para la próxima ventana de mantenimiento.

Si mi correo citaba este problema, significa que la versión que informa su sitio está dentro del rango afectado. No comprobé si su sitio concreto es explotable; lo único que observé fue la versión.

¿Estoy afectado?

Todo se reduce a una pregunta: ¿qué versión de Bookly utiliza? No tiene que fiarse de mi palabra, y hay dos formas de comprobarlo.

Desde el área de administración de WordPress (fuente autorizada):

  1. Inicie sesión en su escritorio de WordPress (normalmente en sudominio.com/wp-admin).
  2. Vaya a Plugins y luego a Plugins instalados.
  3. Busque Bookly, la entrada cuya carpeta es bookly-responsive-appointment-booking-tool, y observe la versión que aparece bajo su nombre.

Desde el manifiesto público (sin necesidad de acceder): abra sudominio.com/wp-content/plugins/bookly-responsive-appointment-booking-tool/readme.txt en un navegador. La línea Stable tag:, cerca del principio, es la versión que informa su instalación, y es el mismo archivo público que yo leí.

Después aplique esta regla, teniendo en cuenta que las versiones se comparan numéricamente, no alfabéticamente:

  • De la 11.3 a la 27.7: afectada. Actualice ahora.
  • 27.8 o posterior: ya corregida. Incluye la 27.9, que mantiene la corrección.
  • Anterior a la 11.3: no afectada por este problema. La construcción insegura de la consulta no existía en esas versiones: los identificadores de profesional pasaban por el constructor de consultas parametrizadas del plugin. Una versión tan antigua tiene muchos otros motivos para actualizarse, pero este aviso no es uno de ellos.
  • No lea los números de versión como texto. Bookly tiene una versión principal de dos cifras, así que el orden alfabético se equivoca dos veces: 3.3 parece mayor que 27.8 pero es mucho más antigua, y 27.10 parece menor que 27.7 pero es más nueva. Compare número a número.

Una nota sobre los complementos de Bookly. Las extensiones de pago de Bookly (Pro y los distintos paquetes bookly-addon-*) se instalan como plugins independientes con sus propios números de versión, y las URL de sus archivos pueden llevar la versión del plugin principal en lugar de la suya. La versión que cuenta para este aviso es la del plugin Bookly principal, obtenida por cualquiera de las dos vías anteriores, no un número leído de los archivos de un complemento.

Si no ve ningún archivo de Bookly desde fuera. Bookly tiene un ajuste que controla si sus scripts y estilos se cargan en todas las páginas o solo en las que llevan un formulario de reservas. Si el suyo está en la segunda opción, desde fuera se ve mucho menos del plugin. Ese ajuste solo afecta a lo que un visitante puede ver: no influye en si el fallo está presente y es alcanzable. Compruebe su versión en el área de administración.

Cómo actualizar

Lo más seguro es actualizar desde el propio WordPress, y hacer copia de seguridad antes:

  1. Haga una copia de seguridad (archivos y base de datos) antes de tocar nada. La mayoría de los alojamientos ofrecen copias con un clic, o puede usar un plugin de copias.
  2. En la administración de WordPress, vaya a Escritorio y luego Actualizaciones, o a Plugins y luego Plugins instalados. Si aparece una actualización de Bookly, instálela desde ahí.
  3. Si prefiere la línea de comandos, WP-CLI hace lo mismo: wp plugin update bookly-responsive-appointment-booking-tool.
  4. Si no aparece ninguna actualización, puede obtener la última versión directamente desde la página del plugin en el directorio de WordPress.org, Bookly, y actualizar desde Plugins, Añadir nuevo plugin, Subir plugin.
  5. Tras actualizar, confirme el nuevo número de versión (27.8 o posterior) con los pasos anteriores y compruebe que su formulario de reservas y sus citas existentes funcionan con normalidad.

Si utiliza complementos de pago de Bookly, actualícelos junto con el plugin principal: sus versiones suelen ir emparejadas.

Ya que está, conviene confirmar que el núcleo de WordPress y sus demás plugins están al día, porque el mismo principio se aplica a todos.

Después de actualizar

Actualizar a la 27.8 o posterior cierra el problema, y no hay indicios de que se haya explotado en ninguna parte, así que no se implica ninguna respuesta de emergencia: no necesita tratar su sitio como comprometido ni ponerlo fuera de línea.

Sí conviene dar un paso posterior, y viene directamente de lo que este fallo podía alcanzar. Dado que los hashes de contraseña de WordPress estaban entre los datos que la consulta podía devolver, y que un hash capturado antes le sigue sirviendo a un atacante después de que usted actualice, la precaución sensata es restablecer las contraseñas de sus cuentas de administrador una vez aplicada la actualización. Dos pasos menores acompañan bien a este:

  • Revise sus cuentas de administrador y editor por si hay alguna que no reconozca, del mismo modo en que revisaría los accesos habitualmente.
  • Regenere las claves secretas y «salts» de WordPress en wp-config.php (los valores nuevos están a un clic en el generador oficial; cambiarlos cierra la sesión de todos los usuarios una vez).

Trátelo como mantenimiento de seguridad rutinario, no como respuesta a un incidente.

Qué hice y qué no hice

Para ser totalmente transparente sobre la comprobación que hay detrás de mi correo: solo leí archivos públicos que su sitio ya sirve a cualquier visitante, en concreto el readme.txt público del plugin Bookly y su página de inicio. No accedí a su área de administración de WordPress, ni a su base de datos, ni a ninguna parte privada del sitio.

En particular, nunca envié nada a su formulario de reservas ni a la ruta de petición implicada: no se envió, probó ni explotó nada. Aquí eso pesa más que en la mayoría de estas páginas: el fallo es una petición sin autenticación a esa ruta, así que «no la toqué» es toda la diferencia entre una divulgación y una intrusión.

Esta es una observación basada en la versión: su sitio informa de una versión dentro del rango afectado. Un sitio en ese rango puede estar ya protegido por otros medios, como un cortafuegos de aplicaciones web o una corrección retroportada. Este aviso no afirma que su sitio fuera explotable en el momento en que lo comprobé.

No tengo webmaster / estoy atascado

Si no es usted quien mantiene el sitio, reenvíe esta página a quien lo haga (su desarrollador, su agencia o su proveedor de alojamiento). Reconocerán los pasos anteriores enseguida.

Si mantiene el sitio usted mismo y se atasca, con gusto le oriento sin coste alguno. Escríbame usando los datos de contacto de abajo.

Contacto

Evan Harris, investigador de seguridad

Contacto sobre cuestiones como esta únicamente para ayudar a los operadores a asegurar sus sitios. Si prefiere no volver a recibir mensajes míos, dígamelo y lo respetaré.

Referencias

Avisos oficiales y seguimiento

Fabricante / plugin