# Lazy Load for Videos <= 2.18.11 - Authenticated (Contributor+) Stored Cross-Site Scripting via oEmbed Video Embeds

- **ID:** WPSEC-2026-1664
- **Plugin:** Lazy Load for Videos (`lazy-load-for-videos`), https://wordpress.org/plugins/lazy-load-for-videos/
- **Affected versions:** all versions before 2.18.12
- **Fixed in:** 2.18.12 (Update to 2.18.12 or later.)
- **Severity:** Medium 6.4 (CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:N)
- **Weakness:** CWE-79
- **Usage among sites WPSec scans:** plugin Low, affected versions Low (as of 2026-10-26)
- **Attack surface analysis:** https://attacksurface.wpsec.com/plugin/lazy-load-for-videos
- **Fix released:** 2026-10-25
- **Published:** 2026-10-26
- **URL:** https://wpsec.com/vuln/WPSEC-2026-1664/

## Description

The Lazy Load for Videos plugin for WordPress is vulnerable to Stored Cross-Site Scripting via oEmbed video embeds in all versions up to, and including, 2.18.11. This is due to insufficient input validation and output escaping in the lazyload_replace_video() function, which rebuilds oEmbed results into lazy-load preview markup: the video ID, URI and thumbnail URL from the oEmbed response are placed into HTML attributes without escaping, the embed URL is printed as link text without escaping, and the provider name is trusted without checking that the URL actually points to YouTube or Vimeo. This makes it possible for authenticated attackers, with contributor-level access and above, to embed a URL whose oEmbed endpoint returns crafted data and so inject arbitrary web scripts in pages that will execute whenever a user accesses an injected page.

## References

- https://wpsec.com/vuln/WPSEC-2026-1664/
- https://plugins.svn.wordpress.org/lazy-load-for-videos/tags/2.18.12/
- https://wordpress.org/plugins/lazy-load-for-videos/

Source: WPSec, https://wpsec.com/vuln/WPSEC-2026-1664/

License: CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/). Free to use, share and adapt, also commercially, if you credit WPSec and link to this advisory.
