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

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

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

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

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

Категории

Все категории
Loading categories
mongobleed-detector — Detection Script for MongoBleed Exploitation | Kitploit
Инструменты/GitHubGitHub/neo23x0/mongobleed-detector
Vulnerability AnalysisScripting & AutomationForensicsDigital ForensicsThreat IntelligenceIncident ResponseDatabase SecurityLog Analysis
GitHubneo23x0/mongobleed-detector

mongobleed-detector

Detection Script for MongoBleed Exploitation

Репозиторий
81137 месяцев назадПроверено Kitploit

Популярное

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

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

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

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

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

Детектор MongoBleed

Офлайн-инструмент анализа MongoDB для CVE-2025-14847 (MongoBleed)

Автономный инструмент командной строки для Linux, который анализирует данные MongoDB для выявления вероятной эксплуатации уязвимости CVE-2025-14847 с использованием нескольких модулей обнаружения.

Оглавление

  • Обзор
  • Модули обнаружения
  • Требования
  • Установка
  • Два режима работы
  • Режим 1: Локальный анализ
  • Режим 2: Удалённый сбор
  • Параметры командной строки
  • Уровни уверенности
  • Пример вывода
  • Тестирование
  • Ограничения и предостережения
  • Ссылки и благодарности
  • Лицензия

Обзор

MongoBleed (CVE-2025-14847) — это уязвимость раскрытия памяти в декомпрессии zlib MongoDB, позволяющая злоумышленникам извлекать конфиденциальные данные — учётные данные, токены сессий, PII — напрямую из памяти сервера без аутентификации.

Этот инструмент помогает специалистам по реагированию на инциденты обнаруживать попытки эксплуатации, используя несколько источников доказательств:

  • Модуль A: Корреляция журналов (события соединения, отсутствие метаданных)
  • Модуль B1: Анализ счётчиков assert (снимки serverStatus.asserts)
  • Модуль B2: Обнаружение всплесков FTDC (временные ряды diagnostic.data)

Ключевые особенности

  • Многомодульное обнаружение — коррелирует несколько источников данных для более высокой уверенности
  • Офлайн и без агента — не требуется сетевое подключение во время анализа
  • Автообнаружение — автоматически определяет доступные источники данных
  • Удалённый сбор — собирает данные с нескольких хостов через SSH
  • Комбинированная оценка — вердикты ВЫСОКИЙ/СРЕДНИЙ/НИЗКИЙ уровень уверенности
  • Потоковая обработка — эффективно обрабатывает большие файлы журналов

Модули обнаружения

Модуль A: Корреляция журналов

Анализирует JSON-журналы MongoDB для выявления шаблонов эксплуатации:

ID событияТипОписание
22943Соединение принятоРегистрируется при подключении клиента
51800Метаданные клиентаРегистрируется, когда клиент отправляет информацию о драйвере/приложении

Ключевое наблюдение: Легитимные драйверы MongoDB всегда отправляют метаданные клиента. Эксплойт MongoBleed подключается, извлекает память и отключается, но никогда не отправляет метаданные.

Модуль B1: Счётчики assert

Анализирует снимки db.serverStatus().asserts для обнаружения необычных паттернов в счётчике asserts.user:

  • Несколько снимков: Сравнивает снимки во времени для выявления внезапных всплесков assert`ов пользователя
  • Эвристика одного снимка: Если доступен только один снимок, выявляет подозрительные паттерны путём сравнения asserts.user с другими типами assertов. Если пользовательские assertы непропорционально высоки (отношение ≥250x) или все остальные типы равны нулю, помечается как подозрительный (СРЕДНИЙ уровень уверенности)

Примечание: Кумулятивные счётчики могут давать ложные срабатывания. Для наилучших результатов используйте в комбинации с модулем FTDC (Модуль B2).

Модуль B2: Обнаружение всплесков FTDC

Анализирует файлы полного диагностического сбора данных (FTDC) MongoDB для выявления локализованных по времени всплесков счётчиков assert. FTDC периодически снимает показания serverStatus, что позволяет точно определить время потенциальной атаки.

Требования

Shell-скрипт (mongobleed-detector.sh)

  • Linux или macOS (bash 4+)
  • jq — обработчик JSON
  • awk (рекомендуется gawk)
  • gzip — поддержка сжатых журналов

Компоненты Python (опционально, для декодирования FTDC)

  • Python 3.8+
  • pymongo — декодирование файлов FTDC

Удалённый сканер (mongobleed-remote.py)

  • Python 3.8+
  • Встроенный SSH-клиент (команды ssh, scp)
  • Дополнительные пакеты Python для базовой работы не требуются

Установка зависимостей

root@kitploit:~
# Зависимости shell-скрипта
# Debian/Ubuntu
apt-get install jq gawk gzip

# RHEL/CentOS/Fedora
dnf install jq gawk gzip

# macOS
brew install jq gawk

# Зависимости Python (для декодирования FTDC)
pip install -r requirements.txt

Установка

root@kitploit:~
# Клонировать репозиторий
git clone https://github.com/your-org/mongobleed-detector.git
cd mongobleed-detector

# Сделать скрипты исполняемыми
chmod +x mongobleed-detector.sh
chmod +x mongobleed-remote.py
chmod +x ftdc-decode.py

# Установить зависимости Python (опционально, для поддержки FTDC)
pip install -r requirements.txt

Два режима работы

Режим 1: Локальный анализ

Анализ данных, собранных вручную с хостов MongoDB.

Режим 2: Удалённый сбор

Автоматический сбор данных с нескольких хостов через SSH с последующим локальным анализом.

Режим 1: Локальный анализ

Шаг 1: Сбор данных

Соберите данные с ваших хостов MongoDB и организуйте их в следующую структуру:

root@kitploit:~
./collected-data/
├── logs/                    # JSON-журналы MongoDB
│   ├── mongod.log
│   ├── mongod.log.1
│   └── mongod.log.2.gz
├── assert-counts/           # Снимки serverStatus().asserts
│   ├── asserts-2025-01-01.json
│   └── asserts-2025-01-02.json
└── ftdc-files/              # Содержимое diagnostic.data FTDC
    ├── metrics.2025-01-02T10-00-00Z-00000
    └── metrics.interim

Сбор журналов

root@kitploit:~
# Копирование с удалённого хоста
scp user@mongohost:/var/log/mongodb/mongod.log* ./collected-data/logs/

Сбор счётчиков assert

Выполните эту команду на хосте MongoDB (требуется доступ к mongosh):

root@kitploit:~
mongosh --quiet --eval 'JSON.stringify({
  timestamp: new Date().toISOString(),
  hostname: db.hostInfo().system.hostname,
  asserts: db.serverStatus().asserts,
  uptime: db.serverStatus().uptime
})' > asserts-$(date +%Y%m%d-%H%M%S).json

Скопируйте полученный JSON-файл в ./collected-data/assert-counts/.

Совет: Запускайте эту команду несколько раз (например, ежечасно) для создания базовой линии и обнаружения всплесков.

Сбор файлов FTDC

Файлы FTDC находятся по адресам:

  • mongod: <storage.dbPath>/diagnostic.data/ (обычно /var/lib/mongodb/diagnostic.data/)
  • mongos: Определяется из systemLog.path (например, /var/log/mongodb/mongos.diagnostic.data/)
root@kitploit:~
# Копирование файлов FTDC (может потребоваться sudo)
sudo cp /var/lib/mongodb/diagnostic.data/metrics.* ./collected-data/ftdc-files/

Шаг 2: Запуск анализа

root@kitploit:~
# Режим автообнаружения — анализирует все доступные данные
./mongobleed-detector.sh --data-dir ./collected-data/

# С пользовательскими порогами
./mongobleed-detector.sh --data-dir ./collected-data/ \
    -t 1440 \              # Просмотр за последние 24 часа
    -c 50 \                # Снизить порог соединений
    --spike-threshold 50   # Снизить порог всплесков

Устаревший режим (только журналы)

Для обратной совместимости можно анализировать журналы напрямую:

root@kitploit:~
# Сканирование путей по умолчанию
./mongobleed-detector.sh

# Сканирование конкретных файлов журналов
./mongobleed-detector.sh -p /path/to/logs/*.json

# Криминалистический режим (анализ нескольких хостов)
./mongobleed-detector.sh --forensic-dir /evidence/

Режим 2: Удалённый сбор

Автоматически собирает данные с нескольких хостов и анализирует:

root@kitploit:~
# Создать файл хостов
cat > hosts.txt << EOF
mongo-prod-01.example.com
mongo-prod-02.example.com
mongo-staging.example.com
EOF

# Сбор и анализ
./mongobleed-remote.py --hosts-file hosts.txt --user admin --output-dir ./collected-data/

Параметры удалённого сканера

root@kitploit:~
# Использовать конкретный SSH-ключ
./mongobleed-remote.py --hosts-file hosts.txt --user admin --key ~/.ssh/mongodb_key

# Параллельное выполнение
./mongobleed-remote.py --hosts-file hosts.txt --user admin --parallel 10

# Пропустить сбор FTDC (быстрее)
./mongobleed-remote.py --hosts-file hosts.txt --user admin --skip-ftdc

# Только сбор, анализ позже
./mongobleed-remote.py --hosts-file hosts.txt --user admin --collect-only

# Передать параметры SSH (например, прыжковый хост)
./mongobleed-remote.py --hosts-file hosts.txt --user admin \
    -o "ProxyJump=bastion.example.com"

# Использовать sudo для доступа к привилегированным файлам (файлы FTDC часто ограничены)
./mongobleed-remote.py --hosts-file hosts.txt --user admin --sudo

# Режим отладки для устранения проблем с подключением
./mongobleed-remote.py --hosts-file hosts.txt --user admin --debug

Примечание о правах FTDC: Файлы FTDC в /var/lib/mongodb/diagnostic.data/ обычно принадлежат пользователю mongodb и не читаются обычными пользователями. Если вы видите предупреждения о "Проблемах с правами FTDC", используйте флаг --sudo. Для этого требуется, чтобы удалённый пользователь имел доступ sudo без пароля (NOPASSWD в sudoers).

Что собирается

Параметры командной строки

mongobleed-detector.sh

mongobleed-remote.py

Коды завершения

КодЗначение
0Обнаружения с ВЫСОКИМ или СРЕДНИМ уровнем не найдены
1Обнаружены нарушения с ВЫСОКИМ или СРЕДНИМ уровнем
2Ошибка (отсутствуют зависимости, нет данных и т.д.)

Уровни уверенности

Инструмент предоставляет комбинированный вердикт на основе всех доступных доказательств:

Уровни риска для конкретного модуля

Для корреляции журналов (Модуль A) отдельные IP-адреса классифицируются:

РискКритерии
ВЫСОКИЙСоединений ≥ порог, доля метаданных < 10%, частота всплесков ≥ 400/мин
СРЕДНИЙ

Пример вывода

root@kitploit:~
ИНФО: Режим автообнаружения: анализ ./collected-data/
ИНФО: Модуль A: Анализ 3 файла(ов) журналов...
ИНФО: Модуль B1: Анализ счётчиков assert...

╔══════════════════════════════════════════════════════════════════════════════════════════════════════════════════╗
║                              Результаты обнаружения MongoBleed (CVE-2025-14847)                                ║
╚══════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝

Состояние модулей:
  [✓] Модуль A (Корреляция журналов): 3 файла(ов) журналов найдено
  [✓] Модуль B1 (Счётчики assert): 4 снимка(ов) найдено
  [−] Модуль B2 (Всплески FTDC): Нет файлов FTDC или декодер недоступен

Параметры анализа:
  Временное окно:        4320 минут
  Порог соединений:     100
  Порог всплесков:      400/мин
  Доля метаданных:      0.10
  Порог всплесков:      100
  Порог отношения:      250x

Модуль A - Корреляция журналов:

Риск      IP-источник                                Кол-во подкл. Кол-во мета  Кол-во откл. Доля мета%   Всплески/мин Первый сеанс (UTC)        Последний сеанс (UTC)
-------- ---------------------------------------- ------------ ----------- ------------ ------------ -------------- ---------------------- ----------------------
ВЫСОКИЙ   137.137.137.137                                8172          0       8172        0.00%         490.32 2025-12-27T12:55:52Z   2025-12-27T13:12:32Z  

Модуль B1 - Анализ счётчиков assert:
  Проанализировано 4 снимка с 2025-01-01T10:00:00Z по 2025-01-01T11:30:00Z
    asserts.user: 100 -> 860 (дельта: 760)
  ОБНАРУЖЕН ВСПЛЕСК: 2025-01-01T10:30:00Z по 2025-01-01T11:00:00Z
    Дельта: +740 пользовательских assert`ов (110 -> 850)

═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════
Комбинированный вердикт:
  СРЕДНИЙ УРОВЕНЬ УВЕРЕННОСТИ - Рекомендуется расследование
    - Подозрительные паттерны соединений, но данные FTDC недоступны для корреляции

⚠ ВАЖНО: Если эксплуатация подтверждена, одного исправления недостаточно.
  - Смените все учётные данные, которые могли быть раскрыты
  - Проверьте доступ к данным на предмет раскрытия конфиденциальной информации
  - Проверьте наличие бокового перемещения с затронутых систем
  - Сохраните журналы для криминалистического анализа

Предостережения:
  - Отсутствие метаданных соединения является особенностью PoC и может быть обойдено
  - Счётчики assert`ов кумулятивны — возможны ложные срабатывания без базовой линии
  - FTDC предоставляет привязку по времени, но не точную атрибуцию
  - Исправление + смена секретов остаётся обязательным независимо от результатов обнаружения

Тестирование

Репозиторий включает набор тестов для проверки детектора.

Пример реальных данных

Каталог example-data/ содержит реальные данные экземпляра MongoDB 8.0.16, который был атакован с использованием PoC MongoBleed:

root@kitploit:~
example-data/
├── logs/                    # Реальные журналы MongoDB с паттернами атаки
│   ├── mongod.log
│   └── mongod.log.1.gz
├── assert-counts/           # Снимок serverStatus().asserts после атаки
│   └── asserts-post-attack.json
└── ftdc-files/              # Реальные файлы диагностических данных FTDC
    └── metrics.*

Эти данные показывают:

  • 16 344 соединений от IP-адреса атакующего 137.137.137.137 с 0% метаданных
  • 37 384 пользовательских assert`ов, накопленных во время атаки
  • Файлы FTDC, охватывающие окно атаки

Генерация синтетических тестовых данных

root@kitploit:~
./test/generate-test-logs.sh

Это создаёт дополнительные синтетические тестовые данные с различными паттернами:

  • Файлы журналов с паттернами риска ВЫСОКИЙ/СРЕДНИЙ/НИЗКИЙ/ИНФО
  • JSON-снимки счётчиков assert (со всплесками и без)
  • Крайние случаи (IPv6, повреждённый ввод и т.д.)

Запуск тестов

root@kitploit:~
./test/test-detector.sh

Ожидаемый вывод:

root@kitploit:~
╔════════════════════════════════════════════════════════╗
║       Набор тестов детектора MongoBleed               ║
╚════════════════════════════════════════════════════════╝

Тесты модуля A (Корреляция журналов):
✓ ПРОЙДЕН: Код завершения 1 (обнаружены нарушения)
✓ ПРОЙДЕН: Обнаружен IP-источник 137.137.137.137
...

Тесты модуля B1 (Счётчики assert):
✓ ПРОЙДЕН: Отображается статус модуля B1
✓ ПРОЙДЕН: Обнаружен всплеск assert`ов
...

Тесты режима автообнаружения:
✓ ПРОЙДЕН: Отображается статус модуля A
✓ ПРОЙДЕН: Отображается комбинированный вердикт
...

Результаты:
  Пройдено: 24
  Провалено: 0

Все тесты пройдены!

Ограничения и предостережения

⚠️ Важные ограничения

Ограничения обнаружения

  1. Специфичность для PoC: Обнаружение отсутствия метаданных основано на известном поведении PoC MongoBleed. Искушённый злоумышленник может изменить эксплойт для отправки поддельных метаданных, хотя это снизит скорость эксплуатации.

  2. Кумулятивные счётчики: asserts.user является кумулятивным с момента перезапуска mongod. Без базовых снимков высокие значения могут быть нормальными для долго работающих экземпляров. Несколько снимков во времени значительно повышают точность.

  3. Привязка по времени FTDC: FTDC предоставляет информацию о времени, но не точную атрибуцию. Используйте совместно с корреляцией журналов для наилучших результатов.

  4. Хранение журналов: Можно анализировать только те журналы, которые существуют. Агрессивная ротация или удаление журналов злоумышленником уничтожат доказательства.

Технические требования

  1. Необходимость JSON-журналов: MongoDB 4.4+ по умолчанию использует JSON-журналы. Устаревшие текстовые журналы не поддерживаются.

  2. Декодер FTDC: Декодирование FTDC требует Python 3 с pymongo. Без него модуль B2 недоступен.

  3. Доступ к mongosh: Для сбора счётчиков assert требуется mongosh с соответствующими правами.

Действия после обнаружения

Если подтверждены находки с ВЫСОКИМ или СРЕДНИМ уровнем:

  1. Сохраните доказательства - Скопируйте журналы до их ротации
  2. Смена учётных данных - Смените все учётные данные MongoDB и любые секреты, которые могли находиться в памяти
  3. Проверка данных - Оцените, какие конфиденциальные данные могли быть раскрыты
  4. Боковое перемещение - Проверьте, не переместился ли злоумышленник на другие системы
  5. Немедленное исправление - Примените обновления безопасности MongoDB
  6. Отчёт - Следуйте процедурам реагирования на инциденты

Ссылки и благодарности

Исследования обнаружения

Логика обнаружения в этом инструменте основана на исследованиях Эрика Капуано и Тамира Цимермана:

  • Hunting MongoBleed (CVE-2025-14847) — статья Эрика Капуано об уязвимости и методологии обнаружения
  • A Different MongoBleed Perspective — анализ Тамира Цимермана по обнаружению на основе assert`ов

Документация MongoDB

  • Команда serverStatus — документация поля asserts
  • Полный сбор диагностических данных — расположение хранилища FTDC
  • Что такое MongoDB FTDC — описание формата FTDC

Затронутые версии

Лицензия

См. файл LICENSE.

Участие в разработке

Приветствуются вклады! Пожалуйста, оставляйте проблемы и пулл-реквесты.

Если вы тестируете этот инструмент на реальных данных, мы будем особенно благодарны за отзывы о:

  • Частоте ложных срабатываний
  • Легитимных паттернах трафика
  • Крайних случаях или ошибках парсинга
  • Проблемах декодирования FTDC
Скачать инструмент
22944
Соединение закрыто
Регистрируется при отключении клиента
Тип данныхИсточникНазначение
Журналы/var/log/mongodb/mongod.log*<output-dir>/<hostname>/logs/
Счётчики assertКоманда mongosh<output-dir>/<hostname>/assert-counts/
Файлы FTDC/var/lib/mongodb/diagnostic.data/metrics.*<output-dir>/<hostname>/ftdc-files/
ПараметрОписаниеПо умолчанию
-d, --data-dir <путь>Каталог с собранными данными (режим автообнаружения)-
-p, --path <glob>Дополнительный путь/маска журналов (повторяемый)-
-t, --time <минуты>Окно ретроспективы в минутах4320 (3 дня)
-c, --conn-thresholdПорог количества соединений100
-b, --burst-thresholdПорог частоты всплесков в минуту400
-m, --metadata-rateПорог доли метаданных (0.0-1.0)0.10
--spike-thresholdПорог всплеска assert`ов100
--user-ratio-thresholdОтношение пользовательских/других assert`ов для обнаружения по одному снимку250
--no-default-pathsПропустить пути журналов по умолчаниюfalse
--forensic-dir <путь>Анализировать подкаталоги как отдельные хосты-
ПараметрОписаниеПо умолчанию
-H, --host <hostname>Удалённый хост для сканирования (повторяемый)-
-f, --hosts-file <файл>Файл со списком хостов (по одному на строку)-
-u, --user <пользователь>SSH-пользовательТекущий пользователь
-k, --key <файл>SSH-ключ (файл)ssh-agent
-P, --port <порт>SSH-порт22
-o, --ssh-options <опция>Дополнительные SSH-опции (повторяемые)-
--sudoИспользовать sudo для доступа к привилегированным файлам (FTDC)false
-O, --output-dir <путь>Каталог для сохранения собранных данных./collected-data
--log-path <путь>Удалённый путь к журналам для сбора (повторяемый)Стандартные пути
--ftdc-path <путь>Удалённый путь к каталогу FTDC (повторяемый)Стандартные пути
--skip-logsПропустить сбор журналовfalse
--skip-assertsПропустить сбор serverStatus().assertsfalse
--skip-ftdcПропустить сбор файлов FTDCfalse
--collect-onlyТолько сбор данных, без анализаfalse
-j, --parallel <n>Количество параллельных соединений5
--timeout <секунды>Тайм-аут SSH-команд300
-d, --debugВключить отладочный вывод (показывать SSH-команды)false
-q, --quietПодавлять сообщения о ходе выполненияfalse
УверенностьКритерииИнтерпретация
ВЫСОКИЙОбнаружены пики FTDC И подозрительные журналы в том же временном окнеСильный индикатор эксплуатации
СРЕДНИЙПики FTDC ИЛИ подозрительные журналы (не коррелированы)Рекомендуется расследование
НИЗКИЙТолько кумулятивные счётчики assert без всплесковОбнаружена аномалия, слабое доказательство
ИНФОЗначимых находок нетНормальная активность
Соединений ≥ порог, доля метаданных < 10%, частота всплесков < 400/мин
НИЗКИЙСоединений ≥ порог, доля метаданных ≥ 10%
ИНФОСоединений < порог
ВерсияУязвимаИсправлено в
8.2.x8.2.0 - 8.2.28.2.3
8.0.x8.0.0 - 8.0.168.0.17
7.0.x7.0.0 - 7.0.277.0.28
6.0.x6.0.0 - 6.0.266.0.27
5.0.x5.0.0 - 5.0.315.0.32
4.4.x4.4.0 - 4.4.294.4.30
4.2.x4.2.0+Нет исправления
4.0.x4.0.0+Нет исправления
3.6.x3.6.0+Нет исправления