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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2023-46604 — Глубокий технический анализ CVE-2023-46604, уязвимости RCE в протоколе OpenWire Apache ActiveMQ, включая разбор структуры пакетов и механизм эксплуатации. | Kitploit
Инструменты/GitHubGitHub/skrkcb2/cve-2023-46604
Анализ уязвимостейЭксплуатацияСтатьи и ИсследованияОбучение и ОбразованиеЭксплуатация Бинарных Файлов
GitHubskrkcb2/cve-2023-46604

CVE-2023-46604

Глубокий технический анализ CVE-2023-46604, уязвимости RCE в протоколе OpenWire Apache ActiveMQ, включая разбор структуры пакетов и механизм эксплуатации.

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

Популярное

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

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

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

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

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

CVE-2023-46604

01. Apache ActiveMQ и OpenWire

  • 1) Обзор Apache ActiveMQ и OpenWire

    ActiveMQ — это брокер, поддерживающий JMS и позволяющий осуществлять связь между системами, использующими не только Java, но и различные другие языки. Кроме того, это сервер с открытым исходным кодом для обмена сообщениями и шаблонами интеграции, который обеспечивает согласованность и устойчивость между системами благодаря функциям кластеризации, а также через базу данных и файловую систему.

    OpenWire — это бинарный протокол обмена сообщениями, используемый в Apache ActiveMQ. Он разработан для эффективной передачи данных между брокером (ActiveMQ) и клиентами.

    CVE-2023-46604 — это уязвимость в ActiveMQ, связанная с протоколом OpenWire (в процессе маршалинга). Удаленный злоумышленник, имеющий сетевой доступ к брокеру или клиенту OpenWire на основе Java, может манипулировать сериализованным типом класса в протоколе OpenWire, тем самым заставляя клиента или брокера (соответственно) инстанцировать любой класс, находящийся в classpath, что приводит к выполнению произвольных команд оболочки. Этот метод атаки характерен для APT-группы Andariel.

02. Анализ уязвимости через протокол OpenWire в среде Apache ActiveMQ 5.17.3

  • 2.1 Анализ пакетов и методы атаки через протокол OpenWire

    Рассмотрим анализ пакетов, отправляемых по протоколу OpenWire в ActiveMQ 5.17.3. Прежде всего, необходимо понимать структуру пакетов. На [Рисунке 1] показана фактическая полезная нагрузка, содержащая заголовок и тело пакета, описанные выше (для удобства использован вызов через файловую систему, а не через classpath в исходном POC). Рассмотрим более подробно, как эти содержимое пакета взаимодействуют и почему их нужно отправлять именно так.

CVE-2023-46604 реализуется путем манипуляции XML-вызовами или внедрения вредоносных данных в процессе обмена данными через протокол OpenWire, что приводит к выполнению удаленных команд. Протокол OpenWire обрабатывает сериализацию и передачу данных, а уязвимость заключается в том, что в процессе сериализации допускается использование вредоносных типов классов.

Описание изображения

[Рисунок] POC

Описание изображения

[Рисунок] XML

root@kitploit:~
Заголовок пакета 
  +----------------------------------------------------------------------------------+
| Длина пакета | Команда | Ид. команды | Требуется ответ на команду | CorrelationId |
|---------------|---------|------------|---------------------------|---------------|
|   00000066    |   1f    |  00000000  |          00               |   00000000    |
+----------------------------------------------------------------------------------+
root@kitploit:~
Тело пакета
  +--------------------------------------------------------------------------------------+
| not-null | not-null | classname-size | classname | not-null | message-size | message |
|----------|----------|----------------|-----------|----------|--------------|---------|
|    01    |    01    |      0043      |   .....   |    01    |     0012     |  .....  |
+--------------------------------------------------------------------------------------+
root@kitploit:~
Формат тела пакета OpenWire
               [=Если not-null равен 1===========]
+----------+ [ +-------+----------------+ ]
| not-null | [ | size  | encoded-string | ]
+----------+ [ +-------+----------------+ ]
| байт     | [ | short | size октетов   | ]
+----------+ [ +-------+----------------+ ]
             [============================]

Описание изображения

[Рисунок 1] Проверка пакета OpenWire в WireShark

Описание изображения

[Рисунок 2] Значение заголовка пакета

root@kitploit:~
 Разбор заголовка пакета
   +----------------------------------------------------------------------------------+
  | Длина пакета | Команда | Ид. команды | Требуется ответ на команду | CorrelationId |
  |---------------|---------|------------|---------------------------|---------------|
  |   00000066    |   1f    |  00000000  |          00               |   00000000    |
  +----------------------------------------------------------------------------------+

 Длина пакета : 00000066 / Протоколы типа OpenWire по умолчанию указывают длину пакета.
 Команда : 1f / Устанавливается для обозначения ExceptionResponse(31). 31 в шестнадцатеричном виде — 1f.
 Ид. команды : 00000000 / Имеет тип int (4 байта), в шестнадцатеричном представлении 00 00 00 00.
 Требуется ответ на команду : 00 / Логический тип: True(01), False(00); здесь False.
 CorrelationId : Тот же тип, что и Ид. команды.

[Рисунок 2] содержит пояснения к форме и назначению каждого поля заголовка пакета, чтобы облегчить понимание. Теперь, после рассмотрения заголовка, посмотрим, как тело пакета проходит через код.

Описание изображения

[Рисунок 3] Значение тела пакета

root@kitploit:~
 Разбор содержимого тела пакета
    +--------------------------------------------------------------------------------------+
  | not-null | not-null | classname-size | classname | not-null | message-size | message |
  |----------|----------|----------------|-----------|----------|--------------|---------|
  |    01    |    01    |      0043      |   .....   |    01    |     0012     |  .....  |
  +--------------------------------------------------------------------------------------+

  not-null (01) | / Первая функция на [Рисунке 3] пропускает not-null
  not-null (01) | classname-size (0043) | classname / Вторая функция на [Рисунке 3] пропускает not-null, третья функция проверяет размер
  not-null (01) | message-size (0012) | message / Вторая функция на [Рисунке 3] пропускает not-null, третья функция проверяет размер

[Рисунок 3] показывает, как значения, установленные в теле пакета, влияют на процесс. В конечном итоге, через [Рисунок 4] сериализованные данные загружают класс и инстанцируют его.

Описание изображения

[Рисунок 4] Выполнение RCE через createThrowable

Описание изображения

[Рисунок 5] Пример выполнения RCE (калькулятор)

Описание изображения

[Рисунок 6] Git Diff (5.17.2 -> 5.17.6)

Описание изображения

[Рисунок 7] Функция validate

03. Заключение

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

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

04. Ссылки

(nist) https://nvd.nist.gov/vuln/detail/cve-2023-46604
(POC) https://github.com/X1r0z/ActiveMQ-RCE/tree/main
(blog) https://attackerkb.com/topics/IHsgZDE3tS/cve-2023-46604/rapid7-analysis

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