【WordPress专题03】遇到不按规范编写的插件如何进行代码审计?

admin 2025-12-14 01:40:04 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: WordPressOpalEstatePro插件1.7.5及以下版本存在权限提升漏洞CVE-2025-6934,攻击者可在注册时指定管理员角色。漏洞源于插件未按规范编写,将注册功能放在init钩子中,且on_regiser_user函数未对角色参数进行验证。文章提供了漏洞复现环境和利用脚本,并建议代码审计时重点关注set_role函数,尤其是插件作者自定义代码中的使用。 综合评分: 91 文章分类: 代码审计,漏洞分析,WEB安全,应用安全,漏洞预警


cover_image

【WordPress专题03】遇到不按规范编写的插件如何进行代码审计?

原创

a1batr0ss

天翁安全

2025年11月18日 17:31 江苏

免责声明:本公众号所发布的全部内容,包括但不限于技术文章、POC脚本、漏洞利用工具及相关测试环境,均仅限于合法的网络安全学习、研究和教学用途。所有人在使用上述内容时,应严格遵守中华人民共和国相关法律法规以及道德伦理要求。未经明确的官方书面授权,严禁将公众号内的任何内容用于未经授权的渗透测试、漏洞利用或攻击行为。 所有人仅可在自己合法拥有或管理的系统环境中进行本地漏洞复现与安全测试,或用于具有明确授权的合法渗透测试项目。所有人不得以任何形式利用公众号内提供的内容从事非法、侵权或其他不当活动。 如因违反上述规定或不当使用本公众号提供的任何内容,造成的一切法律责任、经济损失、纠纷及其他任何形式的不利后果,均由相关成员自行承担,与本公众号无任何关联。

不错过最新的漏洞POC

为保证您可以在第一时间接收到本公众号分享的漏洞复现及POC信息,建议您在公众号“天翁安全”主页界面将“天翁安全”设为星标

漏洞介绍

Opal Estate Pro – Property Management and Submission 插件(用于 FullHouse – Real Estate Responsive WordPress Theme 主题)在所有版本(截至并包含 1.7.5)中存在权限提升漏洞。该漏洞源于 on_regiser_user 函数在用户注册过程中缺乏角色限制,导致未对注册用户的权限角色进行有效控制。攻击者无需经过身份验证即可在注册时任意指定角色,包括 Administrator(管理员) 等高权限角色,从而实现权限提升。

漏洞版本

| 插件 | 版本 | | — | — | | opal-estate-pro | <= 1.7.5 |

部署漏洞环境

“CVE-2025-6934复现环境” 详见文末

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

docker-compose up -d

激活插件后,访问 http://127.0.0.1/my-account/#o-register-form 即可看到注册界面。

漏洞利用

执行漏洞POC创建一个角色为管理员权限的a1batr0ss用户

“CVE-2025-6934.py”漏洞利用脚本 详见文末

python CVE-2025-6934.py -u http://127.0.0.1 -nu a1batr0ss -mail [email protected] -password 123456

脚本执行完成后,可以看到成功创建了a1batr0ss的管理员用户。

漏洞分析

首先回顾一个特性,详情参考【WordPress专题01】前台管理员账户创建漏洞分析(CVE-2025-4334)

按照以上规则,当POC使用到参数action=opalestate_register_form且不需要后台用户权限时,我们需要全局搜索wp_ajax_nopriv_opalestate_register_form函数,但这次全局搜索时却也搜索不到相关函数,就像【WordPress专题02】CVE-2025-2563漏洞分析中的那样。

我们可以试着利用【WordPress专题02】CVE-2025-2563漏洞分析中总结的方法:

我们全局搜索wp_ajax_nopriv_,但也没有找到相关的、可能是通过数组动态给出的 add_action函数。

于是换了个思路全局搜索opalestate_register_form,搜索到了wp_ajax_opalestate_register_form钩子,但不可能是利用的这个函数,因为该漏洞利用不需要“用户已登录”这个前提条件。

唯一注意到的一点就是init钩子的函数和wp_ajax_opalestate_register_form钩子的函数是一致的,均为process_register

暂时没有其他太好的思路,于是先开始下断点动态跟一下,边调试边研究。首先是一些定义钩子对应函数的add_action。除了上文提到的init钩子和wp_ajax_opalestate_register_form钩子,还要以上帝视角提醒大家注意一下opalestate_after_register_successfully钩子,后续会用到。

这些钩子函数的定义之后,会执行init钩子

根据之前的定义,init钩子会触发process_register函数

跟到其中的opalestate_create_user可疑函数,这里一开始都没打算跟进去,因为$credentials参数中其实没有定义角色为管理员的参数。

但事实证明还是不能太武断。跟进去首先发现了wordpress原生函数wp_insert_user

根据【WordPress专题01】前台管理员账户创建漏洞分析(CVE-2025-4334)中的总结,如果$user_data中存在定义角色为管理员的参数,那么分析就结束了,但可惜这里没有。

于是只能继续往下跟,发现触发opalestate_after_register_successfully钩子,上文提到过,也就是触发on_regiser_user函数。

再跟到on_regiser_user函数里面,终于发现了漏洞点!函数里面没有做任何判断就直接把新建用户的角色设置为了$_POST['role']的值,如果我们当初设置的是role = administrator,这里就会把新建的用户设置为管理员。

至此,漏洞分析全部结束,开始吐槽。不知道大家有没有发现一点,wp_ajax_opalestate_register_form钩子全程没有用到,不知道存在的意义是什么。并且也没有按照插件编写规范定义wp_ajax_nopriv_opalestate_register_form钩子,而是直接把相关的操作写到了init钩子中,存在很大的安全隐患(也增加了我代码审计的难度)。

还是惯例总结一下:

  1. 代码审计挖WordPress管理员创建漏洞,可以着重关注一下set_role函数,特别是插件作者自己编写的代码中包含这个函数时,可以重点关注一下。
  2. 插件毕竟是全球各地的人编写的,也不是所有人都会按照规范编写的。虽然会给代码审计带来一定麻烦,但也有可能造成更多的安全隐患。

知识星球

“CVE-2025-6934.py”漏洞利用脚本、CVE-2025-6934复现环境、CVE-2025-6934详细漏洞分析现已全部发布至知识星球,大家可在知识星球内获取,自行搭建环境、学习复现。

星球不定期更新市面上最新的热点漏洞及复现环境,欢迎加入交流和学习

亮点一、市面热点漏洞详细分析,与deepseek本地部署息息相关的:Ollama任意文件读取漏洞(CVE-2024-37032)详细分析

亮点二、近日最新披露的明星漏洞POC:【附POC】极易利用的Windows11提权漏洞复现(CVE-2025-60710)

亮点三、框架漏洞专题-若依:

亮点四、实战渗透测试技巧分享&讨论:记一次利用测试站打到正式站的渗透测试

实战攻防演练技巧:记某次攻防演练中捕捉到的命令执行0day

亮点五、一些比较新奇有趣的漏洞分享:Windows拖拽图标而触发的漏洞

亮点六、国外最新技术文章分享:只需一封邮件,AI Agent就能悄悄偷走你Google Drive里的文件

知识星球加入方式如下,欢迎师傅们加入进行学习和讨论!

星球价格会随着成员数量的增加而持续增加


评论:0   参与:  3