Wordpress InfiniteWP Client插件认证绕过漏洞
字数 1172 2025-08-26 22:11:56

WordPress InfiniteWP Client插件认证绕过漏洞分析

漏洞概述

InfiniteWP是一款WordPress站点管理插件,通过在server端安装admin panel插件来管理安装了client插件的客户端站点。该插件存在一个严重的认证绕过漏洞(CVSS评分9.8),允许攻击者在满足以下条件时直接获取管理员权限:

  1. 知道目标站点的管理员用户名
  2. 目标站点安装的InfiniteWP Client插件版本低于1.9.4.5

漏洞影响

成功利用此漏洞的攻击者可以绕过认证直接登录WordPress后台,获得相当于管理员级别的权限。

漏洞分析

漏洞位置

漏洞存在于插件主文件wp-content/plugins/iwp-client/init.php中的iwp_mmb_parse_request()iwp_mmb_set_request()函数。

认证流程缺陷

  1. 认证绕过逻辑

    • iwp_mmb_parse_request()函数中,当$action值为add_sitereadd_site时,函数会直接返回,跳过后续的authenticate_message()认证检查
    • 开发者本意是这两个操作通过SSL签名进行校验,因此不需要额外认证
    • 但实际实现中,程序会继续执行到iwp_mmb_set_request()函数
  2. 不安全的cookie设置

    • iwp_mmb_set_request()函数检查是否存在username参数且用户未登录
    • 如果满足条件,直接根据提供的用户名设置认证cookie,没有任何密码验证
    • 关键代码如下:
      if(isset($params['username']) && !is_user_logged_in()){
          $user = get_user_by('login', $params['username']);
          // 设置认证cookie
          if($isHTTPS){
              wp_set_auth_cookie($user->ID);
          }else{
              wp_set_auth_cookie($user->ID, false, false);
              wp_set_auth_cookie($user->ID, false, true);
          }
      }
      

漏洞利用条件

攻击者需要:

  1. 知道目标站点的管理员用户名
  2. 构造一个包含username参数和特定action参数(add_sitereadd_site)的请求

补丁分析

补丁在设置cookie前增加了对$action的硬编码检查,确保只有在特定操作时才允许设置cookie。

修复建议

  1. 立即升级InfiniteWP Client插件到1.9.4.5或更高版本
  2. 如果无法立即升级,可临时禁用该插件

漏洞利用示例(仅供研究使用)

POST /wp-admin/admin-ajax.php HTTP/1.1
Host: vulnerable-site.com
Content-Type: application/x-www-form-urlencoded

action=add_site&username=admin

成功利用后,响应中会包含管理员会话cookie,可直接用于访问后台。

总结

此漏洞源于认证逻辑的分裂:

  1. 开发者认为add_sitereadd_site操作已经通过SSL签名验证,不需要额外认证
  2. 但实际实现中,程序会继续执行到cookie设置部分,而该部分仅检查用户名就设置认证cookie
  3. 模块化设计导致两部分安全逻辑不一致,形成认证绕过

参考

WordPress InfiniteWP Client插件认证绕过漏洞分析 漏洞概述 InfiniteWP是一款WordPress站点管理插件,通过在server端安装admin panel插件来管理安装了client插件的客户端站点。该插件存在一个严重的认证绕过漏洞(CVSS评分9.8),允许攻击者在满足以下条件时直接获取管理员权限: 知道目标站点的管理员用户名 目标站点安装的InfiniteWP Client插件版本低于1.9.4.5 漏洞影响 成功利用此漏洞的攻击者可以绕过认证直接登录WordPress后台,获得相当于管理员级别的权限。 漏洞分析 漏洞位置 漏洞存在于插件主文件 wp-content/plugins/iwp-client/init.php 中的 iwp_mmb_parse_request() 和 iwp_mmb_set_request() 函数。 认证流程缺陷 认证绕过逻辑 : 在 iwp_mmb_parse_request() 函数中,当 $action 值为 add_site 或 readd_site 时,函数会直接返回,跳过后续的 authenticate_message() 认证检查 开发者本意是这两个操作通过SSL签名进行校验,因此不需要额外认证 但实际实现中,程序会继续执行到 iwp_mmb_set_request() 函数 不安全的cookie设置 : iwp_mmb_set_request() 函数检查是否存在 username 参数且用户未登录 如果满足条件,直接根据提供的用户名设置认证cookie,没有任何密码验证 关键代码如下: 漏洞利用条件 攻击者需要: 知道目标站点的管理员用户名 构造一个包含 username 参数和特定 action 参数( add_site 或 readd_site )的请求 补丁分析 补丁在设置cookie前增加了对 $action 的硬编码检查,确保只有在特定操作时才允许设置cookie。 修复建议 立即升级InfiniteWP Client插件到1.9.4.5或更高版本 如果无法立即升级,可临时禁用该插件 漏洞利用示例(仅供研究使用) 成功利用后,响应中会包含管理员会话cookie,可直接用于访问后台。 总结 此漏洞源于认证逻辑的分裂: 开发者认为 add_site 和 readd_site 操作已经通过SSL签名验证,不需要额外认证 但实际实现中,程序会继续执行到cookie设置部分,而该部分仅检查用户名就设置认证cookie 模块化设计导致两部分安全逻辑不一致,形成认证绕过 参考 Critical Authentication Bypass Vulnerability in InfiniteWP Client Plugin