During a recent investigation, we discovered a sophisticated WordPress backdoor hidden in what appears to be a JavaScript data file. This malware automatically logs attackers into administrator accounts without requiring any credentials.
In September, we published an article showcasing another WordPress backdoor that creates admin accounts. This new variant takes a different approach by hijacking existing administrator sessions instead of creating new accounts, making it harder to detect through user audits.
The file was disguised as a JavaScript asset in a PHP file located in the WordPress admin wp-admin/js directory, but it was really all PHP. If you hit it directly in a browser, it would hunt for the WordPress wp-config.php, load the whole environment, pick an administrator account, log you in automatically, and then send you straight to the dashboard.
Anyone who knew the file’s URL wp-admin/js/mr_skk/data.php could instantly become an admin.
The file also tried to blend in with normal WordPress behavior by loading the standard template loader at the end, which made the request look like a regular page load instead of some obvious attack script.
The malicious file is at wp-admin/js/mr_skk/data.php. That’s really suspicious, since PHP files just shouldn’t be in the JavaScript directory. The mr_skk/ subdirectory isn’t part of the normal WordPress core, and the file named data.php is disguised to look like some harmless data handler.
The backdoor contains two custom functions named auto_login() and get_user_id(). These functions abuse legitimate WordPress functions, including wp_set_current_user(), wp_set_auth_cookie(), and get_users(['role' => 'administrator']), to hijack administrator sessions. The code performs directory traversal searching for wp-config.php, loads wp-load.php from the discovered path, and includes template-loader.php from WordPress core.

The backdoor redirects to admin URLs containing the parameter ?platform=000webhost. This tracking parameter appears in admin redirects and may indicate the compromise origin. Access patterns include direct requests to /wp-admin/js/mr_skk/data.php, immediate creation of an administrator session, and admin panel access without corresponding login events in server logs.

This type of backdoor gives the attacker complete control. Once they’re logged in as an administrator, they can install rogue plugins, drop additional payloads, modify theme files, create new backdoors, or even delete legitimate user accounts. Because the script logs them in as a real administrator, no suspicious usernames show up in the dashboard.
The login process also triggers normal WordPress hooks, which means any security plugin that relies on the wp_login action may record a legitimate-looking login rather than flag it as malicious. This makes the intrusion extremely stealthy and easy to miss.
The backdoor creates valid authentication cookies, allowing attackers to maintain access even after closing their browser and repeatedly returning to the compromised site without re-authenticating for the entire cookie lifetime, which is typically 14 days by default. Unlike backdoors that create new admin accounts, this malware leaves no new user accounts in the database, doesn’t modify existing user passwords, appears as normal admin activity in access logs, and bypasses account creation email notifications that might alert the real site owner.
The backdoor starts by locating the WordPress root directory:

Once the file is located, it defines the path and loads the full WordPress environment:
This step is crucial. By loading WordPress, the attacker can use all internal APIs like user enumeration, cookie creation, login hooks, and redirect helpers.
The malware includes session detection to avoid conflicts:

If a legitimate user is already logged in, the backdoor simply redirects to the admin panel without attempting to create a new session. This prevents suspicious behavior like session conflicts, forced logouts, or double authentication attempts that might alert website owners monitoring their admin activity.
The core malicious functionality executes automatic login through the auto_login() function:

At this point, WordPress treats the attacker as a legitimate admin.
The script selects the first administrator it finds. It tries email-based detection first, then falls back to the general admin list:

If that fails:
By using a real user, the attacker avoids creating new suspicious accounts, making the attack harder to detect during routine audits.
At the very end of the file, the attacker adds:
This makes the file behave like an ordinary WordPress front-end request. Even if the login process fails or the attacker wants to keep the script quiet, the file will still render a normal theme page instead of producing suspicious output.
The attacker needs to know where WordPress is installed. This file confirms the root path and gives access to database credentials through WordPress’ normal loading routines.
This is the most important inclusion. It boots WordPress, loads plugins, sets up database access, and initializes all main APIs. Without it, the attacker would not be able to call get_users(), wp_set_auth_cookie(), or redirect through admin_url().
This file generates the front-end output for normal requests. By calling it at the end, the attacker hides their script inside ordinary site behavior. Anyone opening the file directly might just see the homepage or a theme template instead of obvious malicious code.
wp-user.php.This backdoor demonstrates how attackers abuse WordPress core functions to maintain silent and persistent access. Instead of inserting noisy payloads, they rely on WordPress’ own authentication system to appear legitimate. Combined with the stealthy placement inside wp-admin/js, this makes detection difficult without deep file scanning.
As we noted in our September research article about admin-account-creating backdoors, attackers continue to evolve their techniques. This autologin method is another reminder of why continuous monitoring, file integrity alerts, and strict access control are essential for every WordPress site.