IPBUF安全漏洞报告
English
CVE-2026-2300 CVSS 6.4 中危

CVE-2026-2300: WordPress BJ Lazy Load 插件存储型XSS漏洞

披露日期: 2026-05-12

漏洞信息

漏洞编号
CVE-2026-2300
漏洞类型
存储型跨站脚本
CVSS评分
6.4 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
WordPress BJ Lazy Load 插件

相关标签

XSSStored XSSWordPressBJ Lazy LoadCWE-79

漏洞概述

WordPress BJ Lazy Load插件在1.0.9及之前的所有版本中存在存储型跨站脚本(XSS)漏洞。该漏洞源于插件中的`filter_images()`函数使用了基于正则表达式的HTML处理逻辑(`preg_replace`),在替换`src`属性时未能正确处理HTML属性边界。这使得具有投稿者及以上权限的认证攻击者能够在页面中注入任意Web脚本,当其他用户访问被注入的页面时,脚本将在其浏览器中执行。

技术细节

该漏洞的核心在于`filter_images()`函数中不安全的HTML解析方式。插件试图通过正则表达式处理图片标签以实现懒加载功能,但在处理`class`属性时,没有严格验证属性值的边界。攻击者可以精心构造恶意内容,利用正则表达式的贪婪匹配或边界处理缺陷,将原本位于`class`属性值内的脚本代码“提升”为真实的DOM属性。例如,通过在`class`属性中注入特定的字符序列,可以闭合现有属性并插入恶意的`onerror`或`onload`事件处理器。一旦内容被保存到数据库,每当页面加载时,插件处理该内容就会触发恶意代码,从而导致存储型XSS。攻击者利用此漏洞可窃取管理员Cookie、会话令牌或重定向用户。

攻击链分析

STEP 1
步骤1
攻击者注册或获取一个具有Contributor(投稿者)及以上权限的WordPress账户。
STEP 2
步骤2
攻击者登录后台,编辑或新建一篇文章,在内容中插入包含恶意脚本的特定HTML标签(利用class属性边界问题)。
STEP 3
步骤3
保存文章。恶意Payload被存储在数据库中。
STEP 4
步骤4
管理员或其他用户访问包含该文章的页面。
STEP 5
步骤5
BJ Lazy Load插件的`filter_images()`函数处理页面内容,触发XSS漏洞,恶意脚本在受害者浏览器中执行。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
<!-- PoC Conceptual Example --> <!-- Attacker injects the following payload in a post content or class attribute --> <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" class="lazy" onerror="alert('XSS')"> <!-- Python Request Example --> import requests target_url = "http://example.com/wp-admin/post.php" cookies = {"wordpress_logged_in": "..."} data = { "post_title": "Test Post", "content": "<img class='lazy onerror=alert(1)' src='valid.jpg'>", "action": "editpost", "post_ID": "1" } response = requests.post(target_url, data=data, cookies=cookies) print(response.status_code)

影响范围

WordPress BJ Lazy Load <= 1.0.9

防御指南

临时缓解措施
如果无法立即升级,建议暂时禁用BJ Lazy Load插件,直到应用补丁为止。此外,可以实施内容安全策略(CSP)作为纵深防御措施,限制脚本的执行来源。

参考链接