Skip to main content
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Register free subscriber account on open-registration ProfilePress site
  2. Delivery
    Inject shortcode payload into profile bio or display-name field via [profile-bio] or [[tag]] bypass
  3. Exploit
    Trigger server-side render of member directory or public profile page
  4. Execution
    Attacker-controlled text bypasses strip_shortcodes() and reaches outer do_shortcode() call
  5. Persist
    Arbitrary WordPress shortcode executes in site application context
  6. Impact
    Exfiltrate data or invoke sensitive plugin functionality available to installed shortcodes

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Code injection prevention, sandbox exec
MITRE ATT&CK

2 techniques across 2 tactics: Execution, Initial Access

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Exploitation requires an authenticated WordPress user account at subscriber level or above - the minimum role automatically granted on any ProfilePress site with open registration, which is the plugin's primary deployment model. The attacker must be able to write to at least one of the vulnerable profile fields: the user bio (user_description meta), the display name with the first_last_names format parameter, or any field that reaches a do_shortcode() call without sanitization. Exploitation is further conditioned on the rendered profile or member directory being processed server-side (not cached in a state that prevents shortcode execution). The practical impact ceiling is gated by what shortcodes are installed on the target WordPress instance - sites with only benign shortcodes face lower impact. Exploitation is NOT possible without subscriber-level authentication; anonymous visitors cannot trigger the vulnerable code paths. The double-bracket [[tag]] bypass does not require any special configuration beyond the attacker controlling a profile field value.

Impact

The NVD CVSS 3.1 vector AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:N scores 5.4 (Medium), accurately capturing that this is network-reachable, requires no complexity or user interaction, but does demand subscriber-level authentication and does not escape WordPress's application scope. The unchanged scope (S:U) means the vulnerability does not directly yield OS-level code execution, which is the critical nuance behind the 'RCE' tag in the input - practical impact depends entirely on what other shortcodes are installed on the target site (file-reading shortcodes, email shortcodes, admin shortcodes from other plugins). On a site with a rich plugin ecosystem, blast radius can substantially exceed C:L/I:L. No CISA KEV listing and no confirmed public exploit code keep this from being an immediate emergency, but three distinct bypass routes around the vendor's attempted partial fix indicate the mitigation was insufficient and that a complete remediation is required. EPSS data was not provided in the available intelligence; exploitation probability cannot be quantified. The low authentication requirement (subscriber) is the primary risk amplifier: any ProfilePress deployment with open public registration is exposed to the full subscriber-level attacker pool without further preconditions.

Exploit ScenarioDerived

An attacker self-registers a free subscriber account on a WordPress site running ProfilePress 4.16.19, then edits their profile and sets the bio field to contain an arbitrary WordPress shortcode payload. When any visitor or the site itself renders the member directory or public profile page, the [profile-bio] shortcode render path re-fetches the raw user_description meta and passes it directly to do_shortcode(), executing the attacker's payload in the WordPress application context. Alternatively, the attacker uses the [[malicious_shortcode]] double-bracket notation in a display-name field, which passes strip_shortcodes() silently and is later resolved by the outer do_shortcode() call; no public exploit code is confirmed, but all three bypass paths are precisely documented in the CVE source code references.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
No patch listed yet 0.3% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Aug 16, 2026

Arbitrary shortcode execution in ProfilePress (WordPress plugin) versions through 4.16.19 permits authenticated attackers holding only subscriber-level accounts to inject and run arbitrary WordPress shortcodes within the site context. The plugin's partial mitigation - applying strip_shortcodes() to [profile-first-name] and [profile-last-name] fields - is bypassed via at least three confirmed paths: the [profile-display-name format="first_last_names"] render chain, the [profile-bio] field (which re-fetches raw user_description meta, bypassing the sanitized value), and the double-bracket escape sequence [[tag]] that passes through strip_shortcodes() unmodified but is resolved by the outer do_shortcode() call. No public exploit code has been confirmed at time of analysis, but the low authentication bar (self-registration is the plugin's core use case) and three documented bypass vectors make this a meaningful risk on open-registration membership sites.

RemediationAI

Update ProfilePress to a version above 4.16.19 - upstream changeset 3635466 in the wp-user-avatar repository (https://plugins.trac.wordpress.org/changeset?reponame=&old=3635466%40wp-user-avatar&new=3635466%40wp-user-avatar) contains the fix commit, though the exact tagged release version incorporating this changeset is not confirmed in the available data and must be verified against the current WordPress.org plugin listing or the Wordfence advisory before updating. As a compensating control prior to patching, disable open user self-registration on the WordPress site (Settings > General > uncheck 'Anyone can register') to eliminate the unauthenticated-to-subscriber escalation path; this may conflict with the plugin's core membership use case and requires business approval. Additionally, audit all installed WordPress plugins for shortcodes that perform sensitive operations (file reads, email dispatch, privilege assignment) to understand the true blast radius if shortcode injection is already active in your environment. Do not rely on the partial strip_shortcodes() mitigation present in 4.16.19 - it is confirmed bypassable via the three paths described in the CVE.

Affected VersionsENISA

Paid Membership Plugin, Ecommerce, User Registration Form, Login Form, User Profile & Restrict Content – ProfilePress 0 ≤4.16.19

Affected Packages

euvd paid_membership_plugin_ecommerce_user_registration_form_login_form_user_profile_restrict_content_profilepress no fix

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

ProfilePress - distributed under the package slug wp-user-avatar and maintained by properfraction - is a WordPress membership, ecommerce, and user-profile plugin. The vulnerability is rooted in CWE-94 (Improper Control of Generation of Code / Code Injection): user-supplied profile field values reach WordPress's do_shortcode() function without adequate sanitization. The affected CPE is cpe:2.3:a:properfraction:paid_membership_plugin,_ecommerce,_user_registration_form,_login_form,_user_profile_&_restrict_content_-_profilepress:*. Specific vulnerable call sites identified in the referenced source code are: ShortcodeParser/MemberDirectoryTag.php line 98 and Themes/DragDrop/MemberDirectoryListing.php line 90 (member directory render), ShortcodeParser/Builder/FrontendProfileBuilder.php line 286 (profile display-name rendering), and Classes/RegistrationAuth.php line 170 (registration flow). The [profile-bio] path is particularly notable because it re-fetches the raw user_description meta from the database rather than using a pre-sanitized value, effectively sidestepping any stripping applied earlier in the request cycle. The double-bracket [[tag]] bypass exploits WordPress core's own shortcode unescaping behavior: strip_shortcodes() does not strip double-bracketed sequences, but do_shortcode() subsequently converts [[tag]] to [tag] and executes it.

Know when Paid Membership Plugin Ecommerce User Registration Form Login Form User Profile Restrict Content Profilepress gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (Wordfence) PRIMARY 5.4 MEDIUM
AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:N
vuln.today AI 5.4 MEDIUM

Network-reachable profile submission, subscriber auth required (PR:L), no user interaction needed, scope unchanged as execution stays within WordPress application boundary with limited direct C/I impact.

3.1 AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:N
4.0 AV:N/AC:L/AT:N/PR:L/UI:N/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (Wordfence).

CVSS VectorVendor: Wordfence

Attack Vector
Network
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Unchanged
Confidentiality
Low
Integrity
Low
Availability
None

DescriptionCVE.org

The The Paid Membership Plugin, Ecommerce, User Registration Form, Login Form, User Profile & Restrict Content - ProfilePress plugin for WordPress is vulnerable to arbitrary shortcode execution in all versions up to, and including, 4.16.19. This is due to the software allowing users to execute an action that does not properly validate a value before running do_shortcode. This makes it possible for authenticated attackers, with subscriber-level access and above, to execute arbitrary shortcodes. The partial mitigation introduced via strip_shortcodes() on [profile-first-name] and [profile-last-name] can be bypassed through the [profile-display-name format="first_last_names"] render path, the [profile-bio] render path (which re-fetches the raw description meta), and the double-bracket escape sequence [[tag]], all of which allow attacker-controlled shortcode text to reach the outer do_shortcode() call.

Threat Intelligence Overview

EPSS Score
0.3%
Top 75% exploitable
Prevalence
Medium
widely-used WordPress membership plugin, not universally deployed
Data Quality
6 sources
Confidence: High

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.3%
Patch available No
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

27
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +27
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Code Injection CRITICAL

Code injection occurs when an application accepts user input and passes it directly into a language interpreter or evaluator without proper sanitization.

Remote Code Execution represents the critical moment when an attacker successfully runs arbitrary code on a target system without physical access.

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy