Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2026-66917 — JoomGallery 中因对象级授权失效导致的 IDOR + 存储型 XSS | Kitploit
工具/GitHubGitHub/toanln-cov/cve-2026-66917
身份验证与授权漏洞分析代码分析漏洞利用Web应用程序漏洞利用Web安全
GitHubtoanln-cov/cve-2026-66917

CVE-2026-66917

JoomGallery 中因对象级授权失效导致的 IDOR + 存储型 XSS

查看仓库
1天前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

JoomGallery 中因对象级授权失效导致的 IDOR + 存储型 XSS

JoomGallery ≤ 4.3.0 — 编辑器角色用户可劫持任意相册图片并存储 XSS 载荷,从而实现管理员会话接管

CVE CVSS v4.0 CWE-639 CWE-79 Affected Researcher


摘要

JoomGallery 中的 UserimageController::save() 检查的是 checkACL('edit', ...),而非 checkACL('edit.own', ...)。拥有编辑器(Editor)角色的用户可以无视图片归属,向 task=userimage.save&id=N 发起 POST(IDOR — CWE-639)。由于编辑器角色全局拥有 core.edit 权限,因此站点上每个图片 ID 的授权检查都会通过,包括管理员拥有的图片。

再加上前端图片模板中缺少 $this->escape() 调用,编辑器用户可以在任意图片标题(包括管理员拥有的图片)中存储 XSS 载荷,导致 JavaScript 在每个访客的浏览器中执行。这可以实现完全的管理员会话劫持和整站沦陷。


受影响版本

组件受影响版本测试环境修复版本
JoomGallery (com_joomgallery)4.0.0 – 4.3.0Joomla 5.4.7 + JoomGallery 4.3.0-stable (PHP 8.2 / Apache)4.4.0

漏洞详情

类型: 失效的对象级授权 / IDOR(CWE-639)与存储型跨站脚本(CWE-79)链式利用 所需认证: 低权限编辑器账户

根本原因 1 — IDOR(CWE-639)

文件: components/com_joomgallery/src/Controller/UserimageController.php

save() 操作使用 edit 权限(而非 edit.own)执行 ACL 检查。edit 权限被全局授予所有编辑器角色用户,因此无论图片由谁创建,该检查对任何图片 ID 都会通过。

USERIMAGECONTROLLER.PHP — 漏洞代码(第 145 行)

root@kitploit:~
// Vulnerable
if (!$this->checkACL('edit', 'image', $recordId, $parent_id, true)) { ... }

由于编辑器用户组全局持有 core.edit 权限,该条件对每个图片 ID 均评估为 false,从而授予无限制的写入访问权。保存成功后,模型还会将 created_by 更新为攻击者的用户 ID,悄无声息地将图片所有权转移给攻击者。

根本原因 2 — 存储型 XSS(CWE-79)

文件: components/com_joomgallery/tmpl/image/default.php

前端图片模板在 alt 属性上下文中直接输出 $this->item->title,未进行 HTML 编码。Joomla 的 JInput STRING 过滤器不会去除双引号字符,因此包含 " 的载荷可以突破该属性并注入任意事件处理器。

DEFAULT.PHP — 漏洞代码(第 64、78 行)

root@kitploit:~
// Vulnerable
item->title; ?>" ...>

载荷 abc" onmouseover="alert(document.domain);" x=" 被存入 jos_joomgallery.title,并在每次页面渲染时原样注入 HTML 属性。在存储层和显示层均未进行任何净化处理。


概念验证(PoC)

攻击链概述

  1. 管理员创建一张相册图片(ID=3)。属主 = 管理员。已发布且已批准。
  2. 攻击者以编辑器身份登录。从登录页面提取会话 Cookie 和 CSRF 令牌。
  3. 攻击者从 JoomGallery 组件获取一个新的 CSRF 令牌。
  4. IDOR: 编辑器用户向 task=userimage.save&id=3 发起 POST,并在 jform[title] 中携带 XSS 载荷。ACL 检查通过(core.edit,而非 edit.own)。服务器返回 HTTP 303 — 而非 403。
  5. 标题使用未转义的载荷进行更新。created_by 被转移为攻击者的用户 ID。
  6. XSS 载荷未转义地存储在 jos_joomgallery.title 中。
  7. 任何访客(或管理员)浏览相册前端时,模板渲染出 alt="abc" onmouseover="alert(document.domain);"。XSS 触发。管理员会话被捕获 → 整站沦陷。

1. 管理员创建相册图片 — 属主:管理员,ID = 3

管理员通过 JoomGallery 后端(Joomla 5.4.7)创建 admin_image。图片已发布、已批准,属主为 管理员

步骤 1


2. 编辑器用户从登录页面提取 CSRF 令牌

GET /index.php/component/users/login — 响应 JSON 中包含 "csrf.token":"a68c2b3a..."。该令牌被捕获,用于随后的登录 POST。

步骤 2


3. 编辑器用户登录 — HTTP 303,joomla_user_state=logged_in

使用 CSRF 令牌和编辑器凭据执行 POST /index.php/component/users/login。响应:HTTP 303 和 Set-Cookie: joomla_user_state=logged_in。会话 Cookie 被捕获。

步骤 3


4. 编辑器用户获取新的 JoomGallery CSRF 令牌

携带会话 Cookie 执行 GET /index.php?option=com_joomgallery。响应中包含一个新的 "csrf.token":"2d96934b...",用于保存请求。

步骤 4


5. IDOR + XSS 注入 — 服务器以 HTTP 303 接受请求

编辑器用户向 option=com_joomgallery&task=userimage.save&id=3 发起 POST,并将 jform[title] 设置为:

root@kitploit:~
abc" onmouseover="alert(document.domain);" x="

服务器返回 HTTP 303(而非 403),确认了 IDOR 的存在。Location 头在重定向 URL 中显示 XSS 载荷,确认标题已被接受并保存。

步骤 5


6. 所有权被转移 — 属主变更为编辑器用户

JoomGallery 后端显示图片 ID=3 现在的属主为:Editor User。在未经授权的保存过程中,数据库中的 created_by 字段被悄然更新。

步骤 6


7. 数据库确认载荷未转义存储

对 jos_joomgallery 的 SQL 查询确认 XSS 载荷已被存储 — " 以原始双引号形式存储,而非 "。存储层未进行任何净化处理。

步骤 7


8. XSS 在相册前端触发

任何访问 /index.php/component/joomgallery/gallery 的用户都会触发该载荷。浏览器的 alert() 对话框确认了 JavaScript 在受害者源(document.domain)中执行。

步骤 8


影响

  1. 未经授权的图片修改(IDOR): 编辑器角色用户可以修改站点上的任何相册图片,包括管理员拥有的图片,且无需经过属主验证。
  2. 静默的所有权转移: 每次未经授权的保存都会将 created_by 静默重新指派给攻击者,永久篡改审计轨迹。
  3. 存储型 XSS — 持久化执行: 注入的 JavaScript 载荷在每次相册页面加载时于每个访客的浏览器中执行,未认证访客和管理员同样受影响。
  4. 管理员会话劫持 → 整站沦陷: alt 属性中的恶意脚本可以窃取管理员的会话 Cookie,使攻击者获得完整的后端访问权限并控制整个 Joomla 安装。
  5. 作用域变更: XSS 在受害者的浏览器源(CVSS S:C)中执行,跨越了攻击者低权限会话与受害者高权限会话之间的信任边界。

参考资料

  • CVE: https://www.cve.org/CVERecord?id=CVE-2026-66917
  • NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-66917
  • GitHub 安全公告: https://github.com/advisories/GHSA-8vxv-gf52-gm5h
  • 厂商仓库: https://github.com/JoomGalleryfriends/JoomGallery
  • 厂商新版本发布说明: https://www.joomgalleryfriends.net/en/blog/joomgallery-4-en/joomgallery-4-4-0.html
下载工具