CVE-2023-23752 Joomla未授权访问漏洞分析

漏洞概要

Joomla 在海外使用较多,是一套使用 PHP 和 MySQL 开发的开源、跨平台的内容管理系统(CMS)。
Joomla 4.0.0 至 4.2.7 版本中的 ApiRouter.php#parseApiRoute 在处理用户的 Get 请求时未对请求参数有效过滤,导致攻击者可向 Joomla 服务端点发送包含 public=true 参数的请求(如:/api/index.php/v1/config/application?public=true&key=value) 进行未授权访问。

以下内容来自公众号《安全日记》 Erikten 对该漏洞的分析:

0x00 环境搭建

直接去 Github 上下载即可

 https://github.com/joomla/joomla-cms/releases/tag/4.2.8

0x01 漏洞分析

这个漏洞的本质就是一个变量覆盖导致的越权,我们可以去diff一下,看看官方是怎么修复这个变量覆盖漏洞的

`https://github.com/joomla/joomla-cms/commit/5897df8ee39056fbd37624eeeeff1b81e24d84ef#diff-865580463b5f16d45dc41be7d57bf9f2ab7dd875215c2ad0471247f63b9e1b4c` 

[图片]

array_key_exists()的作用就是判断数组中是否包含指定的键名,如果存在public这个键为true,接着通过unset()直接销毁这个变量。到这里聪明的你指定知道大概是怎么事儿了,就是覆盖了public这个变量,导致的越权

我们直接在第一处红框哪里打断点,这里为了方便复现漏洞,先注释掉补丁,访问

/api/index.php/v1/config/application?public=true&key=value

可以看到$query接收了我们请求的参数
[图片]

继续往下跟,会进行一个正则匹配,看看我们的请求方式以及路径是否合法
[图片]

[图片]

我们直接强制跳转到循环体内,可以看到$vars的值是获取的路由的默认值,这里public的值是false
[图片]

这里因为$route下的routeVariables值为空,所以不会进入循环体
[图片]

接着通过$route->getController()获取当前route的controller,里边的值分别对应控制器以及其下的方法名字
[图片]

敲黑板敲黑板,接下来就是真正实现变量覆盖的地方,程序通过array_merge()来将多个变量合并到同一个数组下,可以看到此时$vars下边的public是false的
[图片]

但是经过array_merge()处理,将$query的值进行合并的时候发生了覆盖,可以看一下官方对于array_merge()的解释
[图片]

所以合并后的public变成了true
[图片]

为什么说这里改了public为true就能越权,这是因为libraries/src/Application/ApiApplication.php:304进行了权限校验,如果$route下的public存在或者public的值为false,那么就进行身份校验
[图片]

最终我们就绕过了身份校验,实现了越权
[图片]

在前面分析的时候会有一个遍历routes的操作,那些都是受影响的接口
[图片]

免费情报订阅 & 代码安全检测

墨菲安全是一家为您提供专业的软件供应链安全管理的科技公司,核心团队来自百度、华为、乌云等企业,公司为客户提供完整的软件供应链安全管理平台,围绕SBOM提供软件全生命周期的安全管理,平台能力包括软件成分分析、源安全管理、容器镜像检测、漏洞情报预警及商业软件供应链准入评估等多个产品。为客户提供从供应链资产识别管理、风险检测、安全控制、一键修复的完整控制能力。同时产品可以极低成本的和现有开发流程中的各种工具一键打通,包括 IDE、Gitlab、Bitbucket、Jenkins、Harbor、Nexus 等数十种工具无缝集成。

代码安全检测: https://www.murphysec.com/?sf=v832dc
情报订阅: https://www.oscs1024.com/cm/?sf=v832dc
漏洞库:https://www.oscs1024.com/hl/?sf=v832dc

[图片]

让每一个开发者更安全的使用开源代码!

22 声望
2 粉丝
0 条评论
推荐阅读
祝贺姜宁连任 2023 Apache 软件基金会董事
在刚刚结束的 ASF Annual Meeting 上,2023 年新任董事会成员诞生了。Apache 软件基金会通过官方 blog 向大家公布了新一任董事的选举成果。

鸣飞4阅读 9.8k评论 1

姜宁 ASF 2022 董事竞选宣言:我希望能够帮助 ASF 打破地域、文化、语言的障碍
在刚刚结束的 ASF Annual Meeting 上,2022 年新任 ASF Member 及董事会成员诞生了。Apache 软件基金会通过官方 blog 向大家公布了新一任董事的选举成果。Apache 软件基金会孵化器导师,ALC Beijing 发起人,华为...

鸣飞4阅读 12.7k

封面图
姜宁 ASF 2023 董事竞选宣言:成为开源世界的催化剂和变革者
在刚刚结束的 ASF Annual Meeting 上,2023 年新任 ASF Member 及董事会成员诞生了。Apache 软件基金会通过官方 blog 向大家公布了新一任董事的选举成果。Apache 软件基金会孵化器导师,ALC Beijing 发起人姜宁连...

波波Nadia2阅读 1.5k

两次登上了 Github trending!这个 API 管理工具厉害了!
昨天我在逛Github上的时候,无意发现我最近在用的这个Postcat ,居然登上了 Github trending !这个还是很厉害的!那种心情你们应该懂的吧,就是自己发现的工具,居然也被大家知道了,很开心!

气势凌人的柿子2阅读 447

Postcat IDEA 插件,最全的使用教程
Postcat 插件不会入侵到代码内部,无需添加任何jar包依赖,这个真的很香!下面说一说,这个插件如何使用,是时候展现真正的技术了~如何安装配置?IDEA 版本需大于 IntelliJ IDEA 2022.03在 IDEA “设置-插件-Marke...

圆圆大姐头2阅读 417

Postcat 如何生成接口文档,2 分钟学会
Postcat 是一个强大的开源、跨平台(Windows、Mac、Linux、Browsers...)的 API 开发测试工具,支持 REST、Websocket 等协议(即将支持 GraphQL、gRPC、TCP、UDP),帮助你加速完成 API 开发和测试工作。

圆圆大姐头2阅读 353

马斯克都不懂的 GraphQL,API 网关又能对其如何理解?
上个月马斯克评论 Twitter App 滥用 RPC 后,与一些 Twitter 的技术主管发生了矛盾 —— 直言马斯克不懂技术。那这个马斯克都不懂的 GraphQL 到底是什么?

API7_技术团队1阅读 1k

让每一个开发者更安全的使用开源代码!

22 声望
2 粉丝
宣传栏