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

Joomla 在海外使用较多,是一套使用 PHP 和 MySQL 开发的开源、跨平台的内容管理系统(CMS)。Joomla 4.0.0 至 4.2.7 版本中的 ApiRouter.php#parseApiRoute 在处理用户的 Get 请求时为对请求参数有效过滤,导致攻击者可向 Joomla 服务端点发送包含 public=true 参数的请求

漏洞概要

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) 进行未授权访问。

  • 修复方案:在4.2.8版本中对漏洞进行了修复,建议用户将Joomla升级至 4.2.8 及以上版本
  • 漏洞链接: https://www.oscs1024.com/hd/MPS-2023-1918

以下内容来自公众号《安全日记》 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
CVE-2023-23752 Joomla未授权访问漏洞分析

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

所以合并后的public变成了true

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

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

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

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

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

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

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

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

墨菲安全是一家为您提供专业的软件供应链安全管理的科技公司,核心团队来自百度、华为、乌云等企业,公司为客户提供完整的软件供应链安全管理平台,围绕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

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

发布者:墨菲安全,转发请注明出处:https://www.murphysec.com/blog/vulnerability-analysis/4807.html

(0)
上一篇 2023年2月23日 10:46
下一篇 2023年2月24日 16:02

相关推荐

  • Onedev v7.4.14 路径遍历漏洞分析(CVE-2022-38301)

    漏洞简述 OneDev 是开源的一体化轻量DevOps平台,在OneDev 7.4.14及以前版本中存在路径遍历漏洞,具有项目管理权限的攻击者可以将恶意 jar 文件上传到 lib 目录,覆盖原有jar包,攻击者可利用此漏洞在服务器中写入任意文件或远程执行恶意代码。 漏洞分析 问题代码分析 项目管理员可以在 OneDev 的`build`模块对自己的一个项目…

    2023年1月9日
  • Apache ShardingSphere-Proxy <5.3.0 身份认证绕过(CVE-2022-45347)

    漏洞简介 2022年12月22日,Apache 官方公告发布 ShardingSphere-Proxy 5.3.0 之前版本存在身份绕过漏洞(CVE-2022-45347)。当 ShardingSphere-Proxy 使用 MySQL 作为后端数据库时,由于 ShardingSphere-Proxy 在客户端认证失败后没有完全清理数据库会话信息,攻击者可利…

    2023年1月9日
  • 二月最新漏洞列表

    Apache IoTDB-Workbench <0.13.3 存在身份验证绕过漏洞(CVE-2023-24829),Apache Linkis <1.3.1 任意客户端文件读取漏洞(CVE-2022-44644),Apache Linkis <1.3.1 存在反序列化漏洞(CVE-2022-44645),Apache InLong 存在任意文件读取漏洞(CVE-2023-24977)

    2023年2月6日
  • “Dirty Pipe”的故事-Linux 内核提权漏洞 (CVE-2022-0847)

    漏洞简述 3月7日,开发者 Max Kellermann 在他的博客(https://dirtypipe.cm4all.com/)中披露了一个能导致 Linux 权限提升的漏洞,编号为 CVE-2022-0847,他称之为 “The Dirty Pipe Vulnerability” (“脏管道”漏洞)。 Linux 5.10版本前的一次 commit 中,…

    2023年1月4日
  • Apache Kafka Connect 模块JNDI注入(CVE-2023-25194)

    漏洞概述 Apache Kafka Connect服务在2.3.0 至 3.3.2 版本中,由于连接时支持使用基于JNDI认证的SASL JAAS配置,导致配置在被攻击者可控的情况下,可能通过JNDI注入执行任意代码。此漏洞不影响 Kafka server(broker),Kafka Connect服务通常用于在云平台中提供Kafka数据迁移、数据同步的管道…

    2023年2月13日

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-180-9568

邮件:hi@murphysec.com

工作时间:周一至周五,10:00-19:00,节假日休息

关注公众号

20230105-100741