CVE-2026-9620CVE-2026-9620是WordPress WP Latest Posts插件中存在的一个存储型跨站脚本(Stored XSS)漏洞。该插件是一款用于在WordPress网站上展示最新文章列表的流行插件,活跃安装量较大。漏洞影响版本为5.0.11及以下所有版本,CVSS评分为6.4,属于中危级别。
该漏洞的核心问题在于插件在处理文章内容中的图片标签时,未能对提取出的src属性值进行充分的输出转义。具体而言,插件的field()和loop()函数使用正则表达式从post_content中提取<img>标签的原始src属性值,然后直接将未转义的值拼接重构为新的<img>元素或CSS background-image声明。这一处理过程完全绕过了WordPress核心的kses过滤机制,导致恶意脚本能够被持久化存储到数据库中。
利用该漏洞需要攻击者拥有作者级别(author-level)及以上的认证权限。攻击者可以通过在文章内容中注入精心构造的图片src属性,将任意JavaScript代码嵌入到页面中。当其他用户访问包含恶意内容的页面时,注入的脚本将在受害者浏览器中执行,可能导致会话劫持、权限提升、敏感信息窃取等严重后果。由于漏洞利用需要认证权限,且影响范围限于前端展示页面,因此整体严重性被评定为中危。
该漏洞的技术根源在于WP Latest Posts插件对文章内容中图片标签的不安全处理方式。
**漏洞原理:**
在WordPress中,正常的内容保存流程会通过kses过滤机制对HTML内容进行清理,移除或转义潜在的恶意脚本标签和属性。然而,WP Latest Posts插件的field()和loop()函数(位于inc/wplp-front.inc.php文件中,分别对应第2284行、第2326行和第2738行附近的代码逻辑)采用了以下危险的处理流程:
1. 使用正则表达式(如preg_match_all配合匹配<img>标签src属性的模式)从post_content中提取原始src属性值;
2. 直接将提取的原始值拼接到新的HTML字符串中,用于重新构建<img>元素或CSS background-image声明;
3. 由于整个过程绕过了WordPress的kses过滤,攻击者注入的恶意JavaScript代码得以原样保留。
**利用方式:**
攻击者以作者权限登录WordPress后台,创建或编辑文章,在文章正文中插入包含恶意src属性的img标签。由于src属性值最终会被拼接到HTML输出中且未经过转义,攻击者可以通过以下方式注入脚本:
- 利用onerror事件处理器或javascript:伪协议
- 在src属性中注入闭合标签后的script代码
- 利用CSS expression或behavior属性(在旧版IE中)
当普通用户或管理员访问包含该文章的页面时,恶意脚本将在其浏览器上下文中执行,可执行窃取cookie、劫持会话、发起CSRF攻击等恶意操作。