CVE-2026-9731CVE-2026-9731是WordPress的Wp Js Detect插件中存在的一个跨站请求伪造(CSRF)漏洞。该漏洞由Wordfence安全团队的安全研究员发现,于2026年7月8日公开披露。
Wp Js Detect是一款用于检测用户浏览器是否启用了JavaScript的WordPress插件,当用户禁用JavaScript时,插件会在前端显示自定义的通知信息。该插件在所有1.0.9及以下版本中都存在CSRF漏洞,根本原因在于其plugin_settings函数缺少正确的nonce验证机制。
由于nonce验证缺失或实现不正确,未经认证的远程攻击者可以通过伪造跨站请求,利用社会工程学手段诱骗已登录的WordPress站点管理员点击恶意链接,从而在管理员不知情的情况下修改插件的配置参数。具体而言,攻击者可以更新wp_non_js_notification_text(通知文本)和wp_non_js_notification_css(通知CSS样式)两个设置项。由于这些设置的输出内容未经过适当的转义处理就直接回显到前端页面,攻击者可以注入任意HTML、CSS甚至JavaScript代码,实现存储型跨站脚本攻击(Stored XSS),对网站访问者构成安全威胁。
该漏洞的CVSS 3.1评分为4.3分,属于中危级别。虽然漏洞本身需要用户交互(管理员点击恶意链接)才能触发,但由于WordPress管理员通常具有较高权限,一旦被利用,攻击者可能利用注入的内容进行钓鱼攻击、会话劫持或进一步提权,对网站安全造成严重影响。
该漏洞的技术原理基于WordPress中常见的CSRF防护机制缺陷。WordPress使用nonce(number used once)机制来防止CSRF攻击,每个敏感操作都需要验证对应的nonce值。
在Wp Js Detect插件的plugin_settings函数中,开发者未正确实现nonce验证逻辑,导致以下问题:
1. **缺失nonce检查**:函数在处理表单提交时,没有调用check_admin_referer()或wp_verify_nonce()等函数来验证请求的合法性。
2. **缺少权限校验**:函数没有对当前用户的管理员权限进行验证,允许任何已登录用户甚至未认证用户触发设置更新。
3. **输出未转义**:更新后的设置内容(wp_non_js_notification_text和wp_non_js_notification_css)在前端显示时未使用esc_html()、esc_attr()等转义函数,导致注入的恶意代码能够直接在浏览器中执行。
攻击利用方式如下:
1. 攻击者构造一个恶意HTML页面,其中包含一个自动提交或伪装提交的表单,目标URL指向目标WordPress站点的插件设置处理端点。
2. 表单中包含恶意的JavaScript代码或HTML标签,作为wp_non_js_notification_text或wp_non_js_notification_css的参数值。
3. 攻击者通过钓鱼邮件、即时通讯等方式诱骗已登录的WordPress管理员访问该恶意页面。
4. 当管理员访问恶意页面时,浏览器会自动携带其会话Cookie向目标站点发送请求,由于缺少CSRF防护,该请求会被成功处理。
5. 恶意内容被存储到数据库中,每当有未启用JavaScript的用户访问网站时,注入的恶意代码就会执行。
相关漏洞代码位于插件的wp-js-detect.php文件的第190、192、193、250行,涉及设置处理函数和输出函数。