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>
  • Log retention: wp wpvulnerability config log-retention <0|1|7|14|28> (in days)
  • 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 agregando 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 );

Log rotation (since: 4.2.0)

WPVulnerability stores the most recent API responses so you can review recent calls from the new log tab. Define WPVULNERABILITY_LOG_RETENTION_DAYS in wp-config.php to control how many days of entries are preserved. Supported values are 0, 1, 7, 14 or 28; using 0 disables logging entirely.

define( 'WPVULNERABILITY_LOG_RETENTION_DAYS', 14 );

When the constant is present its value is enforced in the settings UI and through WP-CLI, ensuring consistent log rotation across environments.

Security configuration (since: 4.3.0)

WPVulnerability uses a hybrid detection approach for server software (ImageMagick, Redis, Memcached, SQLite): PHP extensions first (most secure), then shell commands as fallback (most accurate). You can control this behavior using security configuration constants in wp-config.php.

Global disable of shell commands:

define( 'WPVULNERABILITY_DISABLE_SHELL_EXEC', true );

Completely disables shell command usage. Falls back to PHP extensions only. Use for maximum security when accuracy loss is acceptable.

Security mode (standard/strict/disabled):

define( 'WPVULNERABILITY_SECURITY_MODE', 'strict' );
  • standard – Hybrid detection: PHP extensions first, shell commands fallback (default, best accuracy)
  • strict – PHP extensions only, no shell commands (high security, lower accuracy)
  • disabled – No software detection at all (maximum security)

Component whitelist:

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

Allows shell commands only for specified components. Available components: imagemagick, redis, memcached, sqlite. Use for granular control.

Examples:

Maximum security (no shell commands):

define( 'WPVULNERABILITY_SECURITY_MODE', 'strict' );

Only allow ImageMagick shell detection:

define( 'WPVULNERABILITY_SHELL_EXEC_WHITELIST', 'imagemagick' );

Complete disable:

define( 'WPVULNERABILITY_DISABLE_SHELL_EXEC', true );

All shell commands are hardcoded and validated – no user input is involved. Commands are logged for security auditing.

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

  • A security vulnerability was found and fixed in version 4.2.2.1. All previous versions (3.3.0 – 4.2.1) are affected. Please update to version 4.2.2.1 or later.

Found a security vulnerability? Please report it to us privately at ROBOTSTXT.

Colaboradores

You can contribute to this plugin at the WPVulnerability repository.

Capturas de pantalla

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 los 19 comentarios

Colaboradores & Desarrolladores

“WPVulnerability” es software de código abierto. Las siguientes personas han contribuido a este plugin.

Colaboradores

“WPVulnerability” ha sido 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 .

Historial de cambios

[5.1.2] – 2026-08-07

Corregido

  • Missing load_plugin_textdomain() call caused a “Translation loading for the wpvulnerability domain was triggered too early” _doing_it_wrong() notice on WordPress 6.7+. The textdomain is now explicitly loaded on the init hook.

Agregado

  • WordPress Playground blueprint (blueprint.json) with pre-installed vulnerable plugins and a theme for quick testing.

Modificado

  • Security vulnerability reporting link updated to ROBOTSTXT.
  • Contributor repository link updated to git.robotstxt.es/ROBOTSTXT/wpvulnerability.
  • The readme.txt Changelog section now shows only the latest 3 versions; the full history remains in changelog.txt.

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 (level 9, 0 errors)
  • PHPUnit: 9.6.34 (25 tests)

[5.1.1] – 2026-07-09

Corregido

  • Site Health: the memcached, Redis, and SQLite vulnerability tests always returned “Invalid software type” because those components were missing from the software list. They now run correctly.
  • “Send test email” failed when no email recipients were configured: the forced-test path added the admin email but the send gate used a flag computed before the override. The test email now sends.
  • “Run notification now” reported failure when only webhook channels (Slack/Teams/Discord/Telegram) were enabled and email was disabled. The notification result now reflects whether any channel delivered successfully.
  • Weekly notification cron events were never auto-scheduled, because the weekly cron schedule was registered only at init while the on-load scheduling runs earlier. The weekly/daily schedule registration moved to the always-loaded scheduler so weekly notifications schedule correctly.
  • Deactivation deleted the per-component analysis settings (wpvulnerability-analyze), so deactivating and reactivating reset which components were hidden. Analysis settings are now preserved on deactivation (only uninstall removes them).
  • The debug “Cron Status” panel always showed the notification event as “not scheduled” because it checked the wrong hook name (wpvulnerability_send_notification instead of wpvulnerability_notification).
  • The debug “last run” timestamp was always empty because it read a wpvulnerability-logs option that is never written; it now reads the most recent API log entry.
  • Redis detection called close() twice on the success path (once in the try block, once in finally); the redundant close was removed.
  • The single-site vulnerable-themes count was hardcoded to 0 instead of reading the stored option.

Modificado

  • Single-site email recipient sanitization now uses is_email() for strict validation, matching the multisite behaviour.
  • Removed a redundant nonce field from the single-site “Reset Plugin” form (the form only submits the full-reset action).
  • Removed dead code: the unused wpvulnerability_sanitize_messages callback and its setting registration, and an unused $tools_action variable in the multisite admin.

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 (level 9, 0 errors)
  • PHPUnit: 9.6.34 (25 tests)

[5.1.0] – 2026-07-08

Seguridad

  • wpvulnerability_validate_shell_command() now uses exact in_array() match instead of stripos() substring matching for the shell-command allowlist (defense-in-depth).
  • wpvulnerability_detect_php(), wpvulnerability_detect_curl(), and wpvulnerability_detect_webserver() now route through wpvulnerability_safe_shell_exec(), so every software-detection shell call is validated and recorded in the Shell Execution Audit Log. Previously these called shell_exec() directly, bypassing the wrapper and the audit log. As a side effect this also fixes nginx/angie version detection: escapeshellcmd() was escaping the 2>&1 redirect, so stderr (where nginx prints its version) was never captured.

Corregido

  • Multisite uninstall fatal error: Uncaught Error: Undefined constant "WPVULNERABILITY_PLUGIN_BASE" when “Delete all plugin data on uninstall” was enabled. uninstall.php now defines the constant before loading wpvulnerability-run.php.
  • WPVULNERABILITY_HIDE_* constants now stop shell_exec detection for hidden components during scheduled scans and in the admin “Software Detection Methods” panel. Previously they only hid the results from the UI, so the audit log kept filling with “command not found” entries for components the administrator had explicitly deactivated.
  • wpvulnerability_detect_webserver() no longer shell-probes a hidden web server via the sibling path: WPVULNERABILITY_HIDE_NGINX and WPVULNERABILITY_HIDE_APACHE now fully isolate the hidden server.
  • Multisite cron requests on non-main subsites no longer load all plugin module files. No WPVulnerability cron events are scheduled on subsites, so the extra loading was wasted work.
  • LiteSpeed / OpenLiteSpeed / Caddy shell detection in the WP_DEBUG diagnostic panel now works: the commands no longer use 2>/dev/null (which the shell-command validator rejected), caddy was added to the allowlist, and which output is validated as a real path so “command not found” messages are not mistaken for a detection.

Modificado

  • Network: true added to the plugin header to declare network-aware multisite behaviour.
  • Removed the unused $plugin_status parameter from wpvulnerability_plugin_info_after(); the PHPCS suite now passes with zero warnings.
  • Multisite network dashboard: the “Site Health” footer link pointed to wp-admin/network/site-health.php, which does not exist (Site Health is a per-site screen). It now links to the main site’s wp-admin/site-health.php.

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 (level 9, 0 errors)
  • PHPUnit: 9.6.34 (18 tests)

Previous versions

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