1. Red
  2. Learn
  3. WordPress

Hidden admin account in WordPress: how to find and remove it

Hidden admin account in WordPress: why Users does not list it, how to find it in the database, what to remove and rotate, per Patchstack's October 2026 report.

By Alexander Gusev, run.cloudPublished 28 October 20267 min readHow we check facts
On this page
  1. Who needs to look for a hidden admin?
  2. Why can't the dashboard show a hidden admin?
  3. How do I find the hidden admin?
  4. How do I remove it, and in what order?
  5. Am I affected? A three-state self-test
  6. Was anything exploited, and what does a scan see?
  7. What else does the campaign leave behind?

A hidden WordPress admin is an administrator account that wp-admin does not list, so the Users screen cannot find it. To find one, read the administrators straight from the database and compare them with the dashboard, then check the mu-plugins folder. Any account in the database that wp-admin does not show needs removing, along with the files that hide it.

FactDetailSource
What was seenA campaign that plants a hidden administrator after a stored XSS in two pluginsPatchstack, 6 Oct 2026
CVE idsCVE-2026-94504 (Ninja Forms, through 3.15.3) · CVE-2026-93836 (WPC Product Bundles for WooCommerce, through 8.6.6)Patchstack
SeverityBoth vulnerabilities rated CVSS 7.1Patchstack
Fixed versionsNinja Forms 3.15.4 · WPC Product Bundles 8.6.7Patchstack, Ninja Forms changelog
DatesPayload first observed against WPC Product Bundles on 4 October, then through Ninja Forms on 5 October 2026Patchstack, BleepingComputer
Exploitation"Active exploitation observed", volume "limited in our telemetry" (vendor-claimed)Patchstack
Updating cleans it?No. Updating blocks further exploitation but does not remove an existing infection. Removing the plugin closes none of the other three ways back inBleepingComputer, Patchstack
CheckedAt our check on 28 October 2026this page

Who needs to look for a hidden admin?

Anyone who ran Ninja Forms 3.15.3 or older, or WPC Product Bundles for WooCommerce 8.6.6 or older, in early October 2026. Patchstack reports Ninja Forms on more than 500,000 active installations and WPC Product Bundles on more than 30,000.

Patchstack's write-up is the best-documented case we found at our check on 28 October 2026, so this page follows it. BleepingComputer independently reports the same two plugins and the same install counts. If you saw a plugin you did not install, or an order or form entry with odd script-like text in it, start here.

Why can't the dashboard show a hidden admin?

Patchstack describes a must-use plugin that changes the user query. The account then drops out of the Users list, the Administrator filter and the role counts above the list. The script arrives through stored data, such as a form submission or WooCommerce order data, and runs when an administrator opens it. Patchstack describes both flaws as unauthenticated stored XSS, meaning the person planting the script needs no login.

This is why a clean-looking Users page proves nothing. Per the WordPress developer docs, must-use plugins load automatically, cannot be disabled from wp-admin, and sit in a separate Must-Use section of the Plugins screen instead of the normal list. Deleting the visible fake plugin leaves them in place.

WP-CLI is not a safe way around this. Its docs say wp user list follows WP_User_Query and that mu-plugins are still loaded when you skip plugins. A filter loaded as a must-use plugin could therefore affect that output too. That is our reading of the two docs, not something Patchstack tested. Patchstack's own method is a direct database read.

How do I find the hidden admin?

Work from outside the WordPress application, ideally with your host's database tool or support team.

  • List every user whose capabilities include administrator straight from the database tables, not through wp-admin.
  • Compare that list with the Users screen. An account in the database and absent from wp-admin is the hidden one.
  • Look at the names and emails. Patchstack reports @wordpress.org addresses and routine-sounding names such as support, updater and maintenance.
  • Open wp-content/mu-plugins. Patchstack names class-wp-query- followed by eight hex characters, and class-wp-token-validate.php. Any file you cannot account for is a lead.
  • Check the options table for fz_emer_done_v1 and fz_emer_login_tokens.
  • Look for a plugin called "WP Smart Thumbnails" or any plugin you did not install.

Do not sort by modification date. Patchstack reports that the installer backdates the files it writes to the oldest timestamp in the WordPress root, and advises sorting by content instead. Each mu-plugin file also carries a per-site key, so file hashes differ between infected sites.

How do I remove it, and in what order?

Patchstack does not define "clean" as a single state. It says a site where the script ran should be treated as potentially compromised, and its closing guidance lists five steps in this order. Follow it.

  1. Remove the unauthorized accounts and plugins.
  2. Clear the dropped files from mu-plugins.
  3. Delete the fz_emer_done_v1 and fz_emer_login_tokens options.
  4. Rotate privileged credentials and the WordPress authentication salts.
  5. Review the filesystem and database for further changes.

Patchstack adds that deleting the options alone is not enough, because the must-use files can issue a fresh token if they remain. It also says to treat the oldest administrator's password as compromised, since the secret login URL signs the holder in as that account.

WordPress.org's FAQ on a hacked site covers the wider process. The table puts the two side by side.

StepPatchstack (this campaign)WordPress.org (any hack)
Before touching anythingNot statedDocument what you see and when, then take one more snapshot of the environment, even if infected
Lock things downTreat the oldest administrator's password as compromisedForce a password reset for all users, especially administrators, and change FTP/SFTP, wp-admin, hosting panel and MySQL access
End existing sessionsRotate the authentication saltsReplace the secret keys in wp-config.php, which logs everyone out
Remove the intruderAccounts, plugins, mu-plugins files, two optionsFind and remove the hack; reinstall core files over FTP/SFTP rather than the wp-admin installer, because hacks add new files
After it is cleanReview filesystem and database for further changesUpdate, then change the passwords again, and consider new database credentials

WordPress.org's wp-config.php page shows where the keys and salts live. Its password reset page covers resetting from outside wp-admin.

Update the plugin too. Ninja Forms 3.15.4 and WPC Product Bundles 8.6.7 are the versions Patchstack names. Both plugins have shipped further XSS fixes since (Ninja Forms 3.15.5 on 28 September and 3.15.6 on 15 October, WPC Product Bundles 8.7.3), so install the current release. BleepingComputer reports that an update blocks further exploitation but does not remove an infection already in place. Ninja Forms is not the only form plugin with recent flaws, and the form plugin risk tracker covers the rest.

What do I do if my host manages the site?

Send support this and keep the reply:

For [your domain], please list all users with the administrator capability straight from the database, and tell me about any that do not appear in wp-admin. Please also list every file in wp-content/mu-plugins with its size and any option named fz_emer_done_v1 or fz_emer_login_tokens. Then tell me what backups you keep and how far back they go.

What do I do if I manage the server myself?

  • Take a copy of the site and database first. WordPress.org advises one more snapshot before cleaning, even if infected, and has a backup guide.
  • Work through the five steps above.
  • Reset every administrator password, not only the one you recognise.
  • Change the passwords again once the site is clean, as WordPress.org advises.
  • Consider new database credentials, which WordPress.org also suggests, and update wp-config.php.
  • Use a database tool such as phpMyAdmin if you cannot log in. It bypasses the administration screens.
  • After recovery, work through WordPress.org's hardening guide.

We found no primary source that says whether a backup of this campaign carries the hidden account, so this page makes no claim about restoring from backup. Ask your host which backup dates exist and check any restored copy with the database read above. How to pick a restore point that is actually clean has its own page.

Am I affected? A three-state self-test

Am I affected? Where you stand right now

A scan from outside cannot list your users. Only the database and the files on the server can settle a hidden account.

  1. Detected You found an administrator the dashboard hides, the two options, or the fake plugin. Treat the site as compromised and follow the five steps above. Ask your host to confirm what the server logged.
  2. Unknown You ran an affected plugin version in October and have not read the database. This is the common case. The dashboard cannot answer it. Read the administrators from the database and the mu-plugins folder. A mu-plugin file you cannot account for belongs here too: WordPress documents must-use plugins and hosts can install them legitimately, so ask your host what it is before treating it as malware.
  3. Confirmed by owner evidence You hold package or build evidence of Ninja Forms 3.15.4 or later and WPC Product Bundles 8.6.7 or later, from the server or your host, plus a restart or redeploy after it, and the cleanup is done. Done means the five steps in Patchstack's list are finished, and you have re-read the administrators from the database afterwards and can name every row. A dashboard version or a file listing is not that evidence. Patchstack lists four ways back in, so the other three are a separate check.

No scan, ours included, moves you from "unknown" to "confirmed".

Was anything exploited, and what does a scan see?

Patchstack reports active exploitation and calls the volume limited in its own telemetry. That is a vendor's view of its own data. We found no primary source naming a victim, and this page names none.

Red's free scan reads the stack your site serves and matches each version to known vulnerabilities. It is a lookup: it can say a version is affected, not whether your setup is exposed. It cannot read your user table. A hidden admin is for the owner's evidence, not a scan result.

What else does the campaign leave behind?

Patchstack lists four ways back in. A visible administrator, the hidden administrator, a login URL that signs in as the oldest administrator, and a file manager that needs no login. The hidden account is one of four, so finding it does not finish the job. If the same files or accounts keep returning, why WordPress malware comes back explains the usual causes, and hardening after a PHP incident is the follow-up. More in the other WordPress guides.

Related reading: the October 2026 security checklist for this week and who is responsible for patching my website. The hub is the October 2026 security tracker.

Questions people ask

How do I find a hidden admin user in WordPress?

The Users screen cannot show it, so read the users table in the database and compare it with what wp-admin lists. Any administrator in the database that wp-admin does not show is the hidden one. Your host's database tool, or the host's support team, can run that read for you.

I deleted the fake plugin. Is the hidden admin gone?

Not necessarily. Patchstack reports that the part that hides the account lives in separate must-use files that stay after the plugin is deleted, and that a fresh login token can be issued if they remain. Remove the accounts, the must-use files and the two options, then rotate credentials and salts.

Does updating Ninja Forms remove the hidden administrator?

No. BleepingComputer's report of the campaign says updating blocks further exploitation but does not remove an existing infection. Patchstack says removing the vulnerable or malicious plugin closes none of the other three ways back in. An account created before the update stays until someone removes it.

Why does my Users page show fewer admins than my database?

That gap is the signal to investigate. The campaign Patchstack describes filters the account out of the list, the Administrator filter and the role counts. A mismatch between the database and the screen is worth treating as unexplained until you can name every row.

I can't see anything odd in wp-admin. Does that mean I'm fine?

No. Hiding from wp-admin is the point of this technique. An empty-looking dashboard is the state the attacker is aiming for, so the database and the mu-plugins folder are where to look.

Sources

  1. Patchstack: Four ways back in, the WordPress XSS campaign that hides its own admin account (6 October 2026)The primary analysis: the hiding mechanism, file and option names, and the cleanup order.
  2. BleepingComputer: Ninja Forms plugin flaw exploited to hack WordPress sitesIndependent report of the same campaign, with install counts and the 4 and 5 October dates.
  3. Ninja Forms on WordPress.org (changelog)3.15.4 entry dated 21 September 2026. The changelog does not name the CVE; Patchstack names 3.15.4 as the version to update to. Later entries 3.15.5 (28 September) and 3.15.6 (15 October) add more stored XSS hardening. Checked 28 October 2026.
  4. WordPress developer docs: Must-Use plugins
  5. WP-CLI: wp user listStates that mu-plugins are still loaded when plugins are skipped.
  6. WordPress.org: FAQ My site was hacked (last modified 26 July 2026)Document, reset all access, update the secret keys, snapshot, remove, update, change passwords again once clean.
  7. WordPress.org: Editing wp-config.phpWhere the authentication keys and salts are replaced.
  8. WordPress.org: phpMyAdminA database tool that bypasses the administration screens.
  9. WordPress.org: WordPress BackupsHow to take a backup before cleaning.
  10. WordPress.org: Resetting your passwordResetting a password from outside wp-admin.
  11. WordPress.org: Hardening WordPressThe measures WordPress.org points to after recovery.

Facts on this page are dated and point at the primary source next to them. If a vendor status changes after the date shown, the vendor's page wins; tell us at support@run.cloud and we will update it.