CVE-2026-15446: EWWW Image Optimizer <= 8.7.3 - Authenticated (Contributor+) Stored Cross-Site Scripting via 'data-script' Lazy Load Attribute in Post Content
The EWWW Image Optimizer plugin for WordPress is vulnerable to Stored Cross-Site Scripting via 'data-script' Lazy Load Attribute in Post Content in all versions up to, and including, 8.7.3 due to insufficient input sanitization and output escaping. This makes it possible for authenticated attackers, with contributor-level access and above, to inject arbitrary web scripts in pages that will execute whenever a user accesses an injected page. The exploit is achieved by embedding a crafted img element with class='lazyload' and a data-script attribute pointing to an attacker-controlled URL in post content, which the plugin's bundled lazysizes ls.unveilhooks addon then uses to dynamically create and insert a script element into the DOM at page view time.
Affected Software
Event History
Frequently Asked Questions
Who can exploit this issue and who is affected when it is triggered?
An authenticated WordPress user with Contributor-level access or higher can inject the malicious post content. The injected script executes in the browser of any user who accesses the affected page.
What content is required to exploit the vulnerability?
The attacker must be able to place a crafted img element in post content with the lazyload class and a data-script attribute that points to an attacker-controlled URL. The bundled lazysizes ls.unveilhooks addon dynamically inserts that URL as a script when the page is viewed.
Are sites using the affected plugin exposed by default?
The provided data identifies the issue in plugin versions through 8.7.3 and attributes exploitation to the plugin's bundled lazysizes ls.unveilhooks addon. It does not state whether a particular WordPress or plugin configuration is required beyond allowing a Contributor-or-higher user to submit the crafted post content.