CVE-2025-15708 is a Stored Cross-Site Scripting vulnerability in Live Composer before version 2.1.23. The plugin, a drag-and-drop page builder installed on more than 10,000 sites with over 1.6 million all-time downloads, does not sanitize and escape its module link settings — such as the social network fields of the Social module — before using them in front-end links. A high-privilege user, an Administrator working in the page builder, can store a payload in a module form that breaks out of the link attributes rendered by the builder, so it runs in the browser of every visitor who opens the page — up to full administrator account takeover. It matters on WordPress Multisite and on sites with DISALLOW_UNFILTERED_HTML, where administrators are not allowed to post raw HTML. The issue is fixed in 2.1.23, and the current release 2.1.24 additionally escapes the Social module fields used in the PoC below.

CVE CVE-2025-15708
Plugin Version Live Composer < 2.1.23, fixed in 2.1.23 (the Social module link fields from the PoC are additionally escaped in 2.1.24)
All Time 1 652 332
Active installations 10 000+
Publicly Published November 5, 2026
Last Updated November 7, 2026
Researcher Krugov Artyom
CWE CWE-79 Cross-Site Scripting
PoC Yes
Exploit No
Reference https://www.cve.org/CVERecord?id=CVE-2025-15708
https://wpscan.com/vulnerability/44369f11-99b5-4745-8e6b-aa705c3f8ce5/
Plugin Security Certification by CleanTalk Not safe
Logo of the plugin Live Composer plugin logo

Join the community of developers who prioritize security. Highlight your plugin in the WordPress catalog.

PSC by Cleantalk

Timeline

Not recorded Plugin testing and vulnerability detection in Live Composer were completed; the vulnerability report was sent with the PoC, technical description, and recommendations for remediation.
November 4, 2026 The vendor released version 2.1.23, the version listed as containing the fix: slug settings are sanitized and listing module permalinks are escaped.
November 5, 2026 WPScan publicly published the advisory for CVE-2025-15708.
November 6, 2026 The vendor released version 2.1.24, additionally escaping the link fields of the Social, Staff, Staff Social, Icon and Button modules — the vector demonstrated in the PoC.
November 7, 2026 The CVE-2025-15708 record was published in the CVE registry.

Discovery of the Vulnerability

Live Composer edits pages in its own front-end editor: clicking Edit on a page opens the builder, where the Elements panel lists the available modules. I found that the Social module takes a URL for each network — Facebook, Twitter, YouTube and more — and its output template prints these values straight into link attributes: <a class="dslc-social-icon" … href="<?php echo $options[$id]; ?>"> in modules/social/module.php, with no sanitizing on input and no escaping on output. The module settings are stored together with the page when it is saved in the editor, so whatever is placed in the fields is served to every visitor of that page. A value that closes the attribute with a quote can therefore inject new HTML of its own, including script-capable elements, and it is stored in the database — a persistent (Stored) XSS. The same missing-escaping pattern also affected the plugin’s custom post type slug settings and the listing module permalinks, which the vendor addressed in 2.1.23 and the CVE record covers.

Understanding of Stored Cross-Site Scripting attacks

Stored (persistent) Cross-Site Scripting keeps the attacker’s payload on the server so it is served automatically to whoever opens the affected page. This case needs a high-privilege account — the page builder is operated by administrators — which is why the issue is rated Low (CVSS 3.5): on a standard single site an administrator already holds the unfiltered_html capability and can post raw HTML anyway. The risk becomes real on WordPress Multisite and on sites that set DISALLOW_UNFILTERED_HTML, where administrators do not hold it: missing output escaping lets them bypass that restriction and run JavaScript in the context of the site.

The payload does not stay inside the editing screen. The poisoned social link is printed on the public front end of the page, so the injected code runs for every visitor — and, most importantly, for every administrator who opens or edits that page in Live Composer, which opens the way to session hijacking and full account takeover.

Exploiting the Stored Cross-Site Scripting Vulnerability

To reproduce the vulnerability on an affected version:

  • Use a site where administrators cannot post raw HTML: WordPress Multisite, or a single site with DISALLOW_UNFILTERED_HTML set to true.
  • Log in as an Administrator and open the target page.
  • Click Edit to launch the Live Composer front-end editor.
  • In Elements, select the Social module and add it to the page.
  • Insert the XSS payload into one of the social media form fields — Facebook, Twitter or YouTube — and save the page.
  • Open the page on the front end — the stored payload breaks out of the link attribute and executes for every visitor.

PoC:

POC:
Account - Administrator, on a site where administrators cannot post raw HTML
(WordPress Multisite, or DISALLOW_UNFILTERED_HTML set to true)

1) Open the target page and click Edit to launch the Live Composer front-end editor.
2) In Elements, select the Social module and add it to the page.
3) Insert the payload below into one of the social media form fields -
   Facebook, Twitter or YouTube:
   "><script></script><img src=x onerror=alert(document.domain)>
4) Save the page and open it on the front end: the payload closes the href attribute,
   and the onerror handler executes alert(document.domain) in the browser of every
   visitor of the page.

The payload closes the href attribute and the link tag with ">, the empty <script></script> shows that arbitrary markup can be planted, and <img src=x onerror=alert(document.domain)> fires as soon as the browser fails to load the non-existent image — no interaction beyond opening the page is needed. In a real attack the harmless alert(document.domain) would be replaced with code that steals the administrator’s session cookie or silently creates a rogue administrator, and it would fire for every visitor, including every administrator who opens or edits the page in Live Composer — stored XSS on behalf of the administrator that ends in account takeover.

Recommendations for Improved Security

To mitigate CVE-2025-15708:

  • Update the plugin to the latest version — 2.1.23 sanitizes the slug settings and escapes the listing module permalinks, and 2.1.24 additionally escapes the link, text, icon, target and inline SVG fields of the Social, Staff, Staff Social, Icon and Button modules with esc_url() / esc_html(), which closes the vector used in the PoC.
  • Sanitize module settings on input and escape them on output with esc_url() for URLs and esc_attr() for attributes — a URL field is a URL, never free-form HTML.
  • Do not treat the administrator role as a trust boundary for HTML, especially on Multisite and with DISALLOW_UNFILTERED_HTML.
  • Review which roles can open pages in the Live Composer editor, and protect those accounts with 2FA.
  • Implement a strong Content Security Policy (CSP) to block inline JavaScript execution.
  • Deploy a Web Application Firewall to filter XSS payloads before they reach the application.

To prevent this type of attack, follow our methods of XSS prevention.

By addressing Stored XSS vulnerabilities like CVE-2025-15708 early, WordPress site owners and plugin developers can keep public pages — not only admin screens — free of injected scripts. Stay vigilant, stay secure.

#WordPressSecurity #StoredXSS #LiveComposer #WebsiteSafety #StayProtected

Use CleanTalk solutions to improve the security of your website

Krugov Artyom

CVE-2025-15708 – Live Composer – Admin+ Stored XSS – POC

Artyom Krugov

Cybersecurity Specialist with 4 years of hands-on experience in web application and WordPress security. Holder of the OSCP+ certification and author of 80+ publicly disclosed CVEs affecting WordPress plugins and themes. Specialized in vulnerability research, penetration testing, website incident response, malware removal, and security hardening of production environments. Experienced in identifying and validating high-impact vulnerabilities in WordPress plugins, themes, and custom web applications, as well as providing practical remediation guidance to improve overall security posture. Strong background in web application security, source code review, vulnerability assessment, exploit validation, and post-compromise recovery of infected websites.

See all posts by krugov-artyom

Leave a Reply

Your email address will not be published. Required fields are marked *