Si recibió un correo electrónico mío que le dirige a esta página, es porque su sitio web parece estar ejecutando una versión de Content Views – Post Grid & Filter (el plugin de WordPress de Content Views / PT Guy, que se encuentra en sus archivos en /wp-content/plugins/content-views-query-and-display-post-page/) que cae dentro del rango afectado por un problema de seguridad conocido. Esta página explica cuál es el problema, cómo determinar cuánto le afecta a su sitio, cómo leer su versión sin ser engañado y cómo actualizar.

El problema es CVE-2026-15361, una inyección SQL en el manejo de vistas previas del plugin. Afecta a todas las versiones anteriores a la 4.5 y está corregido en la 4.5, lanzada el 28 de julio de 2026. Si está ejecutando cualquier versión anterior a la 4.5, actualice Content Views a la 4.5.1 o posterior, que es la versión actual al momento de escribir esto (4 de agosto de 2026). No hay ninguna puntuación CVSS publicada para este problema, así que no le voy a citar ninguna, y no tengo conocimiento de ningún código de explotación público para él.

No existe ninguna versión anterior que sea segura. Este no es un defecto que se introdujera a mitad de la historia del plugin y se corrigiera después. Comprobé todas las etiquetas de versión publicadas en la historia del plugin, desde la más antigua en 2014 hasta la 4.4, y el código afectado está presente en todas ellas. «Mi instalación es demasiado antigua para estar afectada» no es una salida aquí. Las únicas versiones que no están afectadas son la 4.5 y posteriores.

Antes que nada, el matiz que decide cuánto le afecta esto a su sitio, porque prefiero exponerlo a dejar que el aviso suene más grave de lo que es: este fallo solo puede ser utilizado por alguien que haya iniciado sesión en su sitio. No importa lo que su cuenta pueda hacer normalmente, y el rol más bajo de WordPress es suficiente, pero sí necesitan una cuenta. Así que la pregunta que decide su exposición no es ninguna configuración del plugin, es quién puede obtener una cuenta en su sitio. Puedo leer la versión de su plugin desde un archivo público, y puedo ver si WordPress sirve su página de registro estándar, pero no puedo ver quién tiene cuentas en su sitio, por lo que este aviso es una advertencia preventiva más que un hallazgo confirmado sobre usted.

Observe lo que ese matiz no es. No hay ninguna opción para desactivar, ninguna función para despublicar, y ninguna configuración que le saque del rango afectado. El manejador afectado está registrado en toda instalación de una versión afectada, haya usted colocado o no alguna vez una cuadrícula de entradas en una página. Si busca una casilla para desactivarlo, no encontrará ninguna, porque no existe. Actualizar es la solución.

Una palabra sobre la urgencia, ya que este es un aviso condicional. Si usted es la única persona con una cuenta en el sitio y nadie más puede obtener una, actualizar es mantenimiento ordinario del plugin. Si su sitio acepta registros de otras personas, por favor trátelo como una prioridad, y tenga en cuenta que los registros adoptan más formas que la obvia: una tienda WooCommerce, un plugin de membresías o foro, un blog de varios autores, y una página de registro personalizada crean todos cuentas sin que el propio formulario de registro de WordPress llegue a intervenir.

Si tiene la página de registro de WordPress abierta a los visitantes y no la necesita, desactivarla es un paso intermedio razonable, porque reduce quién puede llegar a esto. Sin embargo, por favor no lo interprete como un certificado de salud limpio. Cerrar el registro solo cierra una de varias puertas hacia una cuenta, y no hace nada respecto a las cuentas que ya existen. Actualizar el plugin es lo que realmente elimina el problema.

También vale la pena precisar qué es y qué no es este problema. Permite que alguien con una cuenta de bajos privilegios lea datos de la base de datos de su sitio que su cuenta no debería poder ver. Eso vale la pena corregirlo, ya que una base de datos de WordPress contiene cosas como direcciones de correo electrónico de usuarios y contraseñas cifradas mediante hash, y en algunos sitios registros de miembros o clientes. Pero no es una toma de control de administrador, no es una forma de que alguien se otorgue a sí mismo una cuenta de administrador, y no es ejecución remota de código. Es más limitado que los problemas de compromiso total sobre los que escribo en otros avisos, y prefiero establecer la escala con honestidad antes que dejarle una impresión más alarmante de lo que respaldan los hechos.

Esta es una vulnerabilidad del plugin, no del núcleo de WordPress. Un WordPress completamente actualizado no le protege si el propio plugin Content Views está en una versión afectada.

¿Es legítimo este mensaje?

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

Lo único que hice fue examinar páginas y archivos que su sitio web sirve a todos los visitantes (del mismo modo que su página de inicio es pública) y anotar el número de versión que el plugin publica. Una de las páginas que leí fue la página de registro estándar de WordPress de su sitio, para ver si está abierta a los visitantes, y leerla es todo lo que hice con ella. Específicamente no envié ese formulario, no creé ninguna cuenta, no inicié sesión, y no envié nada al elemento afectado. Nada de esta comprobación toca sus datos, su área de administración ni ninguna parte privada de su sitio (más detalle en Qué hice y qué no hice más abajo).

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

Content Views crea cuadrículas, listas y carruseles de entradas en su sitio, para que pueda mostrar una selección filtrada de entradas o páginas sin escribir ningún código. Parte de cómo lo hace es un manejador de solicitudes que renderiza una vista previa de una cuadrícula a partir de la configuración que se le proporciona.

En las versiones afectadas, ese manejador comprueba un token de seguridad y se detiene ahí. Nunca comprueba si la persona que envía la solicitud tiene permiso para usarlo, y el token en cuestión no es un secreto: el plugin lo publica a todos los visitantes del sitio. El manejador entonces construye una consulta de base de datos a partir de la configuración tomada directamente de la solicitud. La consecuencia es que alguien que no tenga más que la cuenta de menor privilegio en su sitio puede dirigir esa consulta y leer datos de su base de datos que su cuenta no tiene ningún motivo para ver.

La condición previa, repetida porque es la parte con más probabilidades de malinterpretarse en cualquiera de las dos direcciones: una cuenta, no una configuración. No hace falta activar nada para que el manejador sea alcanzable, y no existe ninguna configuración que saque a una versión afectada del rango. Lo único que se interpone entre una instalación afectada y este problema es simplemente si alguien además de usted puede iniciar sesión. En un sitio donde cualquiera puede registrarse, eso no supone gran barrera. En un sitio donde usted es el único usuario, sí lo es.

Y la otra cara de la moneda, que importa igual de mucho: un sitio con el formulario de registro de WordPress cerrado no está por ello a salvo. Las cuentas llegan por muchas vías, y cualquiera de ellas basta.

Estoy describiendo esto al nivel que necesita un propietario de sitio para actuar, y no más. No estoy publicando los detalles que permitirían a alguien reproducirlo, y le pediría que no intente hacerlo contra su propio sitio o el de nadie más. Leer el número de su versión, como se describe a continuación, le dice todo lo que necesita para decidir qué hacer.

Si mi correo electrónico citó este problema, significa que la versión que informa su sitio es anterior a la 4.5. No probé si su sitio en particular es explotable, y no puedo ver quién tiene cuentas en él. Lo único que observé fue la versión, y si su página de registro se sirve a los visitantes.

¿Estoy afectado?

Se reduce a una pregunta: ¿qué versión de Content Views está ejecutando?

Una breve aclaración sobre cuál es este plugin, ya que el nombre se comparte. Este aviso se refiere al plugin gratuito publicado en WordPress.org, el que tiene la carpeta content-views-query-and-display-post-page. El mismo fabricante también vende una línea Pro independiente. Si la carpeta de su plugin es esa, siga leyendo.

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

  1. Inicie sesión en su escritorio de WordPress (normalmente en yourdomain.com/wp-admin).
  2. Vaya a Plugins y luego a Plugins instalados.
  3. Busque Content Views – Post Grid & Filter, la entrada cuya carpeta es content-views-query-and-display-post-page, y anote la versión que se muestra debajo de su nombre.

Desde el manifiesto público (no se necesita inicio de sesión): abra

yourdomain.com/wp-content/plugins/content-views-query-and-display-post-page/README.txt

en un navegador, y lea la línea Stable tag: cerca de la parte superior. Esta es una de las dos fuentes públicas que leí.

Preste atención a las mayúsculas en ese nombre de archivo. Los plugins de WordPress suelen distribuir un readme.txt en minúsculas, y esa es la URL que la mayoría de la gente escribe por costumbre. Los paquetes 4.x de este plugin distribuyen el archivo como README.txt en mayúsculas, así que en un servidor sensible a mayúsculas y minúsculas, la dirección en minúsculas devuelve un error 404 y parece que el archivo no está ahí. Sí está ahí. Pruebe con la grafía en mayúsculas antes de sacar ninguna conclusión.

Desde el código fuente de su página (no se necesita inicio de sesión): vea el código fuente de su página de inicio y busque los propios activos front-end del plugin en exactamente estas rutas:

/wp-content/plugins/content-views-query-and-display-post-page/public/assets/js/cv.js?ver=...
/wp-content/plugins/content-views-query-and-display-post-page/public/assets/css/cv.css?ver=...

El número ?ver= adjunto a esos archivos es la versión propia del plugin. En una instalación predeterminada, se cargan en cada página del front-end, aparezca o no una cuadrícula de entradas en ella, así que su página de inicio suele ser suficiente. En instalaciones muy antiguas, esos mismos dos archivos se llaman public.js y public.css, y se aplica la misma regla.

La trampa que evitar aquí, y es fácil caer en ella. Este plugin distribuye copias integradas de varias bibliotecas de terceros dentro de su propia carpeta de plugin, y cada una de ellas lleva su propio número de versión, completamente ajeno al del plugin. El código fuente de su página puede mostrar Bootstrap en 3.3.5 o 3.3.0, Select2 en 3.4.5, html5shiv en 3.7.0, respond.js en 1.4.2, y bootstrap-paginator en 0.5, todos ellos en rutas que comienzan con la carpeta del plugin Content Views. Un operador que busque la carpeta del plugin en el código fuente de la página y lea el primer valor ?ver= que aparezca puede terminar fácilmente creyendo que el plugin está en la «3.3.5», y luego preguntarse cómo se compara eso con la 4.5. No se compara en absoluto. Un número como 3.3.5 o 0.5 en una ruta bootstrap o select2 es la versión de un programa distinto. Lea la versión únicamente en cv.js o cv.css (o public.js / public.css en una instalación muy antigua), e ignore cualquier otro ?ver= en la página.

Si no puede obtener ningún número legible del código fuente de la página, eso es habitual y no es señal de nada: los plugins de caché y optimización suelen eliminar el valor ?ver= de las URL de los activos, o combinar los archivos en un script unificado. En ese caso, el README.txt es la lectura pública fiable, y la pantalla de administración de la primera comprobación siempre tiene la respuesta.

Luego aplique esta regla, y tenga en cuenta que las versiones se comparan numéricamente, no alfabéticamente, de modo que 4.10 sería más reciente que 4.9 aunque como texto parezca menor:

  • Cualquier versión anterior a la 4.5: afectada. Actualice. No hay ningún punto de corte por debajo del cual una versión antigua vuelva a ser segura.
  • 4.5 o posterior: ya corregida en lo que respecta a este problema. La versión actual al momento de escribir esto es la 4.5.1, y tomar la versión más reciente disponible es la mejor opción.

Cómo actualizar

El plugin es gratuito, sigue publicado y se mantiene activamente, por lo que la corrección es una actualización normal. La vía más segura es actualizar a través del propio WordPress y, antes de hacerlo, realizar una copia de seguridad:

  1. Realice una copia de seguridad de su sitio (archivos y base de datos) antes de realizar cambios. La mayoría de los proveedores de alojamiento ofrecen copias de seguridad con un solo clic, o puede utilizar un plugin de copia de seguridad de WordPress.
  2. En la administración de WordPress, vaya a Escritorio y luego a Actualizaciones, o a Plugins y luego a Plugins instalados. Si aparece una actualización de Content Views, instálela desde aquí.
  3. Si prefiere la línea de comandos, WP-CLI hace lo mismo: wp plugin update content-views-query-and-display-post-page (el comando utiliza el nombre de la carpeta, no el nombre visible).
  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, Content Views – Post Grid & Filter, y actualizar mediante Plugins, luego Añadir nuevo plugin, y finalmente Subir plugin.
  5. Después de actualizar, confirme el nuevo número de versión (4.5.1 o posterior) utilizando los pasos anteriores, y compruebe que sus cuadrículas de entradas y cualquier filtro en ellas siguen mostrándose con normalidad.

Mientras está allí, vale la pena confirmar que WordPress core y sus otros plugins están actualizados, ya que el mismo principio se aplica a todos ellos.

Después de actualizar

Actualizar a la 4.5.1 o posterior cierra el problema, y para la mayoría de los sitios esa es toda la tarea. Esta página es un aviso preventivo, no un informe de incidente: no tengo visibilidad sobre si ocurrió algo en su sitio, y no lo he revisado.

Vale la pena hacer dos cosas pequeñas mientras la actualización está reciente:

  • Confirme que la versión realmente cambió, usando la comprobación anterior que le resultara más fácil, y cargue una página que muestre una de sus cuadrículas de entradas para asegurarse de que se sigue renderizando.
  • Si tenía el registro de WordPress abierto y no lo necesita, considere cerrarlo. Eso es higiene general más que una corrección para este problema, que la actualización ya ha resuelto, y vale la pena recordar que otros plugins de su sitio pueden crear cuentas de todos modos.

Notará que no hay ninguna lista de comprobación de «asuma que ha sido comprometido» en esta página, y eso es deliberado y no una omisión. Lo que produce este problema es una lectura de base de datos alcanzable desde una cuenta de bajos privilegios. No entrega a nadie una cuenta de administrador y no ejecuta código en su servidor, así que la auditoría de administradores y el ejercicio de rotación de contraseñas que recomiendo tras un fallo de la clase toma de control no serían proporcionados aquí. Actualice, confirme y continúe.

Qué hice y qué no hice

Para ser completamente transparente sobre la comprobación detrás de mi correo electrónico, aquí está en su totalidad. Leí páginas y archivos que su sitio ya sirve a todos los visitantes:

  • su página de inicio, y las direcciones de los activos escritas en ella;
  • el README.txt público del plugin dentro de wp-content/plugins/content-views-query-and-display-post-page/;
  • la página de registro estándar de WordPress de su sitio en /wp-login.php?action=register, para ver si está abierta a los visitantes. Esa es una página publicada, y leerla es todo lo que hice.

No envié ese formulario de registro, no creé ninguna cuenta, y no inicié sesión en su sitio. No envié nada al elemento afectado. Ese último punto es el que quiero dejar más claro: el problema es un punto de inyección SQL, y disparar una carga útil contra la base de datos de otra persona no es algo que este proyecto haga, ni en un laboratorio ni en producción. No se envió, probó ni explotó nada, y nada tocó su área de administración de WordPress, su base de datos, ni ninguna parte privada del sitio.

Tampoco publico deliberadamente los detalles que ayudarían a alguien a actuar sobre este problema. La descripción anterior se detiene en el nivel que necesita un propietario de sitio, y no enlazo ningún código de prueba de concepto.

Esta es una observación basada en la versión: su sitio informa una versión anterior a la 4.5. No es una afirmación de que su sitio fuera explotable en el momento en que lo comprobé. Dado que usar este problema requiere que alguien haya iniciado sesión, y no puedo ver quién tiene cuentas en su sitio, un sitio en el rango afectado bien podría no estar expuesto en absoluto, y un sitio en ese rango podría estar protegido por otros medios, como un firewall de aplicaciones web o una corrección retroportada.

No tengo webmaster / estoy atascado

Si usted no es la persona que mantiene el sitio, por favor reenvíe esta página a quien lo haga (su desarrollador web, agencia o proveedor de alojamiento). Reconocerán rápidamente los pasos anteriores.

Si usted está manteniendo el sitio usted mismo y se queda atascado, estoy encantado de ayudarle a orientarse en la dirección correcta sin costo alguno. Póngase en contacto utilizando los datos de contacto que aparecen a continuación.

Contacto

Evan Harris, investigador de seguridad

Me pongo en contacto sobre problemas como este puramente para ayudar a los operadores a asegurar sus sitios. Si prefiere no ser contactado de nuevo, simplemente hágamelo saber y lo respetaré.

Referencias

Avisos oficiales y seguimiento

Fabricante / plugin