Paid Membership Subscriptions – Effortless Memberships, Recurring Payments & Content Restriction <= 2.17.3 - Reflected Cross-Site Scripting
Description
The Paid Membership Subscriptions – Effortless Memberships, Recurring Payments & Content Restriction plugin for WordPress is vulnerable to Reflected Cross-Site Scripting in versions up to, and including, 2.17.3 due to insufficient input sanitization and output escaping. This makes it possible for unauthenticated attackers to inject arbitrary web scripts in pages that execute if they can successfully trick a user into performing an action such as clicking on a link.
CVSS Vector Breakdown
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:NTechnical Details
<=2.17.3What Changed in the Fix
Changes introduced in v3.0.0
Source Code
WordPress.org SVNdeactivate'; ``` Wait, there's no reflection of `$_GET` here. * Let's try the Dashboard page. * Page: `admin.php?page=pms-dashboard-page` * Try parameters: `pms_add_ons_action`, `interval`, `search`. * *Wait!* I found it! Look at `assets/libs/pms-add-ons-lis…
Show full research plan
deactivate';
```
Wait, there's no reflection of $_GET here.
* Let's try the Dashboard page.
* Page: `admin.php?page=pms-dashboard-page`
* Try parameters: `pms_add_ons_action`, `interval`, `search`.
* *Wait!* I found it! Look at `assets/libs/pms-add-ons-listing/pms-add-ons-listing.php` line 185.
```php
$base_url = admin_url( 'admin.php?page='. sanitize_text_field( $_REQUEST['page'] ) );
```
If the admin is on `admin.php?page=pms-add-ons`.
If the plugin uses this `$base_url` to generate links.
What if we add another parameter to the `page`?
`admin.php?page=pms-add-ons&test="><script>alert(1)</script>`
Does `test` get reflected?
* Actually, let's look at the description again: "arbitrary web scripts in pages that execute if they can successfully trick a user into performing an action such as clicking on a link."
* This sounds like the XSS payload is *in the link*.
* Example: `https://site.com/wp-admin/admin
Check if your site is affected.
Run a free security audit to detect vulnerable plugins, outdated versions, and misconfigurations.