WordPress插件认证绕过与权限提升漏洞实例分析
一、前言 管理员权限用户能够执行更多敏感操作,也更容易导致RCE(远程代码执行)。在 WordPress 中,管理员拥有安装任意插件的权限,因此用户如果拥有管理员权限,几乎等同于获得RCE。 下面从 diff 漏洞修复的角度,介绍 WordPress 插件中出现的 认证绕过和权限提升漏洞是如何导致获取管理员权限的。其中大部分漏洞与 WordPress 插件相关,也有小部分来自其他PHP项目。 二、认证绕过 2.1 CVE-2024-6695 USER PROFILE BUILDER <= 3.11.8 2.1.1 漏洞成因 漏洞成因是自动登录和用户注册流程对用户邮箱的字符串处理不一致。用户注册时未清除邮箱字符串中的空格字符,而自动登录流程会清除空格。攻击者可通过注册带空格的仿冒管理员邮箱(如admin@example.com )来利用此漏洞。利用前提是需要知道管理员邮箱地址且系统启用了自动登录功能。 function wppb_check_email_value( $message, $field, $request_data, $form_location ){ ... $user_signup = $wpdb->get_results($wpdb->prepare("SELECT * FROM " . $wpdb->base_prefix . "signups WHERE user_email = %s AND active=0", $request_data['email'])); ... $users = $wpdb->get_results($wpdb->prepare("SELECT * FROM {$wpdb->users} WHERE user_email = %s", $request_data['email'])); 注册邮箱的检查逻辑是通过数据库查询判断用户输入的邮箱是否已存在,若不存在则允许注册。 在 wppb_check_email_value 函数中,程序未对注册邮箱进行规范化处理就直接执行数据库查询。 例如,若管理员邮箱是 admin@test.com,攻击者可尝试注册 admin@test.com (尾部加一个空格)。由于程序未清理空格,数据库查询会将其视为新邮箱,从而绕过检查并成功注册。 function wppb_log_in_user( $redirect, $redirect_old ) { if( is_user_logged_in() ) { return; } ....