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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2026-66917 — IDOR + Stored XSS через нарушенную авторизацию на уровне объектов в JoomGallery | Kitploit
Инструменты/GitHubGitHub/toanln-cov/cve-2026-66917
Аутентификация и авторизацияАнализ уязвимостейАнализ КодаЭксплуатацияЭксплуатация веб-приложенийВеб-безопасность
GitHubtoanln-cov/cve-2026-66917

CVE-2026-66917

IDOR + Stored XSS через нарушенную авторизацию на уровне объектов в JoomGallery

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

Популярное

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

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

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

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

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

IDOR + Stored XSS через нарушенную авторизацию на уровне объектов в JoomGallery

JoomGallery ≤ 4.3.0 — пользователь с ролью Editor перехватывает любые изображения галереи и сохраняет XSS-нагрузку, что позволяет захватить сессию администратора

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


КРАТКОЕ ОПИСАНИЕ

Метод UserimageController::save() в JoomGallery проверяет checkACL('edit', ...) вместо checkACL('edit.own', ...). Пользователь с ролью Editor может отправить POST-запрос на task=userimage.save&id=N для любого изображения независимо от права собственности (IDOR — CWE-639). Поскольку роль Editor глобально обладает правом core.edit, проверка авторизации проходит для любого ID изображения на сайте, включая изображения, принадлежащие администраторам.

В сочетании с отсутствующим вызовом $this->escape() в шаблоне изображения на фронтенде, пользователь с ролью Editor может сохранить 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) Требуемая аутентификация: Учётная запись Editor с низкими привилегиями

Корневая причина 1 — IDOR (CWE-639)

Файл: components/com_joomgallery/src/Controller/UserimageController.php

Действие save() выполняет проверку ACL с использованием разрешения edit вместо edit.own. Разрешение edit предоставляется всем пользователям с ролью Editor глобально, поэтому проверка успешно проходит для любого ID изображения независимо от того, кто его создал.

USERIMAGECONTROLLER.PHP — УЯЗВИМЫЙ КОД (СТРОКА 145)

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

Поскольку группа Editor глобально обладает правом core.edit, условие принимает значение false для каждого ID изображения, предоставляя неограниченный доступ на запись. При успешном сохранении модель дополнительно обновляет поле created_by на ID пользователя-атакующего, незаметно передавая право собственности на изображение атакующему.

Корневая причина 2 — Сохранённый XSS (CWE-79)

Файл: components/com_joomgallery/tmpl/image/default.php

Шаблон изображения на фронтенде выводит $this->item->title без HTML-кодирования в контекст атрибута alt. Фильтр STRING из Joomla JInput не удаляет символы двойных кавычек, поэтому нагрузка, содержащая ", выходит за пределы атрибута и внедряет произвольные обработчики событий.

DEFAULT.PHP — УЯЗВИМЫЙ КОД (СТРОКИ 64, 78)

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

Нагрузка abc" onmouseover="alert(document.domain);" x=" сохраняется в jos_joomgallery.title и при каждой отрисовке страницы внедряется в HTML-атрибут в исходном виде. Никакой санитизации на уровне хранения или вывода не происходит.


ПОДТВЕРЖДЕНИЕ КОНЦЕПЦИИ

Обзор цепочки атаки

  1. Администратор создаёт изображение галереи (ID=3). Владелец = Administrator. Опубликовано и одобрено.
  2. Атакующий входит как Editor. Извлекает cookie сессии и CSRF-токен со страницы входа.
  3. Атакующий получает свежий CSRF-токен от компонента JoomGallery.
  4. IDOR: Editor отправляет POST-запрос task=userimage.save&id=3 с XSS-нагрузкой в jform[title]. Проверка 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. Администратор создаёт изображение галереи — Владелец: Administrator, ID = 3

Администратор создаёт admin_image через бэкенд JoomGallery (Joomla 5.4.7). Изображение опубликовано, одобрено и принадлежит Administrator

Step 1


2. Editor извлекает CSRF-токен со страницы входа

GET /index.php/component/users/login — JSON-ответ содержит "csrf.token":"a68c2b3a...". Токен перехвачен для последующего POST-запроса на вход.

Step 2


3. Editor входит в систему — HTTP 303, joomla_user_state=logged_in

POST /index.php/component/users/login с CSRF-токеном и учётными данными Editor. Ответ: HTTP 303 и Set-Cookie: joomla_user_state=logged_in. Cookie сессии перехвачена.

Step 3


4. Editor извлекает свежий CSRF-токен JoomGallery

GET /index.php?option=com_joomgallery с cookie сессии. Ответ содержит новый "csrf.token":"2d96934b..." для использования в запросе сохранения.

Step 4


5. Внедрение IDOR + XSS — сервер принимает запрос с HTTP 303

Editor отправляет POST-запрос на option=com_joomgallery&task=userimage.save&id=3 с jform[title], установленным в:

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

Сервер возвращает HTTP 303 (не 403), подтверждая IDOR. Заголовок Location содержит XSS-нагрузку в URL перенаправления, что подтверждает принятие и сохранение заголовка.

Step 5


6. Передача права собственности — Владелец изменён на пользователя Editor

Бэкенд JoomGallery показывает, что у изображения ID=3 теперь Владелец: Editor User. Поле created_by было незаметно обновлено в базе данных во время несанкционированного сохранения.

Step 6


7. База данных подтверждает хранение нагрузки без экранирования

SQL-запрос к jos_joomgallery подтверждает, что XSS-нагрузка сохранена — " хранится как сырая двойная кавычка, а не как ". Никакой санитизации на уровне хранения не произошло.

Step 7


8. XSS срабатывает на фронтенде галереи

Любой пользователь, посещающий /index.php/component/joomgallery/gallery, запускает нагрузку. Диалоговое окно alert() в браузере подтверждает выполнение JavaScript в origin жертвы (document.domain).

Step 8


ВОЗДЕЙСТВИЕ

  1. Несанкционированное изменение изображений (IDOR): Пользователь с ролью Editor может изменять любые изображения галереи на сайте, включая изображения, принадлежащие администраторам, без проверки права собственности.
  2. Незаметная передача права собственности: Каждое несанкционированное сохранение незаметно переназначает created_by атакующему, навсегда изменяя журнал аудита.
  3. Сохранённый XSS — постоянное выполнение: Внедрённая JavaScript-нагрузка выполняется в браузере каждого посетителя при каждой загрузке страницы галереи, затрагивая как неаутентифицированных посетителей, так и администраторов.
  4. Перехват сессии администратора → полная компрометация сайта: Вредоносный скрипт в атрибуте alt может похитить cookie сессии администратора, предоставляя атакующему полный доступ к бэкенду и контроль над всей установкой Joomla.
  5. Изменение области действия: XSS выполняется в origin браузера жертвы (CVSS S:C), пересекая границу доверия между сессией атакующего с низкими привилегиями и сессией жертвы с высокими привилегиями.

ССЫЛКИ

  • CVE: https://www.cve.org/CVERecord?id=CVE-2026-66917
  • NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-66917
  • GitHub Advisory: 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
Скачать инструмент