Joomla(CVE-2023-23752)——一个请求参数 打穿Rest API
字数 1630 2025-08-24 20:49:22
Joomla REST API 未授权访问漏洞分析 (CVE-2023-23752)
漏洞概述
Joomla CMS 的 REST API 组件存在一个未授权访问漏洞,攻击者可以通过简单的参数注入绕过身份验证机制,直接访问敏感的 API 接口。该漏洞影响 Joomla 4.0.0 至 4.2.7 版本。
受影响版本
- Joomla 4.0.0 至 4.2.7 (Rest API 4.x 正式开发版本)
漏洞分析
路由入口
Joomla 有三个主要路由入口:
/index.php- 用户访问文章/administrator/index.php- 管理员管理后台/api/index.php- REST API 接口
漏洞存在于第三个入口 /api/index.php。
漏洞原理
-
请求处理流程:
- 请求首先进入
/api/index.php - 然后加载
app.php $app对象的input成员存储所有 HTTP 请求参数
- 请求首先进入
-
关键函数调用链:
execute()→sanityCheckSystemVariables()→setupLogging()→createExtensionNameSpaceMap()→doExecute()
-
路由与鉴权机制:
doExecute()包含两个关键函数:route()- 负责路由选择和身份验证dispatch()- 负责路由分发
-
漏洞触发点:
route()函数中的public参数控制 API 是否对外开放- 默认情况下
public=false(不对外开放) - 但
parseApiRoute()函数处理路由时,route.var中的变量会被请求参数覆盖 - 通过添加
?public=true参数可以绕过身份验证
漏洞利用
发送以下请求可绕过身份验证:
http://target.com/api/index.php/v1/config/application?public=true
受影响 API 列表
该漏洞允许未授权访问以下 API 接口(部分关键接口):
-
配置信息:
/v1/config/application- 获取网站配置信息(包含数据库凭证)/v1/config/:component_name- 获取组件配置
-
内容管理:
/v1/content/articles- 文章管理/v1/content/categories- 分类管理
-
用户管理:
/v1/users- 用户信息/v1/users/groups- 用户组信息
-
系统信息:
/v1/extensions- 扩展信息/v1/plugins- 插件信息
-
其他敏感接口:
/v1/privacy/requests- 隐私数据请求/v1/messages- 系统消息/v1/redirects- 重定向规则
完整受影响 API 列表见原始漏洞分析。
漏洞复现
-
获取配置信息:
GET /api/index.php/v1/config/application?public=true -
获取用户信息:
GET /api/index.php/v1/users?public=true -
获取文章内容:
GET /api/index.php/v1/content/articles?public=true
修复建议
- 升级到 Joomla 4.2.8 或更高版本
- 临时修复方案:
- 禁用 REST API 组件
- 在 Web 服务器层面限制对
/api/index.php的访问
- 监控可疑的 API 访问日志
技术细节
关键代码分析
-
路由处理:
// 路由选择与鉴权 $route = $this->parseApiRoute($this->input->getMethod(), $this->input->get('path', '', 'RAW')); // 身份验证 if (!isset($route['vars']['public']) || !$route['vars']['public']) { // 需要身份验证 } -
参数覆盖问题:
- 请求参数会覆盖
$route['vars']中的值 - 通过
?public=true可以强制设置public参数为 true
- 请求参数会覆盖
调试技巧
- 开启 debug 模式观察路由处理过程
- 检查
$route变量的变化情况 - 跟踪
parseApiRoute()函数的返回值
总结
CVE-2023-23752 是一个典型的未授权访问漏洞,由于参数覆盖导致身份验证被绕过。攻击者可以利用此漏洞获取敏感信息,包括数据库凭证、用户数据、系统配置等。建议所有使用受影响版本的用户立即升级或采取缓解措施。