MEDIUM 6.4

CVE-2026-15299: Stored XSS in Animation Addons for Elementor Weather Widget

A stored cross-site scripting (XSS) vulnerability exists in the Animation Addons for Elementor WordPress plugin affecting all versions through 2.6.3. An authenticated user with Contributor-level permissions or higher can inject malicious scripts through the Weather widget's configuration settings. These scripts are saved to the database and executed in the browsers of all site visitors who view the affected page, potentially compromising user sessions, stealing credentials, or defacing content. The vulnerability requires the Weather widget to be properly configured with an OpenWeatherMap API key to trigger the vulnerable code path.

Source data · NVD / CISA · public domain

CVSS
3.1 · 6.4 MEDIUM · CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:N
Weaknesses (CWE)
CWE-79
Affected products
0 configuration(s)
Published / Modified
2026-07-10 / 2026-07-10

NVD description (verbatim)

The Animation Addons for Elementor plugin for WordPress is vulnerable to Stored Cross-Site Scripting via the 'weather_style' and 'move_direction' parameters of the Weather widget in all versions up to, and including, 2.6.3. This is due to insufficient output escaping in the Weather widget's render() function at widgets/weather.php:1246, where both settings values are placed into an HTML class attribute without esc_attr(). Elementor does not server-side validate widget SELECT control values against allowed options on save, so an authenticated attacker with Contributor-level access or above can submit a crafted save_builder AJAX request storing arbitrary values in the _elementor_data post meta. The stored payload renders unescaped on every frontend visit to the affected page (the Weather widget requires an OpenWeatherMap API key to reach the vulnerable output, which is the normal operational state for sites using this widget).

4 reference(s) · View on NVD →

SEC.co analysis · AI-assisted, reviewed against source

Technical summary

The vulnerability stems from insufficient output escaping in the Weather widget's render() function (widgets/weather.php:1246). The plugin fails to apply esc_attr() when inserting the 'weather_style' and 'move_direction' parameter values into HTML class attributes. Elementor's architecture does not validate SELECT control values server-side against their allowed option sets during the save_builder AJAX request, allowing an authenticated attacker to submit arbitrary values in the _elementor_data post meta. When the widget renders on the frontend, these unescaped values are directly output into the DOM, enabling JavaScript execution. The vulnerability is classified as CWE-79 (Improper Neutralization of Input During Web Page Generation).

Business impact

Organizations relying on this plugin for animated weather displays face several risks: unauthorized modification of page content and UI, potential credential theft from site visitors through session hijacking, malware injection, and damage to brand trust if malicious content appears on customer-facing pages. The attack requires legitimate site access (Contributor role or above), making it a threat primarily from compromised accounts, disgruntled insiders, or supply chain incidents. The impact scales with the number of site visitors exposed to the stored payload.

Affected systems

Animation Addons for Elementor WordPress plugin versions 2.6.3 and earlier. The vulnerability is only triggered when the Weather widget is active on a page and configured with a valid OpenWeatherMap API key. WordPress installations using this plugin with Contributor or Author accounts are most at risk. The plugin's presence in the WordPress ecosystem suggests exposure across a broad range of small-to-medium business and agency websites.

Exploitability

Exploitation requires valid WordPress authentication at Contributor level or above—a moderately high privilege threshold that excludes unauthenticated users and site subscribers. However, the attack surface is wider than it appears: compromised plugin accounts, employee negligence, or weak credential management can grant attackers the necessary access. Once stored, the payload executes automatically on every frontend pageload without additional user interaction, making persistence trivial. CVSS 3.1 score of 6.4 (MEDIUM) reflects the authentication requirement offset by network accessibility, low attack complexity, and cross-site impact scope.

Remediation

Upgrade Animation Addons for Elementor to a patched version beyond 2.6.3 (verify current release version against the vendor advisory). The fix should include esc_attr() calls on the vulnerable parameters and ideally server-side validation of widget settings against whitelisted option values. Until patching is complete, restrict Contributor and Author role assignments to trusted users only, audit existing user accounts with these roles, and consider disabling the Weather widget if it is not actively used. Monitor _elementor_data post meta for anomalous values.

Patch guidance

Check the plugin's official WordPress.org repository or vendor site for the latest available version. Apply the update immediately in a staging environment to verify compatibility with your theme and other plugins. Given the authentication requirement, this can be prioritized slightly below zero-day remote code execution vulnerabilities, but should still be treated as urgent due to the ease of persistence once an account is compromised. Enable automatic plugin updates if your operational security posture permits.

Detection guidance

Search WordPress post meta for instances of the Weather widget containing suspicious or unexpected values in the weather_style and move_direction fields within _elementor_data serialized data. Monitor WordPress user audit logs for Contributor and Author account creation, role elevation, or suspicious save_builder AJAX requests from unexpected IP addresses or at unusual times. Inspect frontend page source HTML and browser console for unexpected script execution on pages containing the Weather widget. Web application firewalls can flag unusual class attribute values if rules are tuned appropriately, though escaping bypass techniques may evade simple patterns.

Why prioritize this

Although the CVSS score of 6.4 is classified as MEDIUM severity, this vulnerability merits elevated priority for environments where Contributor accounts are actively used or where user account compromise is a plausible threat vector. The stored nature of the XSS ensures high impact persistence and broad exposure. Organizations with lax access controls, shared hosting, or high-turnover content teams should treat this as HIGH priority. The lack of zero-click exploitation limits urgency for tightly governed enterprise environments, but small-to-medium businesses running WordPress should patch quickly.

Risk score, explained

The CVSS 3.1 score of 6.4 reflects: Network-based attack vector (AV:N), low attack complexity (AC:L), requirement for low privilege authentication (PR:L), no user interaction required (UI:N), and changed scope affecting resources beyond the vulnerable component (S:C). Confidentiality and Integrity impact are LOW (C:L, I:L) and Availability is NONE (A:N), as the attack modifies displayed content and can steal session cookies but does not directly degrade service or destroy data. The score appropriately penalizes the authentication requirement but does not fully capture the reputational and operational risk in practice for sites with weak access controls.

Frequently asked questions

Do we need an OpenWeatherMap API key for this vulnerability to be exploitable?

The vulnerability code path itself does not require an API key to execute; the XSS occurs during widget rendering. However, the Weather widget typically only renders on pages where an API key is configured, so sites using the widget in its normal operational state are at risk. If the widget is installed but unused (no API key set), the affected code may not be invoked on frontend pageloads, lowering practical exposure.

Can a Site Editor (non-Contributor) role exploit this vulnerability?

No. The vulnerability requires Contributor-level access or above to submit crafted save_builder AJAX requests that modify widget settings. Subscribers and Editors with lower privilege configurations cannot directly exploit this. However, any role elevation or account compromise that grants Contributor access enables exploitation.

How long does a stored XSS payload persist after injection?

Once injected into the _elementor_data post meta, the payload persists indefinitely until manually removed or the page is updated by an administrator. Every site visitor who loads the affected page will execute the malicious script, making rapid detection and remediation critical.

Will a Web Application Firewall (WAF) prevent this attack?

A WAF cannot prevent initial payload storage because the attack occurs via authenticated AJAX requests to the site's own backend. WAFs can potentially detect unusual class attribute values in outbound responses if rules are configured, but may miss obfuscated or encoded payloads. WAFs are not a substitute for patching.

This analysis is based on the CVE description and publicly disclosed technical details as of the publication date. Actual impact and remediation steps may vary depending on your specific WordPress configuration, plugin versions, theme interactions, and access control policies. Verify all patch version numbers against the official vendor advisory before deploying updates. This analysis does not constitute legal or compliance advice. Organizations should perform their own risk assessment and testing in a controlled environment before applying patches to production systems. SEC.co makes no warranty regarding the completeness or accuracy of this vulnerability intelligence and recommends consulting official vendor advisories and security bulletins for the most current guidance. Source: NVD (public-domain), retrieved 2026-08-17. Analysis generated by SEC.co (claude-haiku-4-5).