WPVulnerability

説明

このプラグインは WPVulnerability API と連携して、WordPress コア、プラグイン、テーマ、PHP バージョン、Apache HTTPD、nginx、MariaDB、MySQL、ImageMagick、curl、memcached、Redis、SQLite のリアルタイム脆弱性評価を提供します。

WordPress ダッシュボードに詳細なレポートを直接表示し、潜在的なセキュリティリスクを常に把握できます。サイトのセキュリティ状況に関する定期通知を設定して、情報過多にならずに常に情報を得られます。使いやすさを重視した設計で、サイトの個人データを保存・取得することなく、プロアクティブなセキュリティ対策をサポートします。

データの信頼性

データベースが提供する情報は、サードパーティによってレビューされたさまざまな情報から取得したものです。情報については、いかなる種類の責任も負いません。自己責任で行動してください。

プラグインの使い方

WP-CLI

次の WP-CLI コマンドで脆弱性を管理・チェックできます:

  • コア: wp wpvulnerability core
  • プラグイン: wp wpvulnerability plugins
  • テーマ: 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

プラグインの設定には次のコマンドを使用できます:

  • コンポーネントを非表示: wp wpvulnerability config hide <component> [on|off]
  • 通知メール: wp wpvulnerability config email <emails> (カンマ区切り)
  • 通知頻度: wp wpvulnerability config period <never|daily|weekly>
  • ログ保持期間: wp wpvulnerability config log-retention <0|1|7|14|28> (日数単位)
  • キャッシュ期間: wp wpvulnerability config cache <1|6|12|24> (時間単位)

すべてのコマンドは --format オプションで出力形式を指定できます:

  • --format=table: 結果をテーブル形式で表示します (デフォルト)。
  • --format=json: 結果を JSON 形式で表示します。

ヘルプが必要ですか ?

  • wp wpvulnerability --help: WPVulnerability コマンドのヘルプ情報を表示します。
  • wp wpvulnerability [command] --help: 指定した WPVulnerability コマンドのヘルプ情報を表示します。

REST API

WPVulnerability プラグインは、WordPress サイトのさまざまなコンポーネントの脆弱性情報を取得するための複数のREST API エンドポイントを提供します。

  • コア: /wpvulnerability/v1/core
  • プラグイン: /wpvulnerability/v1/plugins
  • テーマ: /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

WPVulnerability REST API は認証にアプリケーションパスワードを使用します。リクエストの Authorization ヘッダーに有効なアプリケーションパスワードを含める必要があります。

認証付きリクエストの例

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

username を WordPress のユーザー名、application_passwordアプリケーションパスワードに置き換えてください。

追加設定

“From:” メール (バージョン3.2.2以降)

何らかの理由でプラグインから送信されるメールの From をサイト管理者とは異なるものにする必要がある場合は、wp-config.php に定数を追加して変更できます:

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

定数が有効な場合、設定画面に表示されます。

チェックの強制非表示 (バージョン4.1.0以降)

特定のコンポーネントを常に非表示にしたい場合は、wp-config.php に定数を定義できます。true に設定すると、設定画面で自動的にチェックされ、関連する解析がスキップされます。

例:

define( 'WPVULNERABILITY_HIDE_APACHE', true );

利用可能な定数: WPVULNERABILITY_HIDE_COREWPVULNERABILITY_HIDE_PLUGINSWPVULNERABILITY_HIDE_THEMESWPVULNERABILITY_HIDE_PHPWPVULNERABILITY_HIDE_APACHEWPVULNERABILITY_HIDE_NGINXWPVULNERABILITY_HIDE_MARIADBWPVULNERABILITY_HIDE_MYSQLWPVULNERABILITY_HIDE_IMAGEMAGICKWPVULNERABILITY_HIDE_CURLWPVULNERABILITY_HIDE_MEMCACHEDWPVULNERABILITY_HIDE_REDISWPVULNERABILITY_HIDE_SQLITE

キャッシュ期間 (バージョン4.1.0以降)

デフォルトでは、API からのデータは12時間キャッシュされます。変更するには、wp-config.phpWPVULNERABILITY_CACHE_HOURS161224 のいずれかで定義してください。この値は設定画面と WP-CLI コマンドを上書きします。

define( 'WPVULNERABILITY_CACHE_HOURS', 24 );

ログローテーション (バージョン4.2.0以降)

WPVulnerability は最新の API レスポンスを保存するので、新しいログタブから最近の呼び出しを確認できます。wp-config.phpWPVULNERABILITY_LOG_RETENTION_DAYS を定義して、保持するエントリーの日数を制御できます。対応する値は 0171428 で、0 を使用するとログを完全に無効化します。

define( 'WPVULNERABILITY_LOG_RETENTION_DAYS', 14 );

定数が存在する場合、その値が設定 UI と WP-CLI の両方に強制適用され、環境全体で一貫したログローテーションが保証されます。

セキュリティ設定 (バージョン4.3.0以降)

WPVulnerability はサーバーソフトウェア (ImageMagick、Redis、Memcached、SQLite) の検出にハイブリッドアプローチを使用します。PHP 拡張を優先 (最も安全) し、次にシェルコマンドをフォールバックとして使用 (最も正確) します。この動作は wp-config.php のセキュリティ設定定数で制御できます。

シェルコマンドのグローバル無効化:

define( 'WPVULNERABILITY_DISABLE_SHELL_EXEC', true );

シェルコマンドの使用を完全に無効化します。PHP 拡張のみにフォールバックします。精度の低下が許容できる場合に最大セキュリティとして使用してください。

セキュリティモード (standard/strict/disabled):

define( 'WPVULNERABILITY_SECURITY_MODE', 'strict' );
  • standard – ハイブリッド検出: PHP 拡張を優先し、シェルコマンドをフォールバックとして使用 (デフォルト、最高精度)
  • strict – PHP 拡張のみ、シェルコマンドなし (高セキュリティ、精度低め)
  • disabled – ソフトウェア検出なし (最大セキュリティ)

コンポーネントホワイトリスト:

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

指定したコンポーネントのみシェルコマンドを許可します。対応コンポーネント: imagemagickredismemcachedsqlite。細かい制御に使用してください。

例:

最大セキュリティ (シェルコマンドなし):

define( 'WPVULNERABILITY_SECURITY_MODE', 'strict' );

ImageMagick のシェル検出のみ許可:

define( 'WPVULNERABILITY_SHELL_EXEC_WHITELIST', 'imagemagick' );

完全無効化:

define( 'WPVULNERABILITY_DISABLE_SHELL_EXEC', true );

すべてのシェルコマンドはハードコードされ検証済みです。ユーザー入力は一切関与しません。コマンドはセキュリティ監査のためにログに記録されます。

互換性

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

セキュリティ

このプラグインは各バージョンで以下のセキュリティ対策とレビュープロトコルに準拠しています:

プライバシー

  • このプラグインおよび WordPress Vulnerability Database API は、サイト、ユーザー、プラグイン、テーマ、コンテンツに関する情報を収集しません。

脆弱性

  • バージョン4.2.2.1でセキュリティの脆弱性が発見・修正されました。以前のすべてのバージョン (3.3.0〜4.2.1) が影響を受けます。バージョン4.2.2.1以降にアップデートしてください。

セキュリティの脆弱性を発見しましたか ? WPVulnerability GitHub リポジトリから非公開でご報告ください。

貢献者

このプラグインは、WPVulnerability GitHub リポジトリで貢献することができます。

スクリーンショット

インストール

自動ダウンロード

WordPress のプラグインセクションにアクセスし、[wpvulnerability] を検索して、プラグインをダウンロードしインストールしてください。

手動ダウンロード

ZIP を解凍し、/wp-content/plugins/wpvulnerability/ ディレクトリにアップロードします。 アップロードするとプラグインリストに表示されます。

FAQ

脆弱性情報はどこから取得していますか ?

WPVulnerability.com API を元にしています。この API に表示される脆弱性は、CVEs などのさまざまなソースから取得しています。

サイトのデータはどこかに送信されますか ?

いいえ、送信されません。ユーザーのプライバシーは私たちにとって非常に重要です。私たちはユーザーのデータを商品化しません。

どのような脆弱性を見つけますか ?

WordPress コア、プラグイン、テーマ、PHP、Apache HTTPD、nginx、MariaDB、MySQL、ImageMagick、curl、memcached、Redis、SQLite の脆弱性が記録されます。

サイトに脆弱性がある場合、どうすればいいのでしょうか ?

まずは安心してください。脆弱性の内容を調べ、特に影響を受けた要素の最新バージョンが適用されているか確認してください。WordPress とすべてのプラグインを常に最新の状態に保つことを強くお勧めします。ウェブサーバー、データベース、その他のソフトウェアなど WordPress 以外の脆弱性については、ホスティングプロバイダーに修正を依頼してください。

評価

2025年1月28日 1 reply
Without a doubt, the most important plugin to install on your WordPress instance.
2024年4月17日
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!
2024年4月8日 1 reply
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.
2024年2月21日
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!
19件のレビューをすべて表示

貢献者と開発者

WPVulnerability はオープンソースソフトウェアです。以下の人々がこのプラグインに貢献しています。

貢献者

“WPVulnerability” は14ロケールに翻訳されています。 翻訳者のみなさん、翻訳へのご協力ありがとうございます。

“WPVulnerability” をあなたの言語に翻訳しましょう。

開発に興味がありますか ?

コードを閲覧するか、SVN リポジトリをチェックするか、開発ログRSS で購読してみてください。

変更履歴

[5.1.1] – 2026-07-09

Fixed

  • 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.

Changed

  • 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.

[5.1.0] – 2026-07-08

セキュリティ

  • 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.

Fixed

  • 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.

Changed

  • 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.

[5.0.1] – 2026-06-02

Fixed

  • wp_cache_flush() removed from the plugin/theme update hook and the plugin reset routine. The function was wiping the entire Object Cache (Redis, Memcached, APCu) on every update, causing CPU spikes on high-traffic sites. The targeted transient cleanup that already runs before it is sufficient.

[5.0.0] – 2026-05-26

Added

  • Vulnerability detail panels fully redesigned: Bootstrap-inspired score/severity badge, source attribution pills (hostname extracted from URL), and a structured “References:” row on the same line as the pills.
  • CVSS priority order: CVSS 4 > CVSS 3 > CVSS 2 > legacy CVSS. The highest available score and severity are always shown.
  • ssvc.exploitation field displayed: poc “⚡ Public exploit” badge; active included in the “Actively exploited” KEV label.
  • ssvc.automatable: yes “⚙ Automatable” badge alongside KEV/PoC.
  • ssvc.kev_date date appended to the “Actively exploited” label (e.g. “⚠ Actively exploited · 2024-03-15”).
  • epss field “EPSS X.X%” badge on the same line as the CVSS score badge.
  • CVE description (source[].description) now displayed for all vulnerability types: plugins, themes, core, and server software. Language prefix (e.g. [en-US]) stripped automatically.
  • CWE name and description displayed in server software vulnerability details (was missing).
  • Core vulnerabilities on update-core.php now rendered with the same badges, description, and pills as plugin/theme rows (replaces the old plain table).
  • Theme details modal (single-site): vulnerability section injected after the Tags field using the wp_prepare_themes_for_js filter and a JS template patch. Shows the same version range + badge + description + references layout as the plugin rows.
  • Version range display: leading - or * stripped when there is no lower bound (e.g. - < 1.3.28 < 1.3.28).
  • Helper functions added to wpvulnerability-process.php: wpvulnerability_source_css_slug(), wpvulnerability_render_source_pills(), wpvulnerability_render_score_badge(), wpvulnerability_clean_version_range(), wpvulnerability_get_source_description().
  • Helper functions added to wpvulnerability-themes.php: wpvulnerability_theme_modal_html(), wpvulnerability_filter_prepare_themes_for_js(), wpvulnerability_theme_modal_template_patch().
  • KEV badge displayed in vulnerability details when the CVE is listed in the CISA Known Exploited Vulnerabilities (KEV) catalog (impact.ssvc.kev for plugins/themes/core; impact.kev for server software).
  • Vulnerability severity now uses the full-word value from cvss3.severity ("critical", "high", "medium", "low") when available, falling back to the legacy single-character cvss.severity code.
  • Publication date shown next to each source link in vulnerability details (source[].date field from the API).
  • Server software lifecycle status (Supported / End of Life + EOL date) in vulnerability details and dashboard grid (data.status, data.date_end fields from the API).
  • EOL badge in the dashboard software grid (PHP, Apache, nginx, MariaDB, MySQL, ImageMagick, curl, memcached, Redis, SQLite) when the detected version has reached end-of-life.
  • REST API: all vulnerability endpoints now expose uuid, kev (boolean), ssvc block, and severity from cvss3. Source entries include a date field.
  • About tab: new Intelligence Sources table showing per-source vulnerability counts (CVE, EUVD, JVN, Patchstack, WPScan, Wordfence) broken down by Core / Plugins / Themes.

セキュリティ

  • wpvulnerability-adminms.php: config form handler now requires manage_network_options capability (via current_user_can()) in addition to the nonce check. Previously a user with a valid nonce could update plugin options without the required capability.
  • WP-CLI: all vulnerability commands (core, plugins, themes, and all software components) and all config commands (hide, email, cache, log-retention, period) now require manage_options / manage_network_options. Commands abort with a clear error and --user=<admin_login> hint if the check fails.
  • REST API permission check now passes strict mode (true) to base64_decode() when parsing the HTTP Basic Authorization header. A malformed or padding-stripped token is immediately rejected instead of decoding unpredictable bytes.
  • Debug web server detection (LiteSpeed, OpenLiteSpeed, Caddy) now routes through the wpvulnerability_safe_shell_exec() wrapper, ensuring WPVULNERABILITY_DISABLE_SHELL_EXEC, security mode, command whitelist, and audit logging are respected even when WP_DEBUG is enabled.
  • Page render callbacks (wpvulnerability_create_admin_page, wpvulnerability_admin_dashboard_content) now include explicit current_user_can() / wp_die() guards as defense-in-depth, per the WordPress Plugin Handbook.

Fixed

  • Forced test email on a fresh install (no email address configured yet) no longer produces an E_WARNING on PHP 7.x or a TypeError on PHP 8.x.
  • determine_locale() call is now guarded by function_exists() instead of version_compare(), which is more forward-compatible and correctly recognised by static analysis.
  • preg_replace() return values in the HTML-to-plain-text converter are now handled safely when null is returned on error.
  • DOMDocument::$documentElement null check added in the HTML-to-plain-text converter.
  • JSON-encoded vulnerability count options are validated as strings before json_decode() throughout the codebase.
  • cron_schedules callbacks now use did_action('init') guard before __(), eliminating the textdomain-too-early notice introduced in WordPress 6.7.
  • WP-CLI vulnerability commands now display a clear success message when no vulnerabilities are found, instead of an empty table.
  • WP-CLI config period monthly now returns a proper error. Valid periods: daily, weekly, never.
  • uninstall.php created. Plugin data is preserved by default; a new “Delete all plugin data on uninstall” checkbox in the Tools tab allows opting in to full removal.
  • Large vulnerability data options are now stored with autoload=false, preventing unnecessary loading of JSON blobs on every WordPress request.

Changed

  • Minimum required PHP version raised from 5.6 to 7.0. The null coalescing operator (??) used throughout for improved type safety requires PHP 7.0. PHP 5.6 reached end-of-life in December 2018.
  • Minimum required WordPress version raised from 4.7 to 5.6, enabling full use of Application Passwords, wp_timezone(), wp_date(), and determine_locale() without version guards.
  • wpvulnerability_get_cron_snapshot() now uses only public WordPress Cron API functions (wp_next_scheduled(), wp_get_schedule()); _get_cron_array() (private WP API) removed.

Developer

  • PHPStan level 9: 0 errors across all 18 PHP files; 1,092 pre-existing type errors resolved; baseline is now empty.
  • Added dev tooling: composer.json, phpstan.neon (level 9), phpcs.xml, phpunit.xml.dist, bin/deploy.sh, docs/.
  • Added 18 PHPUnit plugin header tests.

互換性

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

Tests

  • 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)
  • Plugin Check (PCP): 1.8.0

[4.3.2] – 2026-05-20

Performance

  • Notification scheduling no longer rewrites the cron row in wp_options on every WordPress request. The boot-time call now verifies the current schedule with wp_get_schedule() and only clears or reschedules the wpvulnerability_notification event when the desired period actually differs from the currently scheduled one. This eliminates 1-2 unnecessary UPDATE wp_options queries per page load, removing lock contention under concurrent load and the corresponding entries from the MariaDB/MySQL slow query log.

Changed

  • wpvulnerability_schedule_notification_event() gained an optional $force parameter (default true, backwards compatible). The boot-time invocation passes false to opt into the idempotent path; all other callers (admin save handlers, WP-CLI config command, update flow, repair helpers) keep the default and continue forcing a reschedule so that changes to hour/minute/day still update the next-run timestamp.

互換性

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

Tests

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

[4.3.1] – 2026-01-20

Fixed

  • Dashboard widget now correctly counts only vulnerabilities from enabled components, excluding disabled ones from settings.
  • Status badge calculation (Critical/Warning) now properly considers only enabled components when determining severity level.
  • Fixed PHPCS warnings for global variables without plugin prefix in wpvulnerability-admin.php and wpvulnerability-adminms.php.

互換性

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

Tests

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

[4.3.0] – 2026-01-19

Highlights

This major release brings a complete redesign of the admin interface, comprehensive debugging tools, enhanced security, and new notification channels.

  • Complete Admin Interface Redesign: Modern card-based layout with visual component cards, improved spacing, color-coded status badges, and responsive grid layouts across all Settings tabs (Security, About, Logs, Tools, Analysis, and Notifications).
  • New Debug Mode: Comprehensive debugging tools visible when WP_DEBUG is enabled, including System Information, Component Detection with cache status, interactive API Testing with AJAX buttons, Configuration Summary, Cron Status with manual execution, Database Options Viewer, and Quick Actions (clear caches, reset signatures, export debug data as JSON). Includes enhanced web server detection for 9 different servers.
  • Dashboard Widget Redesign: Modern interface with prominent status badges (All Clear/Issues Found/Critical Issues Found), last check timestamp with human-readable format, empty state display with centered checkmark, separated component sections (WordPress Components vs Server Software), color-coded badges, and 2-column grid layout for server software.
  • New Notification Channels: Discord webhook support and Telegram bot integration for vulnerability notifications, with proper character limit handling and webhook URL validation.
  • Enhanced Security: CSRF protection via nonces for plugin/theme vulnerability filters, hybrid software detection system (PHP extensions first, shell commands as fallback), complete audit logging for shell executions, webhook URL validation with HTTPS enforcement and domain whitelisting, and new wp-config.php security constants.
  • Multisite Improvements: Fixed all form submission issues in Network Admin, proper nonce handling, correct URL generation with network_admin_url(), preserved settings when saving individual forms, and fixed Security tab with all required helper functions.
  • Tools & Maintenance: Cron event repair functionality for single sites and multisite networks, “Delete all logs” button, full plugin reset action, and improved cache management.

Added

  • Tools tab now lists expected WPVulnerability cron events, shows the scheduled instances, and lets administrators repair them on single sites.
  • Network Tools highlights unexpected WPVulnerability cron events on subsites and provides a one-click repair to clear and reschedule across the network.
  • Logs tab now includes a “Delete all logs” button to purge stored API log entries manually.
  • Hybrid software detection system: PHP extensions first (most secure), shell commands fallback (most accurate).
  • Four-level security control system for shell_exec usage with granular configuration.
  • Shell command validation with whitelist and dangerous pattern detection.
  • Complete audit logging for all shell executions (component, command, output, user, IP, timestamp).
  • New wp-config.php constants: WPVULNERABILITY_DISABLE_SHELL_EXEC, WPVULNERABILITY_SECURITY_MODE, WPVULNERABILITY_SHELL_EXEC_WHITELIST.
  • Detection reliability scoring (0-100) for each software detection method.
  • Discord webhook support for vulnerability notifications with 2000-character limit handling.
  • Telegram bot support for vulnerability notifications with bot token and chat ID configuration.
  • Documentation links for Discord webhook setup (https://support.discord.com/hc/articles/228383668).
  • Documentation links for Telegram bot setup (https://core.telegram.org/bots).
  • Debug tab (visible only when WP_DEBUG is enabled) providing comprehensive debugging tools for administrators.
  • wpvulnerability-debug.php file with 11 helper functions for debug functionality (~18KB).
  • Debug Section 1: System Information displaying WordPress version, PHP version/extensions/memory, database type (MariaDB vs MySQL with proper detection), web server (nginx/Apache/LiteSpeed/OpenLiteSpeed/Caddy/IIS/Angie/OpenResty/Tengine), debug modes status, and debug log file information.
  • Debug log file information showing file path, size, and direct browser link when web-accessible.
  • Debug Section 2: Component Detection table listing all 13 components with detection status, version, analyzed state, and cache expiration time.
  • Debug Section 3: API Testing with interactive AJAX-powered buttons to test API connectivity for each component individually, showing HTTP status, response time, and data preview.
  • Debug Section 4: Configuration Summary displaying current plugin settings at a glance.
  • Debug Section 5: Cron Status showing scheduled tasks with manual execution buttons (permission-gated with nonce verification).
  • Debug Section 6: Database Options Viewer with dropdown to inspect all stored plugin options.
  • Debug Section 7: Quick Actions with buttons to clear all caches, reset plugin/theme signatures, and export debug information as JSON.
  • Enhanced web server detection supporting 9 different servers: nginx, Angie (nginx fork), Apache, LiteSpeed, OpenLiteSpeed, Caddy, IIS, OpenResty (nginx-based), and Tengine (nginx fork).
  • Three-level detection logic for web servers: (1) plugin’s standard function, (2) SERVER_SOFTWARE parsing, (3) shell commands as fallback.
  • Database detection properly distinguishes MariaDB from MySQL via version_comment SQL query.
  • AJAX handler wpvulnerability_ajax_test_api() for API testing with nonce verification and capability checks.
  • Debug helper functions: 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().
  • Debug tab POST handlers in both wpvulnerability-admin.php and wpvulnerability-adminms.php with nonce verification for all actions.
  • Debug tab render functions in 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().

セキュリティ

  • Added CSRF protection via nonces for plugin vulnerability filter links to prevent forced navigation attacks.
  • Added CSRF protection via nonces for theme vulnerability filter links to prevent forced navigation attacks.
  • Plugin and theme filter URLs now include security nonces that are verified before applying filters.
  • Enhanced security against timing attacks on vulnerability enumeration by requiring valid nonces.
  • Enhanced ImageMagick, Redis, Memcached, and SQLite detection with hybrid approach and security controls.
  • All shell commands hardcoded and validated – no user input involved.
  • Shell execution wrapper with complete security checks and logging.
  • Webhook URLs now validated on save: enforces HTTPS and verifies hostname matches allowed domains (Slack: hooks.slack.com, Teams: office.com/office365.com/api.hooks.microsoft.com, Discord: discord.com/discordapp.com).
  • Telegram bot token validation with regex pattern check (format: 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11).
  • Invalid webhook URLs and bot tokens are rejected with user-friendly error messages instead of silently failing on notification send.
  • Security audit score improved from 85/100 to 98/100 (comprehensive security audit completed 2026-01-19).

Changed

  • Database error hook now fires the prefixed wpvulnerability_wpdb_last_error action while keeping the legacy hook deprecated.
  • Database update cron now follows the configured cache duration (hourly, 6h, 12h, or 24h).
  • Translations load on init to avoid early textdomain warnings.
  • Vulnerability data now refreshes only via scheduled cron or the manual reload action; admin requests, REST, CLI, notifications, and view rendering no longer trigger API calls to reduce load.
  • Cron scheduling no longer re-queues the update event on every page load; it keeps the configured interval (hourly/6h/12h/24h) unless the schedule changes.
  • REST API now requires administrator capabilities for session or application password access.
  • Admin reset and test email actions enforce admin capabilities.
  • API client timeouts corrected to 2.5 seconds to avoid long hangs.
  • Slack/Teams webhooks restricted to allowed HTTPS hosts to limit SSRF exposure.
  • Tools tab adds a full reset action that clears all plugin data, restores defaults, and reloads from the API.
  • Complete redesign of the admin settings interface with modern card-based layout for all tabs: Security, About, Logs, Tools, Analysis, and Notifications.
  • Settings tabs now feature visual component cards with icons, improved spacing, color-coded status badges, and responsive grid layouts for enhanced usability.
  • Complete redesign of the Dashboard widget with modern, clean interface replacing the basic list layout.
  • Dashboard widget now features prominent status badge with three states: “All Clear” (green, 0 vulnerabilities), “X Issues Found” (yellow, minor issues), “X Critical Issues Found” (red, Core/PHP vulnerable or 5+ total vulnerabilities).
  • Dashboard widget displays last check timestamp with human-readable format (“X minutes ago”, “X hours ago”) and “Refresh Now” link.
  • Dashboard widget shows attractive empty state with centered green checkmark when no vulnerabilities are detected.
  • Dashboard widget separates components into two clear sections: “WordPress Components” (Core, Plugins, Themes) and “Server Software” (PHP, web server, database, etc.).
  • Dashboard widget uses color-coded badges: green for secure (✓ 0), yellow/red for vulnerabilities (✕ N) with consistent design.
  • Dashboard widget displays server software in 2-column grid layout for better space utilization.
  • Dashboard widget shows vulnerable plugin/theme lists indented below their respective components.
  • Dashboard widget uses inline CSS with modern styling: flexbox layouts, proper spacing, WordPress admin color palette, improved typography (13px components, 12px meta).
  • Dashboard widget footer includes links to Site Health and Settings with visual separation.
  • All CSS class names, HTML IDs, and JavaScript references changed from short prefix .wpv- to full prefix .wpvulnerability- to prevent naming conflicts with other plugins and themes (affects 73+ unique classes across admin panels).
  • All inline CSS from admin panels moved to external assets/admin.css file for better performance and cacheability (~1084 lines extracted from 14 style blocks across single-site and multisite admin panels).
  • License updated from GPL2+ to GPL3+.

Fixed

  • Saving partial forms (e.g., log retention) no longer resets other notification settings to their defaults; existing values are preserved unless explicitly changed.
  • Network (adminms) settings now preserve existing values when saving individual forms and keep notification scheduling consistent.
  • Cache column in Component Detection (Debug tab) now correctly displays cache expiration time by properly decoding JSON-encoded timestamps from database.
  • Database detection now properly distinguishes between MariaDB and MySQL instead of always showing “MySQL”.
  • Multisite network admin forms (Notifications, Analysis, Configuration) now submit correctly by using proper network admin URLs and nonces instead of incompatible Settings API methods.
  • All form submission buttons in multisite admin now include proper name attribute (wpvulnerability_submit) for backend processing.
  • Delete logs form in multisite now uses network_admin_url() instead of single-site admin_url() for correct URL generation.
  • All multisite form nonce verifications now match their corresponding form nonce fields (reset, email, repair cron, delete logs) instead of using generic nonce.
  • Security tab in multisite network admin now works correctly by including all required helper functions (wpvulnerability_display_security_status, wpvulnerability_display_detection_methods, wpvulnerability_display_security_logs) instead of calling undefined single-site functions.
  • Tools tab buttons in multisite network admin no longer show “nonce expired” errors by submitting forms to the same page (action=””) instead of explicit URL paths that fail referer validation.
  • Delete All Logs button in Logs tab no longer shows “The link you followed has expired” error by using empty form action (action=””) in both single-site and multisite admin panels.
  • Logs tab pagination now displays horizontally instead of vertically by properly targeting list elements (ul with inline-flex) and individual page links (a and span within li) to work correctly with WordPress paginate_links() ‘type’ => ‘list’ output.

互換性

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

Tests

  • 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

セキュリティ

  • Fixed authorization vulnerability in REST API endpoints that allowed low-privileged users to access sensitive vulnerability data. API now properly verifies user capabilities (manage_options for single sites, manage_network_options for multisite) in addition to authentication.
  • Added direct access protection to wpvulnerability-api.php to prevent direct file execution outside WordPress context.

互換性

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

Tests

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

[4.2.1] – 2025-12-17

Fixed

  • Clear legacy WPVulnerability cron events from multisite subsites so updates and log cleanup only run on the main site.

互換性

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

Tests

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

Previous versions

If you want to see the full changelog, visit the changelog.txt file.