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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2026-31891 — SQL-инъекция в оптимизаторе агрегации MongoLite через toJsonExtractRaw() | Kitploit
Инструменты/GitHubGitHub/ffasterss/cve-2026-31891
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийВеб-безопасностьТестирование на ПроникновениеБезопасность Баз Данных
GitHubffasterss/cve-2026-31891

CVE-2026-31891

SQL-инъекция в оптимизаторе агрегации MongoLite через toJsonExtractRaw()

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

Популярное

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

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

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

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

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

SQL-инъекция в оптимизаторе агрегации MongoLite через toJsonExtractRaw()

  • Класс уязвимости: SQL-инъекция (CWE-89)
  • Продукт: Cockpit CMS (Core Edition)
  • Затронутая версия: 2.13.4 и, вероятно, все версии с момента внедрения оптимизатора агрегации
  • Протестированный Docker-образ: cockpithq/cockpit:core-2.13.4
  • Исходный коммит: 7fe563023b7fae854c857d2e2dc0878ef28fbb5f (тег 2.13.4)
  • GitHub: https://github.com/Cockpit-HQ/Cockpit
  • Дата обнаружения: 2026-02-28
  • Оценка CVSS: 7.7 (Высокая) — CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:N

1. Краткое описание

Уязвимость SQL-инъекции обнаружена в Cockpit CMS (Core Edition версии 2.13.4). Уязвимость находится в оптимизаторе агрегации MongoLite, а именно в методе . Управляемые пользователем имена полей конкатенируются непосредственно в SQL-запросы без надлежащей санитизации.

toJsonExtractRaw()

Аутентифицированный злоумышленник с доступом на чтение (через API-ключ) к модели контента может внедрить произвольные SQL-команды в конвейер агрегации через REST-конечную точку /api/content/aggregate/{model}.

Этот недостаток позволяет злоумышленникам:

  • Обойти предназначенный фильтр опубликованного контента (_state=1) для чтения неопубликованных черновиков.
  • Извлекать полное содержимое документов из любой коллекции в той же базе данных SQLite.
  • Перечислять внутреннюю схему базы данных через sqlite_master.

2. Пошаговое воспроизведение эксплойта

Следующие шаги демонстрируют, как злоумышленник может обойти фильтр авторизации _state=1.

Предварительные требования

  • Cockpit CMS 2.13.4 или ниже
  • API-ключ с как минимум доступом на чтение к модели коллекции контента.

2.1: Настройка модели контента

  1. Войдите в панель администратора Cockpit CMS как администратор.
  2. Перейдите в раздел Контент > Модели и создайте новую модель с именем testcol.
  3. Добавьте два текстовых поля в модель: title и body.

Скриншот: Настройка модели контента testcol Настройка модели контента testcol

2.2: Настройка роли и ключа API

  1. Перейдите в раздел Настройки > Роли.
  2. Создайте или измените роль (например, MasterRole), чтобы она имела разрешение ЧТЕНИЕ для модели testcol.

Скриншот: Настройка разрешений роли для коллекции Настройка разрешений роли для коллекции

  1. Перейдите в раздел Настройки > API и безопасность (API-ключи).
  2. Добавьте новый API-ключ и назначьте ему только что настроенную роль MasterRole. Скопируйте значение ключа (например, API-b8e8...).

Скриншот: Настройка API-ключа с ролью доступа на чтение Настройка API-ключа с ролью доступа на чтение

2.3: Создание образцового контента (включая секретный черновик)

  1. Перейдите в раздел Контент > testcol.
  2. Создайте элемент с названием Public и установите его состояние как ОПУБЛИКОВАНО (зелёный значок).
  3. Создайте второй элемент с названием SECRET_DRAFT и установите его состояние как НЕ ОПУБЛИКОВАНО (красный значок).

Скриншот: Список элементов, показывающий один опубликованный и один неопубликованный элемент Список элементов, показывающий один опубликованный и один неопубликованный элемент

2.4: Выполнение эксплойта

По умолчанию стандартные API-запросы возвращают только контент с состоянием «Опубликовано». Однако, внедряя SQL в конвейер агрегации, можно обойти фильтр опубликованного контента.

  1. Сформируйте следующий payload. Payload выходит за пределы SQL-функции json_extract() и добавляет SQL-комментарий -- для нейтрализации завершающего SQL, конкретно нацеливаясь на предложение WHERE, которое ограничивает результаты только опубликованными элементами.

Внедряемое поле:

root@kitploit:~
$title') as _id FROM collections_testcol--

Полный JSON конвейера:

root@kitploit:~
[{"$group": {"_id": "$title') as _id FROM collections_testcol--", "c": {"$sum": 1}}}]
  1. URL-кодируйте JSON конвейера и отправьте GET-запрос через браузер (или curl) на конечную точку /api/content/aggregate/testcol. Обязательно замените YOUR_API_KEY на ключ, сгенерированный в шаге 2.2:
root@kitploit:~
curl "http://localhost:8080/api/content/aggregate/testcol?api_key=YOUR_API_KEY&pipeline=%5B%7B%22%24group%22%3A%20%7B%22_id%22%3A%20%22%24title%27%29%20as%20_id%20FROM%20collections_testcol--%22%2C%20%22c%22%3A%20%7B%22%24sum%22%3A%201%7D%7D%7D%5D"

2.5: Проверка эксплойта

Как показано на финальном скриншоте ниже, ответ API успешно возвращает элемент SECRET_DRAFT, несмотря на то, что он явно помечен как НЕ ОПУБЛИКОВАННЫЙ. Это подтверждает, что SQL-инъекция обходит основной механизм авторизации приложения и позволяет несанкционированное извлечение данных через API.

Скриншот: Успешное извлечение неопубликованных данных 'SECRET_DRAFT' Успешное извлечение неопубликованных данных 'SECRET_DRAFT'

3. Воздействие — последствия

В классическом развёртывании headless CMS публичный API-ключ с доступом только на чтение часто встраивается/жёстко прописывается в JavaScript на стороне фронтенда. Используя эту уязвимость через публичную конечную точку API, злоумышленник может:

  • Обойти фильтр опубликованного контента для чтения неопубликованных черновиков, архивных элементов и скрытого контента.
  • Читать все коллекции контента в той же базе данных content.sqlite, включая коллекции, для которых API-ключ не авторизован.
  • Перечислять схему базы данных через sqlite_master для обнаружения всех имён таблиц и их структур.

4. График раскрытия

ДатаДействие
2026-02-28Уязвимость обнаружена в ходе авторизованного исследования безопасности
2026-03-02Отчёт отправлен поставщику
2026-03-02Исправление поставщика -- https://github.com/Cockpit-HQ/Cockpit/commit/b6a0b45c5e8fe16f3027b889583cc3a9127ab4b0
2026-03-09Патч выпущен в версии 2.13.5 -- https://getcockpit.com/releases

Приложение:

  • https://github.com/Cockpit-HQ/Cockpit/security/advisories/GHSA-7x5c-vfhj-9628
  • https://www.cve.org/CVERecord?id=CVE-2026-31891
Скачать инструмент