[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fHVh_RKTdPRBpg9o7oYFWj9BQYg37ii5dQMIPxYEVMEQ":3},{"id":4,"url_slug":5,"title":6,"description":7,"plugin_slug":8,"theme_slug":9,"affected_versions":10,"patched_in_version":11,"severity":12,"cvss_score":13,"cvss_vector":14,"vuln_type":15,"published_date":16,"updated_date":17,"references":18,"days_to_patch":20,"patch_diff_files":21,"patch_trac_url":9,"research_status":30,"research_verified":31,"research_rounds_completed":32,"research_plan":33,"research_summary":9,"research_vulnerable_code":9,"research_fix_diff":9,"research_exploit_outline":9,"research_model_used":34,"research_started_at":35,"research_completed_at":36,"research_error":9,"poc_status":9,"poc_video_id":9,"poc_summary":9,"poc_steps":9,"poc_tested_at":9,"poc_wp_version":9,"poc_php_version":9,"poc_playwright_script":9,"poc_exploit_code":9,"poc_has_trace":31,"poc_model_used":9,"poc_verification_depth":9,"poc_exploit_code_gated":31,"source_links":37},"CVE-2026-41556","paid-membership-plugin-ecommerce-user-registration-form-login-form-user-profile-restrict-content-profilepress-authentica-8","Paid Membership Plugin, Ecommerce, User Registration Form, Login Form, User Profile & Restrict Content – ProfilePress \u003C= 4.16.13 - Authenticated (Subscriber+) Stored Cross-Site Scripting","The Paid Membership Plugin, Ecommerce, User Registration Form, Login Form, User Profile & Restrict Content – ProfilePress plugin for WordPress is vulnerable to Stored Cross-Site Scripting in versions up to, and including, 4.16.13 due to insufficient input sanitization and output escaping. This makes it possible for authenticated attackers, with subscriber-level access and above, to inject arbitrary web scripts in pages that will execute whenever a user accesses an injected page.","wp-user-avatar",null,"\u003C=4.16.13","4.16.14","medium",6.4,"CVSS:3.1\u002FAV:N\u002FAC:L\u002FPR:L\u002FUI:N\u002FS:C\u002FC:L\u002FI:L\u002FA:N","Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')","2026-04-23 00:00:00","2026-04-30 14:52:33",[19],"https:\u002F\u002Fwww.wordfence.com\u002Fthreat-intel\u002Fvulnerabilities\u002Fid\u002Fd0bd67c9-4c5a-41f0-971f-19e6525092ca?source=api-prod",8,[22,23,24,25,26,27,28,29],"assets\u002Fcss\u002Ffrontend.css","changelog.txt","languages\u002Fwp-user-avatar.pot","readme.txt","src\u002FAdmin\u002FSettingsPages\u002FDragDropBuilder\u002FFields\u002FSelectRole.php","src\u002FAdmin\u002FSettingsPages\u002FMembership\u002FPlansPage\u002FPlanWPListTable.php","src\u002FAdmin\u002FSettingsPages\u002FMembership\u002FPlansPage\u002FSettingsPage.php","src\u002FAdmin\u002FSettingsPages\u002FMembership\u002Fviews\u002Fcustomers\u002Fdata-metabox.php","researched",false,3,"# CVE-2026-41556 - ProfilePress Stored XSS Research Plan\n\n## 1. Vulnerability Summary\nThe **ProfilePress** plugin (formerly WP User Avatar) is vulnerable to **Authenticated (Subscriber+) Stored Cross-Site Scripting** in versions up to 4.16.13. The vulnerability exists because the plugin fails to sanitize or escape user-controlled profile data (specifically fields associated with a \"Customer\" entity) before rendering it in the administrative dashboard's \"Customer Details\" metabox. \n\nAn attacker with Subscriber-level access can update their own profile information with a malicious payload. When an administrator views that user's record in the ProfilePress \"Customers\" menu, the script executes in the admin context, potentially allowing for full site compromise.\n\n## 2. Attack Vector Analysis\n- **Vulnerable Endpoint**: The \"Customer Details\" metabox in the WordPress admin area.\n- **URL**: `wp-admin\u002Fadmin.php?page=ppress-membership-customers&view-customer=[ID]`\n- **Input Source**: User Profile fields (e.g., First Name, Last Name, or Billing Address fields) updated via the ProfilePress \"Edit Profile\" or \"My Account\" forms.\n- **Authentication Level**: Subscriber (or any role capable of editing their own profile information).\n- **Vulnerable Sink**: `src\u002FAdmin\u002FSettingsPages\u002FMembership\u002Fviews\u002Fcustomers\u002Fdata-metabox.php`.\n\n## 3. Code Flow\n1. **Source**: A Subscriber submits an \"Edit Profile\" form. The data is saved to user meta (e.g., `first_name`, `last_name`, `billing_first_name`).\n2. **Retrieval**: When an admin views the customer, `ProfilePress\\Core\\Membership\\Models\\Customer\\CustomerFactory` (inferred) creates a `CustomerEntity` object for that user.\n3. **Sink**: The file `src\u002FAdmin\u002FSettingsPages\u002FMembership\u002Fviews\u002Fcustomers\u002Fdata-metabox.php` renders the data:\n   - Line ~36: `\u003Cspan class=\"customer-name\">\u003C?php echo $customer_data->get_name() ?>\u003C\u002Fspan>`\n   - Line ~101 (Billing Section): `printf('\u003Cstrong>%s\u003C\u002Fstrong>: %s', esc_html($field['label']), $detail);`\n4. **Failure**: `$customer_data->get_name()` is echoed directly without `esc_html()`. While `$detail` in the billing section uses `wp_kses_post()`, `wp_kses_post` allows tags like `\u003Cimg>` and `\u003Ca>` which can be used for XSS (e.g., via `onerror` if not properly stripped or via `javascript:` protocols).\n\n## 4. Nonce Acquisition Strategy\nTo update the profile, a Subscriber needs to interact with the ProfilePress \"My Account\" page.\n1. **Shortcode Page**: Create a page with the `[profilepress-my-account]` shortcode.\n2. **Navigation**: Use `browser_navigate` to visit the page as the Subscriber.\n3. **Extraction**:\n   - The \"Edit Profile\" form typically contains a `_wpnonce` field.\n   - Alternatively, ProfilePress often localizes script data. Check for `ppress_frontend_script` or similar variables.\n   - **Target Variable**: `window.ppressFrontendConfig?.nonce` or a hidden input named `_wpnonce` inside the form with ID `ppress-edit-profile-form`.\n\n## 5. Exploitation Strategy\n1. **Setup Subscriber**: Create a Subscriber-level user.\n2. **Setup My Account**: Create a page with the shortcode `[profilepress-my-account]`.\n3. **Capture Nonce**: Navigate to the My Account page as Subscriber and extract the `_wpnonce` from the Account Details\u002FEdit Profile form.\n4. **Inject Payload**: Send a `POST` request to update the profile.\n   - **Action**: `pp_edit_profile_action` (Inferred from common ProfilePress profile update handlers).\n   - **Target Parameter**: `first_name` or `billing_first_name`.\n   - **Payload**: `\u003Cimg src=x onerror=alert(document.domain)>","gemini-3-flash-preview","2026-05-04 18:37:34","2026-05-04 18:38:30",{"type":38,"vulnerable_version":39,"fixed_version":11,"vulnerable_browse":40,"vulnerable_zip":41,"fixed_browse":42,"fixed_zip":43,"all_tags":44},"plugin","4.16.13","https:\u002F\u002Fplugins.trac.wordpress.org\u002Fbrowser\u002Fwp-user-avatar\u002Ftags\u002F4.16.13","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fwp-user-avatar.4.16.13.zip","https:\u002F\u002Fplugins.trac.wordpress.org\u002Fbrowser\u002Fwp-user-avatar\u002Ftags\u002F4.16.14","https:\u002F\u002Fdownloads.wordpress.org\u002Fplugin\u002Fwp-user-avatar.4.16.14.zip","https:\u002F\u002Fplugins.trac.wordpress.org\u002Fbrowser\u002Fwp-user-avatar\u002Ftags"]