WPVulnerability

Descripción

Este plugin se integra con la API de WPVulnerability para proporcionar evaluaciones de vulnerabilidad en tiempo real para el núcleo de tu WordPress, plugins, temas, versión de PHP, Apache HTTPD, nginx, MariaDB, MySQL, ImageMagick, curl, memcached, Redis y SQLite

Entrega informes detallados directamente en tu escritorio de WordPress, ayudándote a estar al tanto de posibles riesgos de seguridad. Configura el plugin para enviar avisos periódicos acerca del estado de seguridad de tu sitio, asegurando que te mantengas informado sin sentirte abrumado. Diseñado para ser fácil de usar, es compatible con medidas de seguridad proactivas sin almacenar ni recuperar ningún dato personal de tu sitio.

Fiabilidad de los datos

La información proporcionada por la base de datos de información proviene de diferentes fuentes que han sido revisadas por terceros. No existe ningún tipo de responsabilidad sobre la información. Actúa por tu cuenta y riesgo.

Utilizando el plugin

WP-CLI

Puedes usar los siguientes comandos de WP-CLI para gestionar y comprobar vulnerabilidades.

  • Núcleo: wp wpvulnerability core
  • Plugins: wp wpvulnerability plugins
  • Temas: wp wpvulnerability themes
  • PHP: wp wpvulnerability php
  • Apache HTTPD: wp wpvulnerability apache
  • nginx: wp wpvulnerability nginx
  • MariaDB: wp wpvulnerability mariadb
  • MySQL: wp wpvulnerability mysql
  • ImageMagick: wp wpvulnerability imagemagick
  • curl: wp wpvulnerability curl
  • memcached: wp wpvulnerability memcached
  • Redis: wp wpvulnerability redis
  • SQLite: wp wpvulnerability sqlite

Para configurar el plugin puedes usar:

  • Ocultar componente: wp wpvulnerability config hide <component> [on|off]
  • Avisos por correo electrónico: wp wpvulnerability config email <emails> (separado por comas)
  • Periodo de avisos: wp wpvulnerability config period <never|daily|weekly>
  • Retención de registros: wp wpvulnerability config log-retention <0|1|7|14|28> (en días)
  • Duración de la caché: wp wpvulnerability config cache <1|6|12|24> (en horas)

Todos los comandos dan soporte a la opción --format para especificar el formato de salida.

  • --format=table: Muestra los resultados en formato de tabla (por defecto).
  • --format=json: Muestra los resultados en formato JSON.

¿Necesitas ayuda?

  • wp wpvulnerability --help: Muestra información de ayuda para los comandos de WPVulnerability.
  • wp wpvulnerability [comando] --help: Muestra información de ayuda para un comando WPVulnerability.

REST API

El plugin WPVulnerability proporciona varias rutas finales de la API REST para obtener información sobre vulnerabilidades de diferentes componentes de tu sitio WordPress.

  • Core: /wpvulnerability/v1/core
  • Plugins: /wpvulnerability/v1/plugins
  • Themes: /wpvulnerability/v1/themes
  • PHP: /wpvulnerability/v1/php
  • Apache HTTPD: /wpvulnerability/v1/apache
  • nginx: /wpvulnerability/v1/nginx
  • MariaDB: /wpvulnerability/v1/mariadb
  • MySQL: /wpvulnerability/v1/mysql
  • ImageMagick: /wpvulnerability/v1/imagemagick
  • curl: /wpvulnerability/v1/curl
  • memcached: /wpvulnerability/v1/memcached
  • Redis: /wpvulnerability/v1/redis
  • SQLite: /wpvulnerability/v1/sqlite

La API REST de WPVulnerability utiliza contraseñas de aplicación para identificación. Necesitas incluir una contraseña de aplicación válida en la cabecera de autorización de tus peticiones.

Ejemplo de solicitud con identificación

curl -X GET https://example.com/wp-json/wpvulnerability/v1/plugins -u username:application_password

Reemplaza nombre de usuario con tu username de WordPress y application_password con tu Contraseña de Aplicación.

Configuraciones Extra

«From:» de correo (desde: 3.2.2)

Si, por alguna razón, necesitas que los correos electrónicos enviados por el plugin tengan un From diferente al administrador del sitio, puedes cambiarlo desde el wp-config.php añadiendo una constante:

define( 'WPVULNERABILITY_MAIL', 'sender@example.com' );

Si la constante está activa, será visible en la pantalla de configuración

Forzar ocultación de comprobaciones (desde: 4.1.0)

Si quieres ocultar siempre un componente concreto, puedes definir una constante en wp-config.php. Si se establece en true, la opción se marcará automáticamente en la pantalla de configuración y se omitirá el análisis correspondiente.

Ejemplo:

define( 'WPVULNERABILITY_HIDE_APACHE', true );

Constantes disponibles: WPVULNERABILITY_HIDE_CORE, WPVULNERABILITY_HIDE_PLUGINS, WPVULNERABILITY_HIDE_THEMES, WPVULNERABILITY_HIDE_PHP, WPVULNERABILITY_HIDE_APACHE, WPVULNERABILITY_HIDE_NGINX, WPVULNERABILITY_HIDE_MARIADB, WPVULNERABILITY_HIDE_MYSQL, WPVULNERABILITY_HIDE_IMAGEMAGICK, WPVULNERABILITY_HIDE_CURL, WPVULNERABILITY_HIDE_MEMCACHED, WPVULNERABILITY_HIDE_REDIS, WPVULNERABILITY_HIDE_SQLITE.

Duración de la caché (desde: 4.1.0)

Por defecto, los datos de la API se almacenan en caché durante 12 horas. Para cambiar esto, define WPVULNERABILITY_CACHE_HOURS en wp-config.php con uno de estos 1, 6, 12 o 24. Este valor anula la pantalla de configuración y el comando WP-CLI.

define( 'WPVULNERABILITY_CACHE_HOURS', 24 );

Rotación de registros (desde: 4.2.0)

WPVulnerability almacena las respuestas más recientes de la API para que puedas revisar las llamadas recientes desde la nueva pestaña de registros. Define WPVULNERABILITY_LOG_RETENTION_DAYS en wp-config.php para controlar cuántos días de entradas se conservan. Los valores admitidos son 0, 1, 7, 14 o 28; usar 0 desactiva el registro por completo.

define( 'WPVULNERABILITY_LOG_RETENTION_DAYS', 14 );

Cuando la constante está presente, su valor se aplica en la interfaz de configuración y a través de WP-CLI, garantizando una rotación de registros coherente en todos los entornos.

Configuración de seguridad (desde: 4.3.0)

WPVulnerability utiliza un enfoque de detección híbrido para el software del servidor (ImageMagick, Redis, Memcached, SQLite): extensiones PHP primero (más seguro), y comandos de shell como alternativa (más preciso). Puedes controlar este comportamiento mediante constantes de configuración de seguridad en wp-config.php.

Desactivación global de comandos de shell:

define( 'WPVULNERABILITY_DISABLE_SHELL_EXEC', true );

Desactiva por completo el uso de comandos de shell. Recurre únicamente a extensiones PHP. Úsalo para obtener la máxima seguridad cuando la pérdida de precisión sea aceptable.

Modo de seguridad (standard/strict/disabled):

define( 'WPVULNERABILITY_SECURITY_MODE', 'strict' );
  • standard – Detección híbrida: extensiones PHP primero, comandos de shell como alternativa (por defecto, mayor precisión)
  • strict – Solo extensiones PHP, sin comandos de shell (alta seguridad, menor precisión)
  • disabled – Sin detección de software en absoluto (máxima seguridad)

Lista blanca de componentes:

define( 'WPVULNERABILITY_SHELL_EXEC_WHITELIST', 'imagemagick,redis' );

Permite comandos de shell solo para los componentes especificados. Componentes disponibles: imagemagick, redis, memcached, sqlite. Úsalo para un control granular.

Ejemplos:

Máxima seguridad (sin comandos de shell):

define( 'WPVULNERABILITY_SECURITY_MODE', 'strict' );

Permitir solo la detección de shell de ImageMagick:

define( 'WPVULNERABILITY_SHELL_EXEC_WHITELIST', 'imagemagick' );

Desactivación completa:

define( 'WPVULNERABILITY_DISABLE_SHELL_EXEC', true );

Todos los comandos de shell están predefinidos y validados; no interviene ninguna entrada del usuario. Los comandos se registran para auditoría de seguridad.

Compatibilidad

  • WordPress: 5.6 – 7.1
  • PHP: 7.0 – 8.5
  • WP-CLI: 2.3.0 – 2.12.0

Seguridad

Este plugin se adhiere a las siguientes medidas de seguridad y protocolos de revisión para cada versión:

Privacidad

  • Este plugin o la WordPress Vulnerability Database API no recoge ninguna información sobre tu sitio, tu identidad, los plugins, temas o contenidos que tiene el sitio.

Vulnerabilidades

  • Se encontró y corrigió una vulnerabilidad de seguridad en la versión 4.2.2.1. Todas las versiones anteriores (3.3.0 – 4.2.1) están afectadas. Actualiza a la versión 4.2.2.1 o posterior.

¿Has encontrado una vulnerabilidad de seguridad? Infórmanos de ello en privado en el repositorio de GitHub de WPVulnerability.

Colaboradores

Puedes contribuir a este plugin desde el repositorio de GitHub de WPVulnerability.

Capturas

Instalación

Descarga automática

Visita la sección de plugins en tu WordPress, busca [wpvulnerability]; descarga e instala el plugin.

Descarga manual

Extrae el contenido del ZIP y sube el contenido al directorio /wp-content/plugins/wpvulnerability/. Una vez subido, aparecerá en tu lista de plugins.

FAQ

¿De dónde procede la información sobre la vulnerabilidad?

El origen está en la API de WPVulnerability.com. Las vulnerabilidades que aparecen en esta API provienen de diferentes fuentes, como los CVE.

¿Se envían los datos de mi sitio a alguna parte?

No. Nunca. Tu privacidad es muy importante para nosotros. No comercializamos con tus datos.

¿Qué vulnerabilidades voy a encontrar?

Se documentan vulnerabilidades en el núcleo de WordPress, plugins, temas, PHP, Apache HTTPD, nginx, MariaDB, MySQL, ImageMagick, curl, memcached, Redis y SQLite

¿Qué hago si mi sitio tiene una vulnerabilidad?

Primero que nada, tranquilidad. Investiga cuál es la vulnerabilidad y, sobre todo, comprueba que tienes la última versión del elemento comprometido. Te recomendamos activamente que mantengas todo tu WordPress y sus plugins actualizados. Contacta a tu proveedor de alojamiento para parchear vulnerabilidades que no son de WordPress (como el servidor web, bases de datos y otro software).

Reseñas

28 de enero de 2025 1 respuesta
Without a doubt, the most important plugin to install on your WordPress instance.
17 de abril de 2024
Vulnerabilities are listed into your plugins list.You should also being able to receive an automatic email too. It doesn’t work on my system, but email test yes.So awesome plugin anyway!
8 de abril de 2024 1 respuesta
Exactly what I was looking for ! On the roadmap, it would be nice if : we can chose if we want to receive an email OR not (I may use it as a vuln reminder on the dashboard, as I have other plugins already keeping me informed) we can chose what will be in the email – php or not for exemple (it seems that it is planned, thanks) only receive an email if one the vuln is considered high risk etc.
21 de febrero de 2024
This plugin alerts you about known vulnerabilities in your WordPress core, plugins, themes, and even PHP, so you can take action in a timely manner. If you don’t have this plugin on your site already, you absolutely need it!
Leer todas las 19 reseñas

Colaboradores y desarrolladores

«WPVulnerability» es un software de código abierto. Las siguientes personas han colaborado con este plugin.

Colaboradores

«WPVulnerability» está traducido en 14 idiomas. Gracias a los traductores por sus contribuciones.

Traduce «WPVulnerability» a tu idioma.

¿Interesado en el desarrollo?

Revisa el código , echa un vistazo al repositorio SVN o suscríbete al registro de desarrollo por RSS.

Registro de cambios

[5.1.1] – 2026-07-09

Corregido

  • Salud del sitio: las pruebas de vulnerabilidad de memcached, Redis y SQLite siempre devolvían «Tipo de software no válido» porque esos componentes faltaban en la lista de software. Ahora se ejecutan correctamente.
  • «Enviar correo de prueba» fallaba cuando no había destinatarios de correo configurados: la ruta de prueba forzada añadía el correo del administrador, pero la comprobación de envío usaba un indicador calculado antes de esa anulación. El correo de prueba ahora se envía correctamente.
  • «Ejecutar notificación ahora» informaba de un fallo cuando solo estaban activados los canales de webhook (Slack/Teams/Discord/Telegram) y el correo estaba desactivado. El resultado de la notificación ahora refleja si algún canal se entregó correctamente.
  • Los eventos cron de notificación semanal nunca se programaban automáticamente, porque la programación cron weekly solo se registraba en init, mientras que la programación en la carga se ejecuta antes. El registro de la programación semanal/diaria se trasladó al planificador que se carga siempre, para que las notificaciones semanales se programen correctamente.
  • La desactivación eliminaba la configuración de análisis por componente (wpvulnerability-analyze), por lo que desactivar y reactivar restablecía qué componentes estaban ocultos. Ahora la configuración de análisis se conserva al desactivar (solo la desinstalación la elimina).
  • El panel de depuración «Estado de cron» siempre mostraba el evento de notificación como «no programado» porque comprobaba un nombre de hook incorrecto (wpvulnerability_send_notification en lugar de wpvulnerability_notification).
  • La marca de tiempo «última ejecución» de depuración siempre estaba vacía porque leía una opción wpvulnerability-logs que nunca se escribe; ahora lee la entrada de registro de la API más reciente.
  • La detección de Redis llamaba a close() dos veces en la ruta de éxito (una vez en el bloque try y otra en finally); se eliminó el cierre redundante.
  • El recuento de temas vulnerables en sitio individual estaba fijado a 0 en lugar de leer la opción almacenada.

Modificado

  • La sanitización de destinatarios de correo en sitio individual ahora usa is_email() para una validación estricta, igualando el comportamiento de multisitio.
  • Se eliminó un campo de nonce redundante del formulario «Restablecer plugin» de sitio individual (el formulario solo envía la acción de restablecimiento completo).
  • Se eliminó código muerto: la función de retorno wpvulnerability_sanitize_messages sin uso y su registro de ajuste, y una variable $tools_action sin uso en la administración de multisitio.

[5.1.0] – 2026-07-08

Seguridad

  • wpvulnerability_validate_shell_command() ahora usa una coincidencia exacta con in_array() en lugar de una coincidencia de subcadena con stripos() para la lista blanca de comandos de shell (defensa en profundidad).
  • wpvulnerability_detect_php(), wpvulnerability_detect_curl() y wpvulnerability_detect_webserver() ahora pasan por wpvulnerability_safe_shell_exec(), de modo que cada llamada de shell de detección de software se valida y se registra en el registro de auditoría de ejecución de shell. Antes llamaban directamente a shell_exec(), saltándose el envoltorio y el registro de auditoría. Como efecto secundario, esto también corrige la detección de la versión de nginx/angie: escapeshellcmd() escapaba la redirección 2>&1, por lo que stderr (donde nginx imprime su versión) nunca se capturaba.

Corregido

  • Error fatal en la desinstalación de multisitio: Uncaught Error: Undefined constant "WPVULNERABILITY_PLUGIN_BASE" cuando estaba activada la opción «Eliminar todos los datos del plugin al desinstalar». uninstall.php ahora define la constante antes de cargar wpvulnerability-run.php.
  • Las constantes WPVULNERABILITY_HIDE_* ahora detienen la detección con shell_exec para los componentes ocultos durante los análisis programados y en el panel de administración «Métodos de detección de software». Antes solo ocultaban los resultados en la interfaz, por lo que el registro de auditoría se seguía llenando de entradas «comando no encontrado» para componentes que el administrador había desactivado explícitamente.
  • wpvulnerability_detect_webserver() ya no sondea mediante shell un servidor web oculto a través de la ruta hermana: WPVULNERABILITY_HIDE_NGINX y WPVULNERABILITY_HIDE_APACHE ahora aíslan por completo el servidor oculto.
  • Las peticiones cron de multisitio en subsitios que no son el principal ya no cargan todos los archivos de módulos del plugin. No se programa ningún evento cron de WPVulnerability en los subsitios, por lo que esa carga adicional era trabajo innecesario.
  • La detección por shell de LiteSpeed / OpenLiteSpeed / Caddy en el panel de diagnóstico de WP_DEBUG ahora funciona: los comandos ya no usan 2>/dev/null (que el validador de comandos de shell rechazaba), se añadió caddy a la lista blanca, y la salida de which se valida como una ruta real para que los mensajes «comando no encontrado» no se confundan con una detección.

Modificado

  • Se añadió Network: true a la cabecera del plugin para declarar un comportamiento compatible con multisitio.
  • Se eliminó el parámetro $plugin_status sin uso de wpvulnerability_plugin_info_after(); la suite de PHPCS ahora pasa sin ningún aviso.
  • Escritorio de red multisitio: el enlace del pie de página «Salud del sitio» apuntaba a wp-admin/network/site-health.php, que no existe (Salud del sitio es una pantalla por sitio). Ahora enlaza a wp-admin/site-health.php del sitio principal.

[5.0.1] – 2026-06-02

Corregido

  • Se eliminó wp_cache_flush() del hook de actualización de plugins/temas y de la rutina de restablecimiento del plugin. La función vaciaba toda la caché de objetos (Redis, Memcached, APCu) en cada actualización, provocando picos de CPU en sitios de alto tráfico. La limpieza selectiva de transients que ya se ejecuta antes es suficiente.

[5.0.0] – 2026-05-26

Añadido

  • Los paneles de detalle de vulnerabilidades se han rediseñado por completo: insignia de puntuación/gravedad inspirada en Bootstrap, píldoras de atribución de fuente (nombre de host extraído de la URL) y una fila estructurada «Referencias:» en la misma línea que las píldoras.
  • Orden de prioridad de CVSS: CVSS 4 > CVSS 3 > CVSS 2 > CVSS heredado. Siempre se muestra la puntuación y gravedad más altas disponibles.
  • Campo ssvc.exploitation mostrado: poc insignia «⚡ Exploit público»; active incluido en la etiqueta KEV «Explotado activamente».
  • ssvc.automatable: yes insignia «⚙ Automatizable» junto a KEV/PoC.
  • ssvc.kev_date fecha añadida a la etiqueta «Explotado activamente» (por ejemplo, «⚠ Explotado activamente · 2024-03-15»).
  • Campo epss insignia «EPSS X,X %» en la misma línea que la insignia de puntuación CVSS.
  • La descripción del CVE (source[].description) ahora se muestra para todos los tipos de vulnerabilidades: plugins, temas, núcleo y software del servidor. El prefijo de idioma (por ejemplo, [en-US]) se elimina automáticamente.
  • El nombre y la descripción de CWE se muestran ahora en los detalles de vulnerabilidades del software del servidor (antes faltaban).
  • Las vulnerabilidades del núcleo en update-core.php ahora se muestran con las mismas insignias, descripción y píldoras que las filas de plugins/temas (sustituye a la antigua tabla simple).
  • Ventana modal de detalles del tema (sitio individual): la sección de vulnerabilidades se inserta después del campo Etiquetas mediante el filtro wp_prepare_themes_for_js y un parche de plantilla JS. Muestra el mismo diseño de rango de versión + insignia + descripción + referencias que las filas de plugins.
  • Visualización de rango de versión: se elimina el - o * inicial cuando no hay límite inferior (por ejemplo, - < 1.3.28 < 1.3.28).
  • Funciones auxiliares añadidas a wpvulnerability-process.php: wpvulnerability_source_css_slug(), wpvulnerability_render_source_pills(), wpvulnerability_render_score_badge(), wpvulnerability_clean_version_range(), wpvulnerability_get_source_description().
  • Funciones auxiliares añadidas a wpvulnerability-themes.php: wpvulnerability_theme_modal_html(), wpvulnerability_filter_prepare_themes_for_js(), wpvulnerability_theme_modal_template_patch().
  • Insignia KEV mostrada en los detalles de vulnerabilidades cuando el CVE aparece en el catálogo Known Exploited Vulnerabilities (KEV) de CISA (impact.ssvc.kev para plugins/temas/núcleo; impact.kev para software del servidor).
  • La gravedad de la vulnerabilidad ahora utiliza el valor de palabra completa de cvss3.severity ("critical", "high", "medium", "low") cuando está disponible, recurriendo al código heredado de un solo carácter cvss.severity en caso contrario.
  • Fecha de publicación mostrada junto a cada enlace de fuente en los detalles de vulnerabilidades (campo source[].date de la API).
  • Estado del ciclo de vida del software del servidor (Compatible / Fin de vida + fecha de fin de vida) en los detalles de vulnerabilidades y en la cuadrícula del escritorio (campos data.status, data.date_end de la API).
  • Insignia de fin de vida en la cuadrícula de software del escritorio (PHP, Apache, nginx, MariaDB, MySQL, ImageMagick, curl, memcached, Redis, SQLite) cuando la versión detectada ha llegado a su fin de vida.
  • API REST: todas las rutas finales de vulnerabilidades ahora exponen uuid, kev (booleano), el bloque ssvc y severity de cvss3. Las entradas de fuente incluyen un campo date.
  • Pestaña Acerca de: nueva tabla de fuentes de inteligencia que muestra el número de vulnerabilidades por fuente (CVE, EUVD, JVN, Patchstack, WPScan, Wordfence) desglosado por núcleo/plugins/temas.

Seguridad

  • wpvulnerability-adminms.php: el gestor del formulario de configuración ahora requiere la capacidad manage_network_options (mediante current_user_can()) además de la comprobación de nonce. Antes, un usuario con un nonce válido podía actualizar las opciones del plugin sin la capacidad requerida.
  • WP-CLI: todos los comandos de vulnerabilidades (core, plugins, themes y todos los componentes de software) y todos los comandos de configuración (hide, email, cache, log-retention, period) ahora requieren manage_options / manage_network_options. Los comandos se cancelan con un error claro y una sugerencia --user=<admin_login> si la comprobación falla.
  • La comprobación de permisos de la API REST ahora pasa el modo estricto (true) a base64_decode() al analizar la cabecera HTTP Basic Authorization. Un token mal formado o sin relleno se rechaza de inmediato, en lugar de decodificar bytes impredecibles.
  • La detección de servidor web en depuración (LiteSpeed, OpenLiteSpeed, Caddy) ahora pasa por el envoltorio wpvulnerability_safe_shell_exec(), garantizando que WPVULNERABILITY_DISABLE_SHELL_EXEC, el modo de seguridad, la lista blanca de comandos y el registro de auditoría se respeten incluso cuando WP_DEBUG está activado.
  • Las funciones de renderizado de página (wpvulnerability_create_admin_page, wpvulnerability_admin_dashboard_content) ahora incluyen comprobaciones explícitas de current_user_can() / wp_die() como defensa en profundidad, según el manual de plugins de WordPress.

Corregido

  • El correo de prueba forzado en una instalación nueva (sin ninguna dirección de correo configurada todavía) ya no genera un E_WARNING en PHP 7.x ni un TypeError en PHP 8.x.
  • La llamada a determine_locale() ahora se protege con function_exists() en lugar de version_compare(), lo cual es más compatible con versiones futuras y se reconoce correctamente en el análisis estático.
  • Los valores de retorno de preg_replace() en el convertidor de HTML a texto plano ahora se gestionan de forma segura cuando se devuelve null en caso de error.
  • Se añadió una comprobación de valor nulo para DOMDocument::$documentElement en el convertidor de HTML a texto plano.
  • Las opciones de recuento de vulnerabilidades codificadas en JSON se validan como cadenas antes de json_decode() en todo el código.
  • Las funciones de retorno de cron_schedules ahora usan una comprobación con did_action('init') antes de __(), eliminando el aviso de textdomain prematuro introducido en WordPress 6.7.
  • Los comandos de vulnerabilidades de WP-CLI ahora muestran un mensaje de éxito claro cuando no se encuentran vulnerabilidades, en lugar de una tabla vacía.
  • WP-CLI config period monthly ahora devuelve un error correcto. Periodos válidos: daily, weekly, never.
  • Se creó uninstall.php. Los datos del plugin se conservan por defecto; una nueva casilla «Eliminar todos los datos del plugin al desinstalar» en la pestaña Herramientas permite optar por la eliminación completa.
  • Las opciones de datos de vulnerabilidades de gran tamaño ahora se almacenan con autoload=false, evitando la carga innecesaria de bloques JSON en cada petición de WordPress.

Modificado

  • La versión mínima requerida de PHP se elevó de 5.6 a 7.0. El operador de fusión de null (??), utilizado en todo el código para mejorar la seguridad de tipos, requiere PHP 7.0. PHP 5.6 llegó a su fin de vida en diciembre de 2018.
  • La versión mínima requerida de WordPress se elevó de 4.7 a 5.6, lo que permite usar plenamente las contraseñas de aplicación, wp_timezone(), wp_date() y determine_locale() sin comprobaciones de versión.
  • wpvulnerability_get_cron_snapshot() ahora solo utiliza funciones públicas de la API de Cron de WordPress (wp_next_scheduled(), wp_get_schedule()); se eliminó _get_cron_array() (API privada de WP).

Desarrollador

  • PHPStan nivel 9: 0 errores en los 18 archivos PHP; se resolvieron 1092 errores de tipo preexistentes; la línea base ahora está vacía.
  • Añadidas herramientas de desarrollo: composer.json, phpstan.neon (nivel 9), phpcs.xml, phpunit.xml.dist, bin/deploy.sh, docs/.
  • Añadidas 18 pruebas de PHPUnit para la cabecera del plugin.

Compatibilidad

  • WordPress: 5.6 – 7.1
  • PHP: 7.0 – 8.5
  • WP-CLI: 2.3.0 – 2.12.0

Pruebas

  • PHP Coding Standards: 3.13.5
  • WordPress Coding Standards 3.3.0.
  • PHPStan: 2.1.55 (nivel 9, 0 errores)
  • PHPUnit: 9.6.34 (18 pruebas)
  • Plugin Check (PCP): 1.8.0

[4.3.2] – 2026-05-20

Rendimiento

  • La programación de notificaciones ya no reescribe la fila cron en wp_options en cada petición de WordPress. La llamada en el arranque ahora verifica la programación actual con wp_get_schedule() y solo elimina o reprograma el evento wpvulnerability_notification cuando el periodo deseado realmente difiere del programado actualmente. Esto elimina 1-2 consultas UPDATE wp_options innecesarias por carga de página, reduciendo la contención de bloqueos bajo carga concurrente y las entradas correspondientes en el registro de consultas lentas de MariaDB/MySQL.

Modificado

  • wpvulnerability_schedule_notification_event() ha incorporado un parámetro opcional $force (por defecto true, compatible con versiones anteriores). La invocación en el arranque pasa false para optar por la ruta idempotente; el resto de invocaciones (gestores de guardado de administración, comando de configuración de WP-CLI, flujo de actualización, funciones de reparación) mantienen el valor predeterminado y siguen forzando una reprogramación, de modo que los cambios de hora/minuto/día sigan actualizando la marca de tiempo de la próxima ejecución.

Compatibilidad

  • WordPress: 4.7 – 6.9
  • PHP: 5.6 – 8.5
  • WP-CLI: 2.3.0 – 2.11.0

Pruebas

  • PHP Coding Standards: 3.13.5
  • WordPress Coding Standards 3.3.0.
  • Plugin Check (PCP): 1.8.0

[4.3.1] – 2026-01-20

Corregido

  • El widget del escritorio ahora cuenta correctamente solo las vulnerabilidades de los componentes activados, excluyendo los desactivados en la configuración.
  • El cálculo de la insignia de estado (Crítico/Advertencia) ahora considera correctamente solo los componentes activados al determinar el nivel de gravedad.
  • Corregidos los avisos de PHPCS para variables globales sin el prefijo del plugin en wpvulnerability-admin.php y wpvulnerability-adminms.php.

Compatibilidad

  • WordPress: 4.7 – 6.9
  • PHP: 5.6 – 8.5
  • WP-CLI: 2.3.0 – 2.11.0

Pruebas

  • PHP Coding Standards: 3.13.5
  • WordPress Coding Standards 3.3.0.
  • Plugin Check (PCP): 1.8.0

[4.3.0] – 2026-01-19

Aspectos destacados

Esta versión mayor incorpora un rediseño completo de la interfaz de administración, herramientas de depuración completas, seguridad mejorada y nuevos canales de notificación.

  • Rediseño completo de la interfaz de administración: diseño moderno basado en tarjetas con tarjetas visuales de componentes, espaciado mejorado, insignias de estado codificadas por color y diseños de cuadrícula adaptables en todas las pestañas de configuración (Seguridad, Acerca de, Registros, Herramientas, Análisis y Notificaciones).
  • Nuevo modo de depuración: herramientas de depuración completas visibles cuando WP_DEBUG está activado, incluyendo Información del sistema, Detección de componentes con estado de caché, pruebas interactivas de la API con botones AJAX, Resumen de configuración, Estado de cron con ejecución manual, Visor de opciones de base de datos y Acciones rápidas (vaciar cachés, restablecer firmas, exportar datos de depuración como JSON). Incluye detección mejorada de servidores web para 9 servidores diferentes.
  • Rediseño del widget del escritorio: interfaz moderna con insignias de estado destacadas (Todo correcto/Problemas encontrados/Problemas críticos encontrados), marca de tiempo de la última comprobación en formato legible, vista de estado vacío con marca de verificación centrada, secciones de componentes separadas (Componentes de WordPress frente a Software del servidor), insignias codificadas por color y diseño de cuadrícula de 2 columnas para el software del servidor.
  • Nuevos canales de notificación: soporte para webhooks de Discord e integración de bot de Telegram para avisos de vulnerabilidades, con gestión correcta del límite de caracteres y validación de URL de webhook.
  • Seguridad mejorada: protección CSRF mediante nonces para los filtros de vulnerabilidades de plugins/temas, sistema de detección híbrido de software (extensiones PHP primero, comandos de shell como alternativa), registro de auditoría completo para las ejecuciones de shell, validación de URL de webhook con exigencia de HTTPS y lista blanca de dominios, y nuevas constantes de seguridad en wp-config.php.
  • Mejoras de multisitio: corregidos todos los problemas de envío de formularios en el administrador de red, gestión correcta de nonces, generación correcta de URL con network_admin_url(), conservación de la configuración al guardar formularios individuales, y pestaña de seguridad corregida con todas las funciones auxiliares necesarias.
  • Herramientas y mantenimiento: funcionalidad de reparación de eventos cron para sitios individuales y redes multisitio, botón «Eliminar todos los registros», acción de restablecimiento completo del plugin y gestión de caché mejorada.

Añadido

  • La pestaña Herramientas ahora muestra los eventos cron esperados de WPVulnerability, las instancias programadas, y permite a los administradores repararlos en sitios individuales.
  • Herramientas de red destaca los eventos cron inesperados de WPVulnerability en los subsitios y ofrece una reparación con un clic para eliminarlos y reprogramarlos en toda la red.
  • La pestaña Registros ahora incluye un botón «Eliminar todos los registros» para purgar manualmente las entradas de registro de la API almacenadas.
  • Sistema de detección híbrido de software: extensiones PHP primero (más seguro), comandos de shell como alternativa (más preciso).
  • Sistema de control de seguridad de cuatro niveles para el uso de shell_exec con configuración granular.
  • Validación de comandos de shell con lista blanca y detección de patrones peligrosos.
  • Registro de auditoría completo para todas las ejecuciones de shell (componente, comando, salida, usuario, IP, marca de tiempo).
  • Nuevas constantes de wp-config.php: WPVULNERABILITY_DISABLE_SHELL_EXEC, WPVULNERABILITY_SECURITY_MODE, WPVULNERABILITY_SHELL_EXEC_WHITELIST.
  • Puntuación de fiabilidad de detección (0-100) para cada método de detección de software.
  • Soporte de webhook de Discord para avisos de vulnerabilidades con gestión del límite de 2000 caracteres.
  • Soporte de bot de Telegram para avisos de vulnerabilidades con configuración de token de bot e ID de chat.
  • Enlaces de documentación para configurar el webhook de Discord (https://support.discord.com/hc/articles/228383668).
  • Enlaces de documentación para configurar el bot de Telegram (https://core.telegram.org/bots).
  • Pestaña de depuración (visible solo cuando WP_DEBUG está activado) que ofrece herramientas de depuración completas para los administradores.
  • Archivo «wpvulnerability-debug.php» con 11 funciones auxiliares para la depuración (~18 KB).
  • Sección de depuración 1: Información del sistema, mostrando la versión de WordPress, versión/extensiones/memoria de PHP, tipo de base de datos (MariaDB frente a MySQL con detección correcta), servidor web (nginx/Apache/LiteSpeed/OpenLiteSpeed/Caddy/IIS/Angie/OpenResty/Tengine), estado de los modos de depuración e información del archivo de registro de depuración.
  • Información del archivo de registro de depuración que muestra la ruta del archivo, el tamaño y un enlace directo del navegador cuando es accesible desde la web.
  • Sección de depuración 2: tabla de detección de componentes que enumera los 13 componentes con estado de detección, versión, estado analizado y tiempo de caducidad de la caché.
  • Sección de depuración 3: pruebas de API con botones interactivos basados en AJAX para probar la conectividad de la API de cada componente individualmente, mostrando el estado HTTP, el tiempo de respuesta y una vista previa de los datos.
  • Sección de depuración 4: resumen de configuración que muestra de un vistazo los ajustes actuales del plugin.
  • Sección de depuración 5: estado de cron, mostrando las tareas programadas con botones de ejecución manual (restringidos por permisos con verificación de nonce).
  • Sección de depuración 6: visor de opciones de base de datos con un desplegable para inspeccionar todas las opciones almacenadas del plugin.
  • Sección de depuración 7: acciones rápidas con botones para vaciar todas las cachés, restablecer las firmas de plugins/temas y exportar la información de depuración como JSON.
  • Detección de servidor web mejorada compatible con 9 servidores diferentes: nginx, Angie (bifurcación de nginx), Apache, LiteSpeed, OpenLiteSpeed, Caddy, IIS, OpenResty (basado en nginx) y Tengine (bifurcación de nginx).
  • Lógica de detección de tres niveles para servidores web: (1) función estándar del plugin, (2) análisis de SERVER_SOFTWARE, (3) comandos de shell como alternativa.
  • La detección de base de datos distingue correctamente MariaDB de MySQL mediante la consulta SQL version_comment.
  • Gestor AJAX wpvulnerability_ajax_test_api() para pruebas de la API con verificación de nonce y comprobación de capacidades.
  • Funciones auxiliares de depuración: wpvulnerability_debug_get_log_file_info(), wpvulnerability_debug_detect_webserver(), wpvulnerability_debug_get_system_info(), wpvulnerability_debug_get_component_status(), wpvulnerability_debug_test_api_component(), wpvulnerability_debug_get_cron_status(), wpvulnerability_debug_export_info(), wpvulnerability_debug_clear_all_caches(), wpvulnerability_debug_reset_signatures(), wpvulnerability_debug_get_option_names().
  • Gestores POST de la pestaña de depuración tanto en wpvulnerability-admin.php como en wpvulnerability-adminms.php, con verificación de nonce para todas las acciones.
  • Funciones de renderizado de la pestaña de depuración en wpvulnerability-admin.php: wpvulnerability_render_admin_tab_debug(), wpvulnerability_render_debug_section_system_info(), wpvulnerability_render_debug_section_components(), wpvulnerability_render_debug_section_config(), wpvulnerability_render_debug_section_cron(), wpvulnerability_render_debug_section_api_testing(), wpvulnerability_render_debug_section_database_options(), wpvulnerability_render_debug_section_quick_actions().

Seguridad

  • Añadida protección CSRF mediante nonces para los enlaces de filtro de vulnerabilidades de plugins, para prevenir ataques de navegación forzada.
  • Añadida protección CSRF mediante nonces para los enlaces de filtro de vulnerabilidades de temas, para prevenir ataques de navegación forzada.
  • Las URL de filtro de plugins y temas ahora incluyen nonces de seguridad que se verifican antes de aplicar los filtros.
  • Seguridad mejorada frente a ataques de temporización en la enumeración de vulnerabilidades, exigiendo nonces válidos.
  • Detección de ImageMagick, Redis, Memcached y SQLite mejorada con un enfoque híbrido y controles de seguridad.
  • Todos los comandos de shell están predefinidos y validados; no interviene ninguna entrada del usuario.
  • Envoltorio de ejecución de shell con comprobaciones de seguridad completas y registro.
  • Las URL de webhook ahora se validan al guardar: exige HTTPS y verifica que el nombre de host coincida con los dominios permitidos (Slack: hooks.slack.com, Teams: office.com/office365.com/api.hooks.microsoft.com, Discord: discord.com/discordapp.com).
  • Validación del token del bot de Telegram con comprobación de patrón mediante expresión regular (formato: 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11).
  • Las URL de webhook y los tokens de bot no válidos se rechazan con mensajes de error claros para el usuario, en lugar de fallar silenciosamente al enviar el aviso.
  • Puntuación de la auditoría de seguridad mejorada de 85/100 a 98/100 (auditoría de seguridad completa finalizada el 2026-01-19).

Modificado

  • El hook de error de base de datos ahora lanza la acción con prefijo wpvulnerability_wpdb_last_error, manteniendo el hook antiguo obsoleto.
  • El cron de actualización de la base de datos ahora sigue la duración de caché configurada (cada hora, 6h, 12h o 24h).
  • Las traducciones se cargan en init para evitar avisos de textdomain prematuros.
  • Los datos de vulnerabilidades ahora solo se actualizan mediante el cron programado o la acción de recarga manual; las peticiones de administración, REST, CLI, notificaciones y renderizado de vistas ya no generan llamadas a la API, reduciendo así la carga.
  • La programación de cron ya no reprograma el evento de actualización en cada carga de página; mantiene el intervalo configurado (cada hora/6h/12h/24h) a menos que cambie la programación.
  • La API REST ahora requiere capacidades de administrador para el acceso mediante sesión o contraseña de aplicación.
  • Las acciones de restablecimiento y de correo de prueba del administrador exigen capacidades de administrador.
  • Los tiempos de espera del cliente de la API se corrigieron a 2,5 segundos para evitar bloqueos prolongados.
  • Los webhooks de Slack/Teams se restringen a hosts HTTPS permitidos para limitar la exposición a SSRF.
  • La pestaña Herramientas añade una acción de restablecimiento completo que borra todos los datos del plugin, restaura los valores predeterminados y recarga desde la API.
  • Rediseño completo de la interfaz de configuración de administración con un diseño moderno basado en tarjetas para todas las pestañas: Seguridad, Acerca de, Registros, Herramientas, Análisis y Notificaciones.
  • Las pestañas de configuración ahora incluyen tarjetas visuales de componentes con iconos, espaciado mejorado, insignias de estado codificadas por color y diseños de cuadrícula adaptables para mejorar la usabilidad.
  • Rediseño completo del widget del escritorio, con una interfaz moderna y limpia que sustituye el diseño de lista básico.
  • El widget del escritorio ahora muestra una insignia de estado destacada con tres estados: «Todo correcto» (verde, 0 vulnerabilidades), «X problemas encontrados» (amarillo, problemas menores), «X problemas críticos encontrados» (rojo, núcleo/PHP vulnerable o 5 o más vulnerabilidades en total).
  • El widget del escritorio muestra la marca de tiempo de la última comprobación en formato legible («hace X minutos», «hace X horas») y un enlace «Actualizar ahora».
  • El widget del escritorio muestra un atractivo estado vacío con una marca de verificación verde centrada cuando no se detectan vulnerabilidades.
  • El widget del escritorio separa los componentes en dos secciones claras: «Componentes de WordPress» (núcleo, plugins, temas) y «Software del servidor» (PHP, servidor web, base de datos, etc.).
  • El widget del escritorio utiliza insignias codificadas por color: verde para seguro (✓ 0), amarillo/rojo para vulnerabilidades (✕ N) con un diseño coherente.
  • El widget del escritorio muestra el software del servidor en un diseño de cuadrícula de 2 columnas para aprovechar mejor el espacio.
  • El widget del escritorio muestra las listas de plugins/temas vulnerables sangradas debajo de sus respectivos componentes.
  • El widget del escritorio utiliza CSS en línea con un estilo moderno: diseños flexbox, espaciado correcto, paleta de colores del administrador de WordPress y tipografía mejorada (13 px componentes, 12 px metadatos).
  • El pie del widget del escritorio incluye enlaces a Salud del sitio y Configuración con separación visual.
  • Todos los nombres de clase CSS, ID de HTML y referencias de JavaScript se cambiaron del prefijo corto .wpv- al prefijo completo .wpvulnerability- para evitar conflictos de nomenclatura con otros plugins y temas (afecta a más de 73 clases únicas en los paneles de administración).
  • Todo el CSS en línea de los paneles de administración se trasladó al archivo externo assets/admin.css para mejorar el rendimiento y la posibilidad de almacenamiento en caché (~1084 líneas extraídas de 14 bloques de estilo en los paneles de administración de sitio individual y multisitio).
  • Licencia actualizada de GPL2+ a GPL3+.

Corregido

  • Guardar formularios parciales (por ejemplo, la retención de registros) ya no restablece otros ajustes de notificaciones a sus valores predeterminados; los valores existentes se conservan a menos que se modifiquen explícitamente.
  • La configuración de red (adminms) ahora conserva los valores existentes al guardar formularios individuales y mantiene coherente la programación de notificaciones.
  • La columna de caché en Detección de componentes (pestaña de depuración) ahora muestra correctamente el tiempo de caducidad de la caché, decodificando correctamente las marcas de tiempo codificadas en JSON de la base de datos.
  • La detección de base de datos ahora distingue correctamente entre MariaDB y MySQL, en lugar de mostrar siempre «MySQL».
  • Los formularios del administrador de red en multisitio (Notificaciones, Análisis, Configuración) ahora se envían correctamente utilizando las URL de administrador de red y los nonces adecuados, en lugar de métodos incompatibles de la Settings API.
  • Todos los botones de envío de formularios en la administración de multisitio ahora incluyen el atributo name correcto (wpvulnerability_submit) para el procesamiento en el backend.
  • El formulario de eliminación de registros en multisitio ahora usa network_admin_url() en lugar de admin_url() de sitio individual, para generar correctamente la URL.
  • Todas las verificaciones de nonce de formularios en multisitio ahora coinciden con sus campos de nonce correspondientes (restablecer, correo, reparar cron, eliminar registros), en lugar de usar un nonce genérico.
  • La pestaña de seguridad en la administración de red multisitio ahora funciona correctamente al incluir todas las funciones auxiliares necesarias (wpvulnerability_display_security_status, wpvulnerability_display_detection_methods, wpvulnerability_display_security_logs), en lugar de llamar a funciones de sitio individual no definidas.
  • Los botones de la pestaña Herramientas en la administración de red multisitio ya no muestran errores de «nonce caducado», al enviar los formularios a la misma página (action=»») en lugar de rutas de URL explícitas que fallan en la validación del referente.
  • El botón Eliminar todos los registros en la pestaña Registros ya no muestra el error «El enlace que has seguido ha caducado», al usar una acción de formulario vacía (action=»») tanto en los paneles de administración de sitio individual como de multisitio.
  • La paginación de la pestaña Registros ahora se muestra horizontalmente en lugar de verticalmente, dirigiéndose correctamente a los elementos de lista (ul con inline-flex) y a los enlaces de página individuales (a y span dentro de li) para funcionar correctamente con la salida de paginate_links() de WordPress con ‘type’ => ‘list’.

Compatibilidad

  • WordPress: 4.7 – 6.9
  • PHP: 5.6 – 8.5
  • WP-CLI: 2.3.0 – 2.11.0

Pruebas

  • PHP Coding Standards: 3.13.5
  • WordPress Coding Standards 3.3.0.
  • Plugin Check (PCP): 1.8.0

[4.2.2.1] – 2026-01-16

Seguridad

  • Corregida una vulnerabilidad de autorización en las rutas finales de la API REST que permitía a usuarios con pocos privilegios acceder a datos sensibles de vulnerabilidades. La API ahora verifica correctamente las capacidades del usuario (manage_options en sitios individuales, manage_network_options en multisitio) además de la autenticación.
  • Añadida protección contra acceso directo en wpvulnerability-api.php para evitar la ejecución directa del archivo fuera del contexto de WordPress.

Compatibilidad

  • WordPress: 4.7 – 6.9
  • PHP: 5.6 – 8.4
  • WP-CLI: 2.3.0 – 2.11.0

Pruebas

  • PHP Coding Standards: 3.13.5
  • WordPress Coding Standards 3.3.0.
  • Plugin Check (PCP): 1.8.0

[4.2.1] – 2025-12-17

Corregido

  • Elimina los eventos cron heredados de WPVulnerability en los subsitios de multisitio para que las actualizaciones y la limpieza de registros solo se ejecuten en el sitio principal.

Compatibilidad

  • WordPress: 4.7 – 6.9
  • PHP: 5.6 – 8.4
  • WP-CLI: 2.3.0 – 2.11.0

Pruebas

  • PHP Coding Standards: 3.13.5
  • WordPress Coding Standards 3.3.0.
  • Plugin Check (PCP): 1.7.0

Versiones anteriores

Si quieres ver el registro de cambios completo, visita el archivo changelog.txt.