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 有三个主要路由入口:

  1. /index.php - 用户访问文章
  2. /administrator/index.php - 管理员管理后台
  3. /api/index.php - REST API 接口

漏洞存在于第三个入口 /api/index.php

漏洞原理

  1. 请求处理流程

    • 请求首先进入 /api/index.php
    • 然后加载 app.php
    • $app 对象的 input 成员存储所有 HTTP 请求参数
  2. 关键函数调用链

    • execute()sanityCheckSystemVariables()setupLogging()createExtensionNameSpaceMap()doExecute()
  3. 路由与鉴权机制

    • doExecute() 包含两个关键函数:
      • route() - 负责路由选择和身份验证
      • dispatch() - 负责路由分发
  4. 漏洞触发点

    • route() 函数中的 public 参数控制 API 是否对外开放
    • 默认情况下 public=false (不对外开放)
    • parseApiRoute() 函数处理路由时,route.var 中的变量会被请求参数覆盖
    • 通过添加 ?public=true 参数可以绕过身份验证

漏洞利用

发送以下请求可绕过身份验证:

http://target.com/api/index.php/v1/config/application?public=true

受影响 API 列表

该漏洞允许未授权访问以下 API 接口(部分关键接口):

  1. 配置信息

    • /v1/config/application - 获取网站配置信息(包含数据库凭证)
    • /v1/config/:component_name - 获取组件配置
  2. 内容管理

    • /v1/content/articles - 文章管理
    • /v1/content/categories - 分类管理
  3. 用户管理

    • /v1/users - 用户信息
    • /v1/users/groups - 用户组信息
  4. 系统信息

    • /v1/extensions - 扩展信息
    • /v1/plugins - 插件信息
  5. 其他敏感接口

    • /v1/privacy/requests - 隐私数据请求
    • /v1/messages - 系统消息
    • /v1/redirects - 重定向规则

完整受影响 API 列表见原始漏洞分析。

漏洞复现

  1. 获取配置信息

    GET /api/index.php/v1/config/application?public=true
    
  2. 获取用户信息

    GET /api/index.php/v1/users?public=true
    
  3. 获取文章内容

    GET /api/index.php/v1/content/articles?public=true
    

修复建议

  1. 升级到 Joomla 4.2.8 或更高版本
  2. 临时修复方案:
    • 禁用 REST API 组件
    • 在 Web 服务器层面限制对 /api/index.php 的访问
  3. 监控可疑的 API 访问日志

技术细节

关键代码分析

  1. 路由处理

    // 路由选择与鉴权
    $route = $this->parseApiRoute($this->input->getMethod(), $this->input->get('path', '', 'RAW'));
    
    // 身份验证
    if (!isset($route['vars']['public']) || !$route['vars']['public']) {
        // 需要身份验证
    }
    
  2. 参数覆盖问题

    • 请求参数会覆盖 $route['vars'] 中的值
    • 通过 ?public=true 可以强制设置 public 参数为 true

调试技巧

  1. 开启 debug 模式观察路由处理过程
  2. 检查 $route 变量的变化情况
  3. 跟踪 parseApiRoute() 函数的返回值

总结

CVE-2023-23752 是一个典型的未授权访问漏洞,由于参数覆盖导致身份验证被绕过。攻击者可以利用此漏洞获取敏感信息,包括数据库凭证、用户数据、系统配置等。建议所有使用受影响版本的用户立即升级或采取缓解措施。

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 参数可以绕过身份验证 漏洞利用 发送以下请求可绕过身份验证: 受影响 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 列表见原始漏洞分析。 漏洞复现 获取配置信息 : 获取用户信息 : 获取文章内容 : 修复建议 升级到 Joomla 4.2.8 或更高版本 临时修复方案: 禁用 REST API 组件 在 Web 服务器层面限制对 /api/index.php 的访问 监控可疑的 API 访问日志 技术细节 关键代码分析 路由处理 : 参数覆盖问题 : 请求参数会覆盖 $route['vars'] 中的值 通过 ?public=true 可以强制设置 public 参数为 true 调试技巧 开启 debug 模式观察路由处理过程 检查 $route 变量的变化情况 跟踪 parseApiRoute() 函数的返回值 总结 CVE-2023-23752 是一个典型的未授权访问漏洞,由于参数覆盖导致身份验证被绕过。攻击者可以利用此漏洞获取敏感信息,包括数据库凭证、用户数据、系统配置等。建议所有使用受影响版本的用户立即升级或采取缓解措施。