The NVD has published CVE-2026-106013, a critical CVSS 9.8 vulnerability affecting the Jupiter X Core plugin for WordPress in all versions up to and including 4.61.0. The flaw enables remote, unauthenticated attackers to bypass authentication entirely by exploiting a broken OAuth token handling routine in the plugin's Twitter/X social login integration.
Jupiter X Core is a companion plugin bundled with the Jupiter X theme — one of the most popular premium WordPress themes on ThemeForest, with hundreds of thousands of active installations. Any site running this plugin with the Twitter/X social login feature enabled is exposed. Given that WordPress powers over 40% of the web and this vulnerability requires no prior authentication, no user interaction, and is remotely exploitable over the network, defenders need to treat this as a drop-everything patch priority.
The vulnerability is particularly dangerous because it doesn't just grant access as any user — it potentially grants access as whichever WordPress account is linked to the site operator's stored Twitter/X credentials, which is frequently an administrator account.
Technical Analysis
Affected Component and Versions
| Detail | Value |
|---|---|
| Plugin | Jupiter X Core (WordPress) |
| Affected Versions | All versions ≤ 4.61.0 |
| CVE | CVE-2026-106013 |
| CVSS v3.1 Score | 9.8 (Critical) — AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Vulnerability Class | CWE-287: Improper Authentication |
| Vulnerable Function | verify_twitter_callback |
Root Cause: Broken OAuth Token Reassignment
The vulnerability lies in the verify_twitter_callback function within the Jupiter X Core plugin's Twitter/X social login handler. Here's the attack chain from a defender's perspective:
-
A visitor initiates Twitter/X social login on the vulnerable WordPress site. The site generates an OAuth request token and redirects the visitor to Twitter/X for authorization.
-
Twitter/X redirects back to the WordPress site with an
oauth_verifierparameter. Theverify_twitter_callbackfunction receives this callback. -
The handler exchanges the visitor's
oauth_verifierfor an access token — this is the critical step. Under normal OAuth flow, the returned access token and secret should belong to the authenticating visitor. -
The fatal flaw: After receiving the visitor's access token, the code never calls
setOauthToken()on the TwitterOAuth client object. This means the client object's credentials are never updated from the site operator's stored Access Token and Access Token Secret to the visitor's newly returned credentials. -
The subsequent
account/verify_credentialsAPI call is therefore signed with the site operator's stored Twitter/X credentials — not the visitor's. The API returns the operator's Twitter identity, not the visitor's. -
WordPress maps the returned Twitter identity to the WordPress account linked to the operator's Twitter/X profile. The attacker is now authenticated as that WordPress user — which is very commonly an administrator, since site operators typically configure social login with their own accounts first.
Exploitation Requirements
- No prior authentication required — the attacker only needs to initiate a Twitter/X OAuth flow against the vulnerable site.
- No user interaction needed from any legitimate user.
- Network accessible — exploitation occurs entirely over HTTP/HTTPS against the WordPress site's login callback endpoint.
- The site must have the Twitter/X social login feature configured and enabled within Jupiter X Core.
Exploitation Status
At the time of this writing, the vulnerability has been published to NVD. Given the CVSS 9.8 score, the trivial exploitation complexity (no special conditions, no race conditions, no prerequisites beyond the feature being enabled), and the massive WordPress install base, we assess that weaponization is imminent or already occurring. WordPress plugin vulnerabilities of this class — unauthenticated authentication bypass — historically see active exploitation within 24 to 72 hours of public disclosure. Check CISA KEV and Wordfence intelligence feeds for updates on confirmed in-the-wild exploitation.
Detection & Response
The following detections target the observable behaviors associated with exploitation of CVE-2026-106013. The primary indicators are: (1) anomalous requests to the Twitter/X OAuth callback endpoint, (2) successful WordPress admin logins following Twitter/X OAuth callbacks, particularly from unusual source IPs, and (3) post-exploitation activity such as plugin uploads, user creation, or file modification.
Sigma Rules
---
title: Jupiter X Core Twitter OAuth Callback Exploitation Attempt
id: 1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d
status: experimental
description: Detects HTTP requests to the WordPress Twitter/X social login callback endpoint associated with CVE-2026-106013 exploitation in Jupiter X Core plugin. Repeated or anomalous requests to this endpoint may indicate authentication bypass attempts.
references:
- https://nvd.nist.gov/vuln/detail/CVE-2026-106013
author: Security Arsenal
date: 2026/07/16
tags:
- attack.initial_access
- attack.t1190
logsource:
category: webserver
product: apache
detection:
selection:
cs-uri-query|contains:
- 'oauth_verifier'
- 'oauth_token'
cs-uri-stem|contains:
- 'wp-login.php'
- 'jupiterx'
- 'twitter'
- 'social-login'
- 'oauth'
- 'callback'
condition: selection
falsepositives:
- Legitimate users authenticating via Twitter/X social login
- OAuth flow from properly functioning social login integrations
level: high
---
title: WordPress Suspicious Admin Login via Social OAuth Callback
id: 2b3c4d5e-6f7a-8b9c-0d1e-2f3a4b5c6d7e
status: experimental
description: Detects POST requests to WordPress authentication endpoints with OAuth callback parameters that could indicate CVE-2026-106013 exploitation. Focuses on requests that combine OAuth token parameters with WordPress login processing.
references:
- https://nvd.nist.gov/vuln/detail/CVE-2026-106013
author: Security Arsenal
date: 2026/07/16
tags:
- attack.initial_access
- attack.t1078
logsource:
category: webserver
product: nginx
detection:
selection:
request|contains:
- 'oauth_verifier'
- 'verify_twitter_callback'
- 'jupiterx_core'
- 'social_login'
- 'twitter_callback'
filter_method:
method: 'POST'
condition: selection and filter_method
falsepositives:
- Normal social login callback processing
level: critical
---
title: Post-Exploitation WordPress Admin Account Creation
id: 3c4d5e6f-7a8b-9c0d-1e2f-3a4b5c6d7e8f
status: experimental
description: Detects creation of new WordPress user accounts via the admin-ajax.php or user-new.php endpoints shortly after OAuth callback requests, which may indicate post-exploitation persistence following CVE-2026-106013 authentication bypass.
references:
- https://nvd.nist.gov/vuln/detail/CVE-2026-106013
author: Security Arsenal
date: 2026/07/16
tags:
- attack.persistence
- attack.t1136
- attack.t1136.001
logsource:
category: webserver
product: apache
detection:
selection_user_create:
cs-uri-stem|contains:
- '/wp-admin/user-new.php'
- 'admin-ajax.php'
cs-method: 'POST'
selection_user_create_action:
cs-body|contains:
- 'createuser'
- 'action=createuser'
- 'role=administrator'
condition: selection_user_create and selection_user_create_action
falsepositives:
- Legitimate administrator creating new user accounts
- Automated provisioning scripts
level: critical
KQL — Microsoft Sentinel / Defender
The following query hunts for web requests matching the OAuth callback pattern associated with this vulnerability. It assumes web server logs (Apache/Nginx/IIS) are ingested into Sentinel via the CommonSecurityLog or a custom table. Adjust table and field names to match your ingestion pipeline.
// Hunt for CVE-2026-106013 exploitation attempts against WordPress Jupiter X Core
// Searches for OAuth callback requests followed by successful admin logins
let OAuthCallbackPattern = "oauth_verifier";
let TwitterLoginIndicators = dynamic(["twitter", "social_login", "jupiterx", "verify_twitter_callback", "oauth"]);
let SuspiciousRequests =
CommonSecurityLog
| where TimeGenerated > ago(7d)
| where RequestURL has_any (TwitterLoginIndicators) or RequestURL contains OAuthCallbackPattern
| where RequestMethod in ("GET", "POST")
| extend ParsedQuery = extract_all(@"(oauth_verifier|oauth_token)=([^&]+)", RequestURL)
| where array_length(ParsedQuery) > 0
| summarize
RequestCount = count(),
UniqueDestinations = dcount(DestinationHostName),
FirstSeen = min(TimeGenerated),
LastSeen = max(TimeGenerated),
RequestURLs = make_set(RequestURL, 10)
by SourceIP, DestinationHostName, DestinationPort
| where RequestCount > 2;
// Correlate with successful WordPress admin logins from same source IPs
SuspiciousRequests
| join kind=inner (
CommonSecurityLog
| where TimeGenerated > ago(7d)
| where RequestURL contains "wp-login.php" or RequestURL contains "wp-admin"
| where ResponseCode == 302 or ResponseCode == 200
| summarize LoginCount = count(), LastLogin = max(TimeGenerated) by SourceIP, DestinationHostName
) on SourceIP, DestinationHostName
| project SourceIP, DestinationHostName, RequestCount, LoginCount, FirstSeen, LastSeen, RequestURLs, LastLogin
| sort by RequestCount desc
// Additional hunt: Detect post-exploitation activity on WordPress sites
// Look for plugin uploads, file modifications, or user creation from IPs
// that previously made OAuth callback requests
let SuspiciousIPs =
CommonSecurityLog
| where TimeGenerated > ago(7d)
| where RequestURL contains "oauth_verifier" and RequestURL has_any ("twitter", "social", "jupiterx")
| summarize by SourceIP;
CommonSecurityLog
| where TimeGenerated > ago(7d)
| where SourceIP in (SuspiciousIPs)
| where RequestURL has_any ("plugin-install.php", "theme-editor.php", "plugin-editor.php", "user-new.php", "update.php")
or RequestURL contains "admin-ajax.php" and RequestURL contains "upload"
| project TimeGenerated, SourceIP, DestinationHostName, RequestURL, RequestMethod, ResponseCode
| sort by TimeGenerated desc
Velociraptor VQL
This VQL artifact hunts for evidence of exploitation on WordPress servers by examining web server access logs for OAuth callback requests and correlating with recently modified WordPress files that may indicate post-exploitation activity.
-- Hunt for CVE-2026-106013 exploitation indicators on WordPress servers
-- Parses Apache/Nginx access logs for Twitter OAuth callback requests
-- and identifies recently modified PHP files in WordPress directories
LET oauth_requests = SELECT
FullPath AS LogFile,
Line AS RawLogEntry
FROM glob(globs=[
"/var/log/apache2/access*.log",
"/var/log/nginx/access*.log",
"/var/log/httpd/access*.log"
])
WHERE Line =~ 'oauth_verifier'
AND Line =~ '(twitter|social_login|jupiterx|verify_twitter_callback)'
LET modified_wp_files = SELECT
FullPath,
Mtime,
Size
FROM glob(globs=[
"/var/www/**/wp-content/plugins/**/*.php",
"/var/www/**/wp-content/themes/**/*.php",
"/var/www/**/wp-admin/**/*.php",
"/var/www/html/**/wp-content/plugins/**/*.php",
"/var/www/html/**/wp-admin/**/*.php"
])
WHERE Mtime > now() - 86400 * 7
AND NOT FullPath =~ 'jupiter-x-core'
AND FullPath =~ '\.php$'
ORDER BY Mtime DESC
SELECT
"OAuth Callback Requests" AS Category,
count(item=oauth_requests) AS IndicatorCount
FROM scope()
UNION ALL
SELECT
"Recently Modified WP Files (7d)" AS Category,
count(item=modified_wp_files) AS IndicatorCount
FROM scope()
-- Detailed view: List recently modified PHP files in WordPress directories
-- that could indicate webshell deployment or file tampering post-exploitation
SELECT
FullPath,
Mtime,
Ctime,
Size,
Mode
FROM glob(globs=[
"/var/www/**/wp-content/uploads/**/*.php",
"/var/www/html/**/wp-content/uploads/**/*.php",
"/var/www/**/wp-content/plugins/**/*.php",
"/var/www/html/**/wp-content/plugins/**/*.php"
])
WHERE Mtime > now() - 86400 * 3
AND FullPath =~ '\.php$'
ORDER BY Mtime DESC
LIMIT 100
Remediation Script
The following Bash script helps identify vulnerable Jupiter X Core installations, checks the installed plugin version, and verifies whether Twitter/X social login is potentially enabled. Run this on your WordPress hosting servers.
#!/bin/bash
# CVE-2026-106013 - Jupiter X Core Twitter OAuth Authentication Bypass
# Detection and remediation verification script
# Run with sufficient privileges to read WordPress directories
echo "============================================"
echo "CVE-2026-106013 Jupiter X Core Vulnerability"
echo "Detection & Verification Script"
echo "============================================"
echo ""
VULNERABLE_FOUND=0
# Common WordPress installation paths
WP_PATHS=(
"/var/www/html"
"/var/www"
"/srv/www"
"/home/*/public_html"
"/home/*/www"
"/opt/wordpress"
)
echo "[*] Scanning for Jupiter X Core plugin installations..."
echo ""
for base_path in "${WP_PATHS[@]}"; do
# Find jupiterx-core plugin directories
find $base_path -type d -name "jupiterx-core" -path "*/wp-content/plugins/*" 2>/dev/null | while read -r plugin_dir; do
wp_root=$(echo "$plugin_dir" | sed 's|/wp-content/plugins/jupiterx-core||')
echo "[FOUND] Jupiter X Core at: $plugin_dir"
# Check plugin version from the main plugin file
version=$(grep -m1 "Version:" "$plugin_dir/jupiterx-core.php" 2>/dev/null | awk '{print $NF}')
if [ -z "$version" ]; then
# Fallback: check readme.txt
version=$(grep -m1 "Stable tag:" "$plugin_dir/readme.txt" 2>/dev/null | awk '{print $NF}')
fi
echo " Version: ${version:-UNKNOWN}"
if [ -n "$version" ]; then
# Compare version - vulnerable if <= 4.61.0
if printf '%s\n4.61.0\n' "$version" | sort -V | head -1 | grep -q "^4.61.0$" && [ "$version" != "4.61.1" ]; then
major=$(echo "$version" | cut -d. -f1)
minor=$(echo "$version" | cut -d. -f2)
patch=$(echo "$version" | cut -d. -f3)
if [ "$major" -lt 4 ] || \
{ [ "$major" -eq 4 ] && [ "$minor" -lt 61 ]; } || \
{ [ "$major" -eq 4 ] && [ "$minor" -eq 61 ] && [ "$patch" -le 0 ]; }; then
echo " [!!! VULNERABLE !!!] Version $version <= 4.61.0"
VULNERABLE_FOUND=1
else
echo " [OK] Version $version appears patched"
fi
fi
else
echo " [WARNING] Could not determine version - treat as potentially vulnerable"
VULNERABLE_FOUND=1
fi
# Check if Twitter/X social login is configured
echo ""
echo " [*] Checking for Twitter/X OAuth configuration..."
# Look for Twitter OAuth credentials in wp-config.php and plugin settings
twitter_keys_found=0
if [ -f "$wp_root/wp-config.php" ]; then
if grep -qi "twitter\|TWITTER_API\|TWITTER_CONSUMER\|OAUTH" "$wp_root/wp-config.php" 2>/dev/null; then
echo " [!] Potential Twitter OAuth references found in wp-config.php"
twitter_keys_found=1
fi
fi
# Check plugin option in database config references
if grep -rqi "twitter" "$plugin_dir/includes/" 2>/dev/null | head -5; then
echo " [INFO] Twitter-related code found in plugin (expected)"
fi
# Check access logs for recent OAuth callback hits (last 24 hours)
echo ""
echo " [*] Checking access logs for recent OAuth callback requests..."
for log_dir in "/var/log/apache2" "/var/log/nginx" "/var/log/httpd"; do
if [ -d "$log_dir" ]; then
recent_hits=$(find "$log_dir" -name "access*" -mtime -1 -exec grep -c "oauth_verifier" {} \; 2>/dev/null | awk '{s+=$1}END{print s}')
if [ "$recent_hits" -gt 0 ] 2>/dev/null; then
echo " [!!! ALERT !!!] Found $recent_hits OAuth callback requests in last 24h logs at $log_dir"
echo " [!!!] Investigate immediately for potential exploitation"
fi
fi
done
echo ""
echo " ----------------------------------------"
echo ""
done
done
echo "============================================"
echo "SCAN COMPLETE"
echo "============================================"
if [ "$VULNERABLE_FOUND" -eq 1 ]; then
echo ""
echo "[!!! ACTION REQUIRED !!!]"
echo "One or more vulnerable Jupiter X Core installations detected."
echo ""
echo "IMMEDIATE STEPS:"
echo " 1. Update Jupiter X Core to version 4.61.1 or later"
echo " 2. If you cannot patch immediately, DISABLE the Twitter/X social login feature"
echo " 3. Review WordPress admin accounts for unauthorized additions"
echo " 4. Check wp-content/uploads/ and wp-content/plugins/ for recently modified PHP files"
echo " 5. Review access logs for OAuth callback requests from suspicious IPs"
echo " 6. Rotate WordPress admin passwords and OAuth application credentials"
echo ""
else
echo ""
echo "[OK] No vulnerable Jupiter X Core installations detected."
echo ""
fi
# Check for recently created admin users (requires WP-CLI)
echo "[*] Checking for WP-CLI availability to audit user accounts..."
if command -v wp &> /dev/null; then
echo "[WP-CLI found] Listing administrator accounts created in last 7 days:"
for base_path in "${WP_PATHS[@]}"; do
find $base_path -name "wp-config.php" -maxdepth 3 2>/dev/null | while read -r config; do
wp_dir=$(dirname "$config")
echo " Checking: $wp_dir"
wp user list --role=administrator --path="$wp_dir" --fields=ID,user_login,user_email,user_registered --format=table 2>/dev/null
done
done
else
echo "[INFO] WP-CLI not found. Manually review WordPress admin users."
echo " Run: wp user list --role=administrator"
fi
Remediation
Immediate Actions (Within 24 Hours)
-
Update Jupiter X Core to version 4.61.1 or later. This is the definitive fix. The patch corrects the
verify_twitter_callbackfunction to properly callsetOauthToken()with the visitor's returned credentials before making theaccount/verify_credentialsAPI call.- Navigate to WordPress Admin → Plugins → Installed Plugins and update Jupiter X Core.
- If using WP-CLI:
wp plugin update jupiterx-core - If auto-updates are enabled for plugins, verify the update was applied.
-
If you cannot patch immediately, disable the Twitter/X social login feature within Jupiter X Core settings. This eliminates the attack surface entirely while you schedule the update. Navigate to Jupiter X → Settings → Social Login and disable the Twitter/X provider.
-
Alternatively, deactivate the Jupiter X Core plugin entirely if the social login feature is business-critical and you cannot immediately update. Note that this will break theme functionality that depends on the plugin.
Post-Patch Actions
-
Audit WordPress administrator accounts. Review all accounts with administrator privileges. Look for:
- Accounts you did not create
- Recently modified account details (email changes, password resets)
- Accounts with registration timestamps that don't match your records
Bash / Shell
Via WP-CLI: List all admin accounts sorted by registration date
wp user list --role=administrator --fields=ID,user_login,user_email,user_registered --orderby=user_registered --order=DESC
5. **Review WordPress activity logs.** If you have an activity log plugin (WP Activity Log, Simple History, etc.), review the period when your site was vulnerable for suspicious logins, plugin installations, theme modifications, or settings changes.
6. **Rotate credentials.** As a precautionary measure:
- Reset passwords for all WordPress administrator accounts
- Rotate the Twitter/X API credentials configured in Jupiter X Core (Consumer Key, Consumer Secret, Access Token, Access Token Secret)
- Regenerate WordPress security keys and salts in `wp-config.php` (this invalidates all active sessions)
7. **Scan for webshells and file tampering.** Run a full malware scan using Wordfence, Sucuri, or a comparable solution. Pay special attention to:
- `wp-content/uploads/` for PHP files (this directory should not contain executable PHP)
- Recently modified files in `wp-content/plugins/` and `wp-content/themes/`
- Any files with suspicious names (random strings, base64-encoded names, double extensions)
8. **Review OAuth application settings on Twitter/X Developer Portal.** Check the OAuth application associated with your site's social login for any unauthorized changes, additional callback URLs, or unexpected access patterns.
### Hardening Recommendations
9. **Implement a Web Application Firewall (WAF).** Solutions like Wordfence (WordPress-native), Cloudflare, or Sucuri can provide virtual patching for known WordPress plugin vulnerabilities. Configure custom rules to block requests containing `oauth_verifier` parameters to unexpected endpoints.
10. **Enable WordPress auto-updates for plugins.** Given the frequency and severity of WordPress plugin vulnerabilities, enabling automatic minor and major updates for critical plugins reduces your exposure window.
11. **Restrict WordPress admin access by IP** where operationally feasible. Use `.htaccess` rules or your WAF to limit access to `/wp-admin/` and `wp-login.php` to known IP ranges.
12. **Deploy server-side PHP execution prevention in uploads.** Add the following to `wp-content/uploads/.htaccess`:
```
<FilesMatch "\.php$">
Require all denied
</FilesMatch>
Vendor and Intelligence Resources
- NVD Entry: https://nvd.nist.gov/vuln/detail/CVE-2026-106013
- CISA KEV Catalog: Monitor for inclusion at https://www.cisa.gov/known-exploited-vulnerabilities-catalog
- Wordfence Intelligence: Check for threat intelligence updates on active exploitation
- Jupiter X Changelog: Monitor Artbees' official changelog for the 4.61.1+ release notes
Related Resources
Security Arsenal Penetration Testing Services AlertMonitor Platform Book a SOC Assessment vulnerability-management Intel Hub
Is your security operations ready?
Get a free SOC assessment or see how AlertMonitor cuts through alert noise with automated triage.