abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · joomla-levels-api
类别: 权限残留 可达性: 远程
Joomla CMS 6.1.3 (0f2d4de) - Open Source Matters
管理员用户 -> 查看访问级别需要在 com_users 上拥有 core.admin 权限(LevelController::allowSave 和删除)。Groups webservice 已经做了同样的事(GroupsController,6.1.1)。LevelsController 没有 allowAdd、allowEdit 或 delete 覆盖,因此 ApiController 允许 core.manage 加上 core.create 通过。
一个 Manager 级别的 API token,被授予 core.login.api 但没有 core.admin,可以创建 UI 禁止的查看访问级别。
| ID | 暂无 CVE |
| 类别 | 权限残留 / 授权绕过 |
| 可达性 | 远程(拥有 core.login.api 的 API token) |
| CWE | CWE-863 |
| CVSS | 中危:6.1 CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:N |
| 产品 | Joomla CMS |
| 受影响版本 | 6.1.3 (0f2d4de4729eb951e0878fec98c7990da07915b2) |
| 认证 | Manager(组 6)的 API token,拥有 core.login.api 和 com_users 的 manage/create/edit 权限。没有 core.admin。默认 core.login.api 仅限超级用户。 |
| 许可证 | GNU Affero GPL v3.0 |
| 实验环境 | 仅 127.0.0.1 |
使用非超级用户的 API token 来更改哪些组能看到哪些页面。仅凭此残留权限,他们不会成为超级用户。这是内容可见性控制,而非站点接管。
| 权限 | 方法 / 路径 | 类型 | 实验验证或推断 |
|---|---|---|---|
| 创建查看访问级别 | POST /api/index.php/v1/users/levels JSON title、rules(组 ID) | 完整性 | 实验验证。HTTP 200,#__viewlevels id=7,标题 poc-level-JOOMLA-LEVELS-API-WITNESS |
| 编辑现有级别(组列表 / 标题) | PATCH /api/index.php/v1/users/levels/{id} | 完整性 | 推断。同一控制器,没有 allowEdit。实验仅创建。 |
| 删除级别 | DELETE /api/index.php/v1/users/levels/{id} | 完整性 / ACL 行的可用性 | 推断。同样缺少覆盖。实验未执行 DELETE。 |
| 暴露仅限会员的文章、模块或菜单项 | 新建或修补级别,其 rules 包含 Public / Guest / Registered | 侦察(内容可见性) | 从 #__viewlevels.rules 推断。实验插入了行;未对活动文章重新设置 ACL。 |
| 对 Registered 隐藏页面,或将攻击者的组添加到 Special 级别 | 同样的 PATCH / 创建 | 完整性 | 推断。同样的存储。 |
| 从 API 修改用户组 | POST /api/index.php/v1/users/groups | 不适用 | 实验验证已关闭。HTTP 403(GroupsController core.admin) |
| 在管理员中打开用户 -> 查看访问级别 | GET /administrator/index.php?option=com_users&view=levels | 不适用 | 实验验证已关闭。HTTP 403 |
| 从 UI 保存级别 | POST ... task=level.save | 不适用 | 实验验证已关闭。HTTP 403(LevelController::allowSave 需要 core.admin) |
使用原版 Manager(无 core.login.api)访问 API | Bearer token / X-Joomla-Token | 不适用 | 推断已关闭。默认 core.login.api 仅限超级用户(组 8)。本实验先将其授予组 6。 |
| 超级用户 / 安装程序 RCE | 不适用 | 不适用 | 已关闭。Manager 仍是 Manager。 |
在 2026-07/08 JSST 浪潮之后,我锁定了 joomla/joomla-cms 6.1.3。Groups API 已经要求 core.admin。查看级别仍然通过 ApiController 漏过(core.manage 加上 core.create / core.edit / core.delete)。LevelsController 上唯一的额外逻辑是 PATCH 对 rules 的 JSON 解码。
已修复的 Groups 同类代码:
public function allowAdd($data = [])
{
return $this->app->getIdentity()->authorise('core.admin', $this->option);
}
管理员 UI:
protected function allowSave($data, $key = 'id')
{
return $this->app->getIdentity()->authorise('core.admin', $this->option)
&& parent::allowSave($data, $key);
}
已记录的弯路:将 Groups API 视为仍然开放(它返回 403);在未先授予 core.login.api 的情况下以原版 Manager 访问 API(默认仅限超级用户,与 CVE-2026-71574 / 72531 / 48904 的设置相同);将 UI 403 视为全部真相(残留的是 API)。表演:反向 shell。判定依据是 API 200 加上 Groups 403 加上 UI 403。
同一版本的残留问题:菜单项 API、媒体覆盖、文章 catid。
python3 joomla-levels-api-Abraxas-Labs.py
或
cd lab
./run.sh
目标仅限 http://127.0.0.1:19520。镜像 joomla:6.1.3-php8.3-apache 加上 mariadb:11.4。
SUCCESS joomla-levels-api api-http=200 level-id=7 groups-api=403 ui-view=403 ui-save=403 JOOMLA-LEVELS-API-WITNESS
将 GroupsController 的 core.admin allowAdd / allowEdit / delete 复制到 LevelsController。保留管理员 UI 门禁。
0f2d4de4729eb951e0878fec98c7990da07915b2)LevelsController.phpcore.admin(6.1.1)· CVE-2026-71574GNU Affero GPL v3.0。参见 LICENSE。仅限回环实验环境。无担保。