CVE-2026-9756CVE-2026-9756是WordPress GenerateBlocks插件中存在的一个存储型跨站脚本(Stored XSS)漏洞,CVSS评分为6.4,属于中危级别。该漏洞影响GenerateBlocks插件所有版本,最高至2.2.1版本(含)。
GenerateBlocks是一款广受欢迎的WordPress页面构建插件,提供了Headline(标题)等多种区块组件,允许用户通过动态链接属性(Dynamic Link Attribute)配置区块的链接行为。然而,该插件在处理Headline区块的'linkMetaFieldType'动态链接属性时,存在输入净化(input sanitization)和输出转义(output escaping)不足的问题。
该漏洞使得具有Contributor(投稿者)级别及以上权限的认证攻击者能够向页面中注入任意Web脚本。当其他用户(包括管理员)访问被注入的页面时,这些恶意脚本将在其浏览器中执行。漏洞的利用方式较为巧妙:攻击者可以将JavaScript负载存储在自身用户配置文件的描述字段中(该字段位于get_safe_user_meta_keys()的白名单内),然后通过linkMetaFieldType属性在链接前添加'javascript:'协议前缀,从而创建一个完全由攻击者控制的href属性。当任何用户点击渲染后的标题链接时,恶意JavaScript代码将被执行。
该漏洞由Wordfence安全团队的安全研究员发现并报告,披露日期为2026年7月3日。由于攻击需要认证权限且用户交互条件为无需交互(UI:N),但具有范围变更(S:C),因此被评定为中危级别。
该漏洞的根本原因在于GenerateBlocks插件的Headline区块在处理动态链接属性(Dynamic Link Attribute)时,未对用户提供的元字段类型(meta field type)值进行充分的输入验证和输出转义。
具体技术细节如下:
1. **白名单绕过机制**:WordPress核心函数get_safe_user_meta_keys()定义了一组安全的用户元数据键,允许Contributor级别的用户在自身配置文件中存储某些类型的元数据(如描述字段)。攻击者利用这一白名单机制,将恶意的JavaScript负载存储到用户描述字段中。
2. **动态链接属性注入**:在Headline区块中,linkMetaFieldType属性用于指定动态链接的元字段类型。插件从用户元数据中读取该值后,直接拼接到链接的URL中,未对协议前缀进行过滤。攻击者通过设置linkMetaFieldType为'javascript:[payload]',即可将恶意JavaScript代码注入到渲染的<a>标签的href属性中。
3. **关键代码位置**:漏洞涉及以下关键代码文件:
- includes/blocks/class-headline.php(第809行):Headline区块的链接渲染逻辑
- includes/class-dynamic-content.php(第816行):动态内容处理逻辑
- includes/class-dynamic-tag-security.php(第582行):动态标签安全检查逻辑
4. **执行条件**:当任何用户(包括管理员)点击被注入的标题链接时,浏览器将执行javascript:协议后的JavaScript代码。由于UI:N(无需用户交互),但实际触发仍需点击行为,因此攻击者可结合社会工程学手段诱导管理员点击。
5. **权限要求**:攻击需要Contributor级别及以上权限(PR:L),这意味着攻击者必须先拥有一个有效的WordPress账号。但一旦获得低权限账号,即可利用该漏洞提升权限或窃取敏感信息。