
Detects shadow-administrator accounts in WordPress via configurable indicators and heuristics, then removes selected accounts through guarded, logged cleanup. Does not remove malware.
Version 1.4.0 · GPL-2.0-or-later · WordPress 6.0+ · PHP 7.4+
A read-only-by-default triage tool for the WordPress core vulnerabilities CVE-2026-60137 and CVE-2026-63030 (“wp2shell”). It checks patch state, accounts, durable database artifacts and file integrity, separates findings by confidence, and exports bounded evidence for external investigation.
The default indicators wp2_*, w2s_*, @wp2shell.invalid, and @wp2shell.shellcode.lol are documented by the public Eye Security Defenders Guide. Unverified account, plugin, or metadata names are no longer preconfigured. Fixed WordPress releases are documented in the official WordPress security release.
oembed_cache loopbacks, suspicious customize_changeset/object-graph rows, orphaned user metadata, and plausible user-ID gaps.home/siteurl values, missing active plugin files, and suspicious cron hook names.wp-admin or wp-includes.wp2shell_* plugin paths, and recently changed standard, network, MU, drop-in, plugin, and theme files.Work is bounded: users are processed in batches with administrators prioritised, filesystem walks and export rows are capped, and results are cached for an hour. WP-Cron refreshes the cache; unrelated admin requests do not trigger an unannounced full scan.
Findings are split into critical, high, medium, and low. A normal plugin or theme update remains a heuristic and is not presented like a hidden administrator. “No tested indicators matched” is explicitly not a guarantee of safety.
The audit screen provides a full JSON evidence export, a CSV check export, paginated user tables, and a checklist of external web-server, WAF, PHP, process, network, and cron evidence to preserve. Password hashes, session tokens, and application passwords are not exported.
Cleanup is disabled by default. Export evidence and independently verify the target first, then temporarily enable it in wp-config.php:
define( 'WP2S_IOC_ENABLE_CLEANUP', true );
Deletion then requires both delete_users and target-specific delete_user, a valid nonce, the exact text DELETE, self/last-admin guards, a current hidden-ID match when applicable, and an additional acknowledgement when content reassignment is disabled. Multisite deletion is fully blocked. Remove the constant again after remediation.
The local activity history is not tamper-evident. Integrations can forward the wp2s_ioc_user_deleted event to a remote logger or SIEM.
composer install
composer test
Tests cover PHP syntax, version/IOC regression cases, destructive guards, WordPress Coding Standards, and PHP 7.4+ compatibility. GitHub Actions repeats the checks.
Provided without warranty. A match is not proof by itself; no match is not an all-clear.