Cloudanix VulnDB

CVE-2023-6989

Critical · 9.8

CVSS

9.8

EPSS

56.6%

Published

Feb 5, 2024

CISA due date

—

Cloudanix analysis

Next patch cycle SSVC: Attend

A flaw in a WordPress security plugin can let outsiders take over affected websites without needing a password.

Weaponized
Exploitation
Remote Unauthenticated
Attacker needs
None
Complexity
Low
Impact
Remote Code Execution
Component
Application
Class
Path Traversal
Remediation
Upgrade
Effort
Medium
Patch risk
Low

What it actually does

CVE-2023-6989 is an unauthenticated local file inclusion vulnerability in the Shield Security – Smart Bot Blocking & Intrusion Prevention Security WordPress plugin, affecting versions up to and including 18.5.9. The vulnerable render_action_template parameter can be manipulated to make WordPress include server-local files. If an attacker can reference a PHP file already present on the server, or first place PHP content somewhere the web server can read, the inclusion can result in arbitrary PHP code execution in the context of the WordPress/PHP process. Successful exploitation can expose sensitive files, alter site content, create administrator users, install web shells or malicious plugins, and fully compromise the WordPress application and underlying hosting account permissions.

Why it matters to the business

A vulnerable public WordPress site can be taken over without a valid login. Because the flaw has a CVSS score of 9.8, a high EPSS probability, and weaponized exploit maturity, organizations should treat internet-exposed instances as high-risk even though the vulnerability is not currently listed in CISA KEV. Business consequences can include website defacement, malware delivery to visitors, credential theft, spam or SEO abuse, loss of customer trust, downtime, incident response costs, and potential compromise of adjacent applications hosted under the same account.

How an attack unfolds

An attacker identifies a WordPress site using the Shield Security plugin at version 18.5.9 or earlier. They send a crafted unauthenticated HTTP request to a plugin-exposed action or route containing a malicious render_action_template value. The value uses path traversal or a controlled local path to force the plugin to include a file the attacker chooses. If the included file contains PHP code, the code executes inside the WordPress runtime. Attackers commonly chain local file inclusion with another primitive such as log poisoning, uploaded media containing PHP, temporary file abuse, writable cache/session files, or previously planted files to convert file inclusion into command execution. After execution, they typically establish persistence by adding an administrator account, modifying theme/plugin files, dropping a web shell, disabling security controls, and using WordPress access to steal data or pivot further within the hosting environment.

How to fix it

Upgrade the Shield Security plugin to a version newer than 18.5.9 that contains the vendor fix. If a fixed version is not available through the normal WordPress update channel, disable and remove the plugin until a patched release is available. Do not rely on authentication controls, because exploitation is unauthenticated. As compensating controls, restrict direct internet access to WordPress administration and plugin endpoints where feasible, deploy web application firewall rules that block render_action_template requests containing traversal patterns or unexpected PHP paths, disable PHP execution in upload and cache directories, enforce least-privilege filesystem permissions for the web server user, and remove unused plugins and themes. After patching or removing the plugin, rotate WordPress administrator credentials and review the site for unauthorized users, modified PHP files, and malicious plugins because successful exploitation can leave persistent access behind.

How to confirm the fix worked

Confirm the installed Shield Security plugin version is greater than 18.5.9 or that the plugin has been removed. In the WordPress dashboard, review Plugins > Installed Plugins and verify no vulnerable Shield Security version remains active. From the filesystem, inspect wp-content/plugins/ for the Shield Security plugin directory and verify its metadata version in the plugin header. Validate that requests containing render_action_template with traversal payloads are rejected and do not result in HTTP 200 responses, PHP warnings, file disclosure, or template rendering. Review WAF, reverse proxy, and web server logs to ensure exploit attempts are blocked. Perform file integrity checks against WordPress core, plugins, themes, and writable directories, and confirm no unauthorized administrator users, malicious scheduled tasks, or unknown PHP files were introduced before remediation.

Typical attack path

  1. Scan the internet for WordPress sites exposing the Shield Security plugin or plugin-specific assets.
  2. Fingerprint the plugin version and identify instances running version 18.5.9 or earlier.
  3. Send unauthenticated HTTP requests containing a crafted render_action_template parameter with traversal sequences or unexpected local file paths.
  4. Attempt to include sensitive local files to confirm the vulnerability and disclose environment details.
  5. If needed, poison an includable file such as a web server log, application log, cache file, session file, or writable plugin/theme file with PHP code.
  6. Trigger inclusion of the poisoned or attacker-controlled PHP file to execute code in the WordPress/PHP process.
  7. Install persistence such as a web shell, rogue WordPress administrator account, malicious plugin, modified theme file, or scheduled task.
  8. Use the compromised site for data theft, credential harvesting, spam, malware distribution, defacement, or further lateral movement within the hosting account.

How to detect it

To determine whether exploitation already occurred, review HTTP access logs from web servers, CDN, WAF, and reverse proxies for unauthenticated requests containing the render_action_template parameter, especially with ../ traversal, URL-encoded traversal, absolute filesystem paths, PHP stream wrappers, or references to logs, uploads, cache, sessions, temporary directories, or plugin/theme PHP files. Correlate suspicious requests with PHP error logs showing failed include, require, open_basedir, missing template, or unexpected file path warnings. Inspect WordPress application logs and admin activity for newly created users, privilege changes, plugin/theme editor activity, installation of unfamiliar plugins, and unexpected option changes around the time of suspicious requests. Search the filesystem for recently modified PHP files under wp-content/uploads, wp-content/cache, wp-content/plugins, wp-content/themes, mu-plugins, and temporary directories. Look for web shell patterns such as eval, assert, system, shell_exec, passthru, base64_decode, gzinflate, preg_replace with /e, or long obfuscated strings. Review web server logs for follow-on access to newly created PHP files and outbound network connections from the web server process to unfamiliar destinations. Because this vulnerability is weaponized and has a high EPSS probability, absence of a public KEV listing should not be treated as evidence of low exploitation risk.

  • render_action_template=
  • render_action_template=../
  • render_action_template=..%2f
  • render_action_template=%2e%2e%2f
  • render_action_template=../../
  • render_action_template=%2e%2e%2f%2e%2e%2f
  • render_action_template=/etc/passwd
  • render_action_template=php://
  • render_action_template=php://filter
  • render_action_template=php://input
  • render_action_template=data://
  • render_action_template=expect://
  • render_action_template=zip://
  • render_action_template=phar://
  • render_action_template=/proc/self/environ
  • render_action_template=/var/log/
  • render_action_template=/tmp/
  • render_action_template=wp-config.php
  • render_action_template=wp-content/uploads
  • render_action_template=wp-content/cache
  • wp-content/plugins/wp-simple-firewall/
  • wp-content/plugins/shield-security/
  • wp-content/uploads/*.php
  • wp-content/cache/*.php
  • wp-content/mu-plugins/*.php
  • Failed opening required
  • failed to open stream
  • include(): Failed opening
  • require(): Failed opening
  • open_basedir restriction in effect
  • eval(
  • base64_decode(
  • shell_exec(
  • passthru(
  • system($_
  • assert($_

What your security team should do

  • Immediately inventory WordPress sites for the Shield Security plugin and prioritize internet-exposed instances running version 18.5.9 or earlier.
  • Upgrade the plugin to a fixed release newer than 18.5.9, or disable and remove it if a fixed release is not available.
  • Search historical web, WAF, CDN, and reverse proxy logs for render_action_template requests, path traversal sequences, and attempts to include PHP files.
  • Perform post-exploitation checks on vulnerable sites, including administrator user review, plugin/theme integrity validation, web shell hunting, and recently modified PHP file analysis.
  • Block requests containing render_action_template with traversal strings, absolute local paths, stream wrappers, or suspicious PHP file references at the WAF or reverse proxy layer.
  • Disable PHP execution in uploads, cache, backup, and temporary directories wherever supported by the hosting stack.
  • Rotate WordPress administrator credentials, application secrets, database credentials, and hosting credentials if compromise is suspected.
  • Enable centralized logging for WordPress, web server access/error logs, PHP errors, WAF events, and file integrity monitoring to support retrospective investigation.

The record

The Shield Security – Smart Bot Blocking & Intrusion Prevention Security plugin for WordPress is vulnerable to Local File Inclusion in all versions up to, and including, 18.5.9 via the render_action_template parameter. This makes it possible for unauthenticated attacker to include and execute PHP files on the server, allowing the execution of any PHP code in those files.

Affected packages

Ecosystem Package Introduced Fixed

Related vulnerabilities