Available for projects & agency overflow · Quick reply, from the person who does the work

An admin account I never created has appeared

It is the opening move in almost every recent WordPress intrusion: create an administrator account, sometimes hidden from the user list, so access survives long after the original flaw is patched.

Describe my issue Send a message

Why the admin account comes first

In nearly every WordPress intrusion documented in recent months, the administrator account isn’t the goal — it’s what makes everything else possible. A flaw gives narrow access, often one request wide, in one specific context, and it eventually gets patched. An admin account gives broad, lasting access that the site treats as entirely legitimate. Once it exists, the attacker no longer needs the original flaw: patch the offending plugin and they still walk in through the front door.

Recent cases all share this pattern. For CVE-2026-3300 in Everest Forms Pro, patched on 18 March 2026 and actively exploited from 13 April 2026, the published indicator of compromise is unusually simple: an administrator account named diksimarina. For CVE-2026-8181, affecting Burst Statistics 3.4.0 and 3.4.1 across roughly 200,000 active installations, an unauthenticated attacker could fully impersonate an administrator for the duration of a REST API request and use that position to create their own admin accounts. Over 7,400 attacks were blocked in twenty-four hours before version 3.4.2 shipped on 12 May 2026.

Creation isn’t always the first move. In the ShapedPlugin distribution chain compromise published on 22 June 2026, the tampered code began by exfiltrating the contents of wp-config.php and the site’s administrator accounts. Nothing was created there: it was read, along with everything needed to come back later without adding a new row to the list.

What you see, or fail to see

  • An unfamiliar row in the admin user list, carrying the Administrator role.
  • The user counter shows a higher total than the number of rows actually displayed.
  • An administrator whose email address belongs to nobody you know, often on a generic domain.
  • A registration date matching nobody joining the team.
  • An existing account whose role has been raised to administrator without anyone asking.
  • A WordPress notification about an account creation or an email change nobody triggered.
  • An account you deleted reappearing hours or days later.

An account can exist without showing in the list

The nastier case isn’t the unfamiliar row you can see: it’s seeing nothing while an account exists. WordPress builds the user list through its own filters, and a malicious plugin can hook those filters to drop a row from the output. The phishing campaign documented by Patchstack in April 2025 did exactly that: the plugin the victim downloaded, dressed up as a WooCommerce security patch, created an administrator account with a random eight-character name, then hid itself from the plugin list and hid the account it had just created.

Two checks get around that without installing anything. First: compare the total user count shown above the list with the number of rows actually displayed, then repeat the comparison role by role. A gap of one is enough to justify going further. Second: read the wp_users table directly in the database, through phpMyAdmin or your host’s tool, allowing for the table prefix your installation actually uses. The database passes through no PHP filter; it is the only source that tells the truth. Look at wp_usermeta too, where roles are stored — that is where a quiet account gets its administrator rights.

The same caveat applies on the command line. WP-CLI loads WordPress, therefore the plugins, therefore the filters: a plugin hiding an account in the dashboard can hide it from WP-CLI output as well. The command below is still the fastest way to get a clean list with registration dates, but if it shows nothing while the counter says there is one user more, believe the counter and go to the database.

terminal — at the site root
wp user list --role=administrator --fields=ID,user_login,user_email,user_registered
wp user list --role=administrator --format=count

What to record before touching the account

  1. Record the registration date and time

    The <code>user_registered</code> field gives the exact moment the account was created. Everything else pivots on it: without it, I don’t know which window to search.

  2. Record the login, email address and role

    I keep these off the site, in a file or a note. Once the account is deleted they are gone for good, and they are what lets the same actor be recognised elsewhere.

  3. Pull the logs before they rotate

    Host access logs are often kept for a few days only. I download the registration day plus the two days before it, along with the PHP error logs for the same period.

  4. Look for what else moved at that moment

    Files created or modified around that timestamp, unusual scheduled tasks, plugins installed or deactivated, content published. The entry point is usually there, not in the account itself.

  5. Check the other accounts, not just the new one

    An old account promoted to administrator, an email address changed, an application password added: the visible row is sometimes bait, meant to be found and deleted while a second way in stays put.

  6. Only then: delete, reset, log everyone out

    Delete the account, reset every administrator password, invalidate open sessions, regenerate the security keys in <code>wp-config.php</code>.

Related reading

Describe your need in one minute

A few targeted questions so I can reply with an estimate rather than another questionnaire.

symptomes
depuis-quand
sauvegarde
acces-admin (facultatif)
Please provide an email or a phone number so I can get back to you.

Please provide an email or a phone number so I can get back to you.

Frequently asked questions

Can I just delete the account and move on?
No. The account is a consequence, not a cause. While the flaw or backdoor that allowed it stays in place, it can be recreated. Delete it, but only after recording its registration date, its email address and the logs for that period.
How was an admin account created if nobody stole my password?
In most recent cases no password is needed. With CVE-2026-8181 in Burst Statistics, an unauthenticated attacker could impersonate an administrator for the length of a REST API request and create accounts from there. Your password was never involved.
The account is called diksimarina — does that mean anything?
Yes. It is the published indicator of compromise for exploitation of CVE-2026-3300 in Everest Forms Pro. Finding it points the investigation firmly at that flaw, but it doesn’t remove the need to check what was dropped on the server afterwards.
I see no unknown account. Am I in the clear?
Not necessarily. An account can be hidden from the user list by code running on the site. Compare the user counter with the number of rows displayed, and read the users table directly in the database: that is the only view no filter touches.
Should I change the other administrators’ passwords?
Yes, along with FTP, database and hosting account credentials. In the ShapedPlugin distribution chain compromise, the tampered code exfiltrated the contents of wp-config.php and the administrator accounts: anything read once stays usable until it is changed.