CVE-2020-35947

7.4 HIGH

📋 TL;DR

This vulnerability in the PageLayer WordPress plugin allows authenticated users to execute AJAX actions without proper permission checks, including modifying page content and injecting cross-site scripting (XSS) payloads. It affects WordPress sites using PageLayer plugin versions before 1.1.2. The issue stems from using nonces for authorization when those nonces were publicly accessible.

💻 Affected Systems

Products:
  • WordPress PageLayer plugin
Versions: All versions before 1.1.2
Operating Systems: Any OS running WordPress
Default Config Vulnerable: ⚠️ Yes
Notes: Requires WordPress installation with PageLayer plugin enabled. Any authenticated user (including subscribers) can exploit this vulnerability.

📦 What is this software?

⚠️ Risk & Real-World Impact

🔴

Worst Case

Attackers could modify any page content, inject persistent XSS payloads affecting all visitors, deface websites, steal session cookies, and potentially escalate privileges through crafted payloads.

🟠

Likely Case

Authenticated attackers (including low-privilege users) modifying page content, injecting XSS that affects other users, and potentially compromising user accounts through session theft.

🟢

If Mitigated

With proper authentication and authorization controls, only authorized administrators could modify content, preventing unauthorized changes and XSS injection.

🌐 Internet-Facing: HIGH
🏢 Internal Only: MEDIUM

🎯 Exploit Status

Public PoC: ⚠️ Yes
Weaponized: LIKELY
Unauthenticated Exploit: ✅ No
Complexity: LOW

Exploitation requires authenticated access but is straightforward once authenticated. Public proof-of-concept code exists in security advisories.

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: 1.1.2

Vendor Advisory: https://wordpress.org/plugins/pagelayer/#developers

Restart Required: No

Instructions:

1. Log into WordPress admin panel. 2. Navigate to Plugins → Installed Plugins. 3. Find PageLayer plugin. 4. Click 'Update Now' if update available. 5. Alternatively, download version 1.1.2+ from WordPress repository and replace plugin files.

🔧 Temporary Workarounds

Disable PageLayer plugin

all

Temporarily disable the vulnerable plugin until patched

wp plugin deactivate pagelayer

Restrict user registration

all

Prevent new user accounts from being created to limit attack surface

Settings → General → Membership: Uncheck 'Anyone can register'

🧯 If You Can't Patch

  • Implement web application firewall (WAF) rules to block suspicious AJAX requests to pagelayer endpoints
  • Monitor and audit user activity logs for unauthorized page modifications or suspicious AJAX calls

🔍 How to Verify

Check if Vulnerable:

Check WordPress admin → Plugins → Installed Plugins for PageLayer version. If version is below 1.1.2, system is vulnerable.

Check Version:

wp plugin list --name=pagelayer --field=version

Verify Fix Applied:

Verify PageLayer plugin version is 1.1.2 or higher in WordPress admin panel.

📡 Detection & Monitoring

Log Indicators:

  • POST requests to /wp-admin/admin-ajax.php with action=pagelayer_save_content or other pagelayer_* actions from non-admin users
  • Unexpected page modifications in revision history

Network Indicators:

  • HTTP POST requests to admin-ajax.php containing pagelayer_* parameters from unexpected IPs

SIEM Query:

source="wordpress.log" AND "admin-ajax.php" AND "pagelayer_" AND NOT user_role="administrator"

🔗 References

📤 Share & Export