WordPress site owners running the Elementor plugin need to treat this as an immediate-action event. A cross-site request forgery (CSRF) vulnerability in Elementor — one of the most widely deployed WordPress plugins, with millions of active installations — allows an unauthenticated attacker to trigger the creation of administrator accounts on vulnerable sites. In practical terms, this is a full site-takeover primitive: once an attacker holds a WordPress admin account, they control content, can upload malicious plugins and themes, harvest user data, inject skimmers, and pivot into the underlying hosting environment.
We've responded to enough WordPress compromises to say this plainly: a rogue admin account is rarely the end goal. It is the beachhead. From there, attackers deploy webshells, establish cron-based persistence, monetize through SEO spam or Magecart-style card skimming, and in some cases use the compromised host as staging for broader intrusion. If you run Elementor, assume your exposure window started the day this was disclosed and audit accordingly — not just patch.
Technical Analysis
Affected component: The Elementor Website Builder plugin for WordPress. Elementor is among the most-installed plugins in the WordPress ecosystem, which makes any unauthenticated-to-admin path in it a mass-exploitation candidate. Automated scanning for vulnerable WordPress plugins typically begins within hours of public disclosure.
Vulnerability class: Cross-Site Request Forgery (CWE-352). The root cause is a missing or improperly validated nonce (WordPress's CSRF token mechanism) on a privileged AJAX or form-handling endpoint within the plugin. WordPress exposes plugin functionality through /wp-admin/admin-ajax.php and admin-post handlers; when a state-changing action — in this case, one that results in user account creation with the administrator role — is reachable without nonce verification, an attacker can forge the request.
Attack chain (defender's view):
- The attacker identifies a site running a vulnerable Elementor version (trivially fingerprintable via
/wp-content/plugins/elementor/readme.txtor asset paths). - The attacker crafts a forged request to the vulnerable Elementor endpoint — typically a POST to
admin-ajax.phpcarrying an Elementor-specificactionparameter — that results in the creation of a new user account with administrative privileges. Because the nonce check is absent or bypassable, no valid authenticated session is required. - WordPress commits the new user to the
wp_userstable with theadministratorrole meta inwp_usermeta. - The attacker logs in via
wp-login.phpwith the credentials they chose, installs a malicious plugin/theme or drops a webshell intowp-content/uploads, and establishes persistence independent of the original vulnerability.
Why CSRF here is worse than typical: Classic CSRF requires tricking a logged-in admin into visiting a malicious page. Reporting on this flaw indicates unauthenticated exploitation — meaning the attack can be executed at scale by bots, without social engineering, against every vulnerable site on the internet. That shifts this from "user awareness problem" to "internet-wide mass exploitation risk."
Exploitation status: Publicly disclosed with a functional exploitation path described. Given Elementor's install base and the low complexity of CSRF exploitation, defenders should operate under the assumption of active or imminent in-the-wild scanning and exploitation. Treat any Internet-facing WordPress instance running an unpatched Elementor version as potentially compromised until audited.
Detection & Response
The highest-fidelity detection surface for this attack is your web server access logs and WordPress's own user/audit records. The forged request has to traverse the web tier, and the account creation has to land in the database. Focus on three observables: (1) POST requests to admin-ajax.php carrying Elementor action parameters from sources with no prior session activity, (2) unexpected administrator accounts in wp_users, and (3) post-exploitation behavior such as wp-login.php successes from unusual geographies followed by plugin/theme installation requests (update.php?action=install-plugin, theme-editor requests).
---
title: Suspicious Elementor AJAX Activity on WordPress
description: Detects POST requests to WordPress admin-ajax.php containing Elementor action parameters, indicative of attempts to interact with Elementor plugin endpoints. Elevated scrutiny is warranted where requests originate from sources with no authenticated session context, consistent with CSRF exploitation targeting account creation.
author: Security Arsenal
id: 4b7e2c91-3d8a-4f5e-9a1c-6e2d8f0b3a54
status: experimental
date: 2026/01/15
references:
- https://www.bleepingcomputer.com/news/security/elementor-wordpress-flaw-lets-attackers-create-admin-accounts/
- https://attack.mitre.org/techniques/T1190/
logsource:
category: webserver
product: apache
service: accesslog
detection:
selection:
cs-method: 'POST'
cs-uri-stem|contains: '/wp-admin/admin-ajax.php'
cs-uri-query|contains:
- 'elementor'
- 'action=elementor'
condition: selection
falsepositives:
- Legitimate Elementor editor activity by authenticated site administrators
- Tune by correlating with authenticated session cookies and known admin source IPs
level: high
---
title: WordPress User Creation or Login Endpoint Abuse
description: Detects request patterns consistent with forged user registration and subsequent attacker login on WordPress, including registration endpoint access and wp-login.php POSTs from sources that recently issued admin-ajax Elementor requests.
author: Security Arsenal
id: 8f3a1d62-7c4e-4b9a-a2d5-1e9c4f7b8d21
status: experimental
date: 2026/01/15
references:
- https://www.bleepingcomputer.com/news/security/elementor-wordpress-flaw-lets-attackers-create-admin-accounts/
- https://attack.mitre.org/techniques/T1136/
logsource:
category: webserver
product: apache
service: accesslog
detection:
selection_registration:
cs-uri-stem|contains:
- '/wp-login.php'
- '/wp-json/wp/v2/users'
cs-uri-query|contains:
- 'action=register'
- 'action=createuser'
selection_login:
cs-method: 'POST'
cs-uri-stem|contains: '/wp-login.php'
condition: selection_registration or selection_login
falsepositives:
- Legitimate administrator logins and user management
- Membership/e-commerce plugins that register users via wp-login.php; baseline per-site and alert on deviation
level: medium
// Hunt for Elementor admin-ajax POST activity correlated with subsequent wp-login success patterns
// Works with CommonSecurityLog (WAF/CEF ingestion), Syslog-ingested web logs, or W3CIISLog
let elementorAjax =
CommonSecurityLog
| where TimeGenerated > ago(7d)
| where RequestURL has "admin-ajax.php" and RequestURL has "elementor"
| where RequestMethod == "POST"
| summarize AjaxHits = count(), FirstSeen = min(TimeGenerated), LastSeen = max(TimeGenerated) by SourceIP, RequestURL;
let suspiciousLogins =
CommonSecurityLog
| where TimeGenerated > ago(7d)
| where RequestURL has "wp-login.php" and RequestMethod == "POST"
| summarize LoginPosts = count() by SourceIP, DestinationHostName;
elementorAjax
| join kind=inner suspiciousLogins on SourceIP
| project SourceIP, DestinationHostName, RequestURL, AjaxHits, LoginPosts, FirstSeen, LastSeen
| order by AjaxHits desc
;
// Secondary hunt: REST API user creation attempts against /wp-json/wp/v2/users
CommonSecurityLog
| where TimeGenerated > ago(7d)
| where RequestURL has "/wp-json/wp/v2/users" and RequestMethod == "POST"
| summarize Attempts = count(), make_set(RequestURL) by SourceIP, DestinationHostName, TimeGenerated
| order by TimeGenerated desc
-- Artifact: Hunt.WordPress.ElementorCSRF
-- Parses Apache/Nginx access logs for Elementor admin-ajax POSTs and user-creation indicators,
-- and enumerates the installed Elementor version for exposure triage.
-- 1) Suspicious web requests targeting admin-ajax.php with Elementor actions
SELECT FullPath AS LogFile, Line, parse_string_with_regex(string=Line,
regex='(?P<src>\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\d{1,3})').src AS SourceIP
FROM parse_lines(filename="/var/log/apache2/access.log")
WHERE Line =~ "admin-ajax.php" AND Line =~ "elementor" AND Line =~ "POST"
-- 2) Registration and user-creation endpoint hits
SELECT FullPath AS LogFile, Line
FROM parse_lines(filename="/var/log/apache2/access.log")
WHERE Line =~ "action=register"
OR Line =~ "action=createuser"
OR Line =~ "/wp-json/wp/v2/users"
-- 3) Installed Elementor version disclosure (readme.txt fingerprint)
SELECT FullPath, Data.Version AS ElementorVersion, Mtime
FROM glob(globs="/var/www/**/wp-content/plugins/elementor/readme.txt")
LIMIT 100
#!/bin/bash
# WordPress / Elementor CSRF exposure triage and hardening script
# Run on the hosting server with WP-CLI installed (or adapt paths as needed)
WP_PATH="/var/www/html"
# 1) Identify installed Elementor version
echo "=== Elementor version ==="
wp --path="$WP_PATH" plugin get elementor --field=version 2>/dev/null || \
grep -m1 "Stable tag" "$WP_PATH"/wp-content/plugins/elementor/readme.txt 2>/dev/null
# 2) Update Elementor (and all plugins) to latest patched release
echo "=== Updating Elementor ==="
wp --path="$WP_PATH" plugin update elementor
# 3) Audit for rogue administrator accounts — flag anything you do not recognize
echo "=== Administrator accounts ==="
wp --path="$WP_PATH" user list --role=administrator --fields=user_login,user_email,user_registered
# 4) Show accounts registered in the last 30 days for closer review
echo "=== Recently registered users ==="
wp --path="$WP_PATH" user list --fields=user_login,user_email,user_registered,roles | \
awk -v cutoff="$(date -d '30 days ago' +%Y-%m-%d)" '$3 >= cutoff'
# 5) Grep access logs for exploitation indicators
echo "=== Suspicious admin-ajax / Elementor POSTs ==="
grep -h "admin-ajax.php" /var/log/apache2/*access*.log /var/log/nginx/*access*.log 2>/dev/null | \
grep -i "elementor" | grep "POST" | tail -n 50
echo "=== User registration / creation endpoint hits ==="
grep -hE "action=register|action=createuser|/wp-json/wp/v2/users" \
/var/log/apache2/*access*.log /var/log/nginx/*access*.log 2>/dev/null | tail -n 50
# 6) Check for unexpected files in uploads (webshell triage)
echo "=== PHP files in uploads directory (should be near-zero) ==="
find "$WP_PATH"/wp-content/uploads -name "*.php" -mtime -60 2>/dev/null
echo "Done. Any unrecognized admin account = treat as compromised: remove account, reset all credentials, rotate salts/keys in wp-config.php, and perform a full malware scan."
Remediation
-
Patch immediately. Update the Elementor plugin to the latest release via
wp-admin → Dashboard → Updates, WP-CLI, or your managed hosting control plane. Verify the update completed by confirming the plugin version inwp-admin → Pluginsand cross-checking against the version listed in the official Elementor changelog and the disclosure write-up on BleepingComputer (source linked below). If your organization pins plugin versions for change control, break glass on this one — an unauthenticated account-creation primitive justifies emergency change. -
Audit before you trust. Patching closes the door; it does not evict anyone already inside. Enumerate every account with the
administratorrole (wp user list --role=administrator) and validate each against your known admin roster. Delete anything unrecognized, then force password resets for all remaining privileged accounts. Rotate WordPress salts and security keys inwp-config.phpto invalidate existing sessions. -
Review post-exploitation artifacts. Check
wp-content/uploadsfor PHP files, review recently installed/activated plugins and themes, inspect cron entries (wp cron event list) and thewp_optionstable for injected autoloaded values, and examine outbound connections from the web host. -
Deploy compensating controls. If immediate patching is blocked, apply WAF rules blocking unauthenticated POSTs to
/wp-admin/admin-ajax.phpcarrying Elementor action parameters, and restrict access towp-login.phpand/wp-adminby IP allowlist where operationally feasible. Disable user registration (Settings → General → Membership) if not required, and ensure no REST API user-creation paths are exposed. -
Reduce standing risk going forward. WordPress plugin vulnerabilities of this class recur constantly. Enable automatic plugin updates for security releases, maintain a file-integrity monitoring baseline on
wp-content, forward web access logs to your SIEM (the detections above depend on it), and enforce MFA on all WordPress admin accounts — MFA blunts the value of a forged account even when credential creation succeeds.
Source: BleepingComputer — Elementor WordPress flaw lets attackers create admin accounts
Related Resources
Security Arsenal Managed SOC Services AlertMonitor Platform Book a SOC Assessment soc-mdr Intel Hub
Is your security operations ready?
Get a free SOC assessment or see how AlertMonitor cuts through alert noise with automated triage.