【WordPress专题01】CVE-2025-4334漏洞代码审计
主站 分类 云安全 AI安全 开发安全 2025-11-20 07:51:34 Author: www.freebuf.com(查看原文) 阅读量:11 收藏

freeBuf

主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

漏洞介绍

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

1763624226_691ec522a06a95759f2ab.png!small?1763624232706

漏洞版本

插件版本
wp-registration<= 6.3

部署漏洞环境

在“CVE-2025-4334复现环境”文件夹内,执行一条命令即可部署环境

docker-compose up -d

激活插件后,访问http://127.0.0.1/register/即可查看到插件的注册界面

1763624226_691ec522bc8f54dbf3e44.png!small?1763624232706

漏洞利用

执行Python脚本进行文件上传漏洞利用

python CVE-2025-4334.py -u http://127.0.0.1  --form http://127.0.0.1/register/

1763624265_691ec54987462d1549d31.png!small?1763624271153

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

1763624272_691ec55023aab380c3912.png!small?1763624277046

漏洞分析

我们首先使用正常注册点来注册test用户

1763624283_691ec55bea7121829ed36.png!small?1763624287713

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

1763624289_691ec56142d6c756028ac.png!small?1763624293229

接下来开始漏洞分析,首先介绍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函数

1763624298_691ec56a0508fc7131980.png!small?1763624301929

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

1763624302_691ec56ed14b2b1dcad5d.png!small?1763624306634

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

1763624309_691ec5759db99ada55ecf.png!small?1763624313607

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

1763624316_691ec57c62f1e675ec691.png!small?1763624320101

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

1763624324_691ec584056d66038a1e3.png!small?1763624327858

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

1763624329_691ec5895b60208de6756.png!small?1763624333199

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

1763624333_691ec58db6ac19979e606.png!small?1763624337724

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

1763624337_691ec591e36327a970e9c.png!small?1763624341670

到这里我们可以总结一下:

  1. 个性:我们只需要在原有表格POST参数的基础上加一个role参数设置为administrator即可添加添加管理员用户。

  2. 共性:wp_insert_user函数是wordpress本身的函数,其内部没有校验角色的过滤,所以如果在进入这个函数前如果role参数仍然设置为administrator,基本就能造成漏洞。

已在FreeBuf发表 0 篇文章

本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)


文章来源: https://www.freebuf.com/articles/vuls/458201.html
如有侵权请联系:admin#unsafe.sh