漏洞介绍
WordPress 的 Simple User Registration 插件在所有版本(包括 6.3 及之前版本)中存在权限提升(Privilege Escalation)漏洞。该漏洞的原因是:插件在注册过程中对可提交的用户元数据(user meta values)缺乏足够的限制。攻击者可利用这一缺陷,在未经过身份验证的情况下注册账户并获得管理员权限。

漏洞版本
| 插件 | 版本 |
|---|---|
| wp-registration | <= 6.3 |
部署漏洞环境
在“CVE-2025-4334复现环境”文件夹内,执行一条命令即可部署环境
docker-compose up -d
激活插件后,访问http://127.0.0.1/register/即可查看到插件的注册界面

漏洞利用
执行Python脚本进行文件上传漏洞利用
python CVE-2025-4334.py -u http://127.0.0.1 --form http://127.0.0.1/register/

利用创建的管理员用户名和密码登录后台

漏洞分析
我们首先使用正常注册点来注册test用户

注册成功发现是订阅者的只是低权限而非管理员权限

接下来开始漏洞分析,首先介绍wordpress里的一个特性
以wp_ajax和wp_ajax_nopriv前缀注册的钩子,可以通过如下链接访问。区别是wp_ajax需要登录的用户,而wp_ajax_nopriv不需要登录校验
http://[WordPress路径]/wp-admin/admin-ajax.php?action=xxx
在wp-registration插件中,我们发现了wp_ajax_nopriv_wpr_submit_form钩子调用了wpr_hooks_submit_form函数

于是来跟一下wpr_hooks_submit_form函数,首先是一个wpr_nonce的校验,这个wordpress里防止 CSRF 攻击的一个随机值。

这个在表格界面的前端就能够提取到,到时候脚本里创一个Session就能绕过。(后面有个表格id也是同理)

继续跟下去发现$_POST['wpr']存储到了$fields参数中

接着是一堆不重要的校验,包括用户名和邮箱名是否重复。然后就到了重要的create_user函数,之前也没有出现对用户角色的校验。

继续跟一下create_user函数,也是没有任何对角色的校验就到了wp_insert_user函数。此时$wp_fields参数就是之前的$_POST['wpr'][wp_field]

跟到wp_insert_user函数里面,发现了插入数据库的insert函数,但是该函数的参数不包括“role”,也就是某个用户是否为管理员用户不是在通过这个函数确定的,所以我们继续往下看。

再往下面有个set_role函数,我进去看了下,里面主要功能就是把该用户的角色设置为你传入的$userdata['role']。

到这里我们可以总结一下:
个性:我们只需要在原有表格POST参数的基础上加一个role参数设置为administrator即可添加添加管理员用户。
共性:
wp_insert_user函数是wordpress本身的函数,其内部没有校验角色的过滤,所以如果在进入这个函数前如果role参数仍然设置为administrator,基本就能造成漏洞。
已在FreeBuf发表 0 篇文章
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf
客服小蜜蜂(微信:freebee1024)



