Шесть уязвимостей в Malcolm позволяют обойти аутентификацию и прочитать перехваченный трафик

Malcolm

CISA Malcolm - открытая платформа для сбора, хранения и анализа сетевого трафика - содержит шесть уязвимостей. Большинство из них открывает доступ к данным или административным правам, которых у постороннего быть не должно: под угрозой перехваченные пакеты, журналы расследований и служебные интерфейсы. Самая высокая оценка - 8.1 по шкале CVSS, уровень High. Остальные оценки лежат в диапазоне от 4.2 до 7.1. Уязвимы версии до 26.07.1 и до 26.08.0 включительно. Часть проблем закрыта в 26.08.0, остальные - в 26.09.0. Случаев эксплуатации в реальных атаках CISA пока не зафиксировала.

Обход аутентификации и подмена пути в Malcolm

Платформу собирают из готовых компонентов: захват пакетов, поиск по журналам и средства расследования работают в общем контейнерном комплексе. Развёртывания встречаются в энергетике, ИТ и водоснабжении, нередко на изолированных участках промышленных сетей. Поэтому ошибки в проверке доступа здесь стоят дорого - за входным прокси лежат все перехваченные данные и панели управления.

Обход аутентификации на входе в платформу

Обратный прокси на базе nginx (веб-сервер, который принимает запросы и распределяет их между внутренними службами) сравнивает адрес запроса без учёта регистра, а переписывает его с учётом регистра. Если фрагмент пути написан не в нижнем регистре, запрос попадает в защищённый участок, но перенаправление не срабатывает. Прокси передаёт запрос напрямую службе Arkime, а эта секция конфигурации - единственная, где не подключён файл проверки подлинности. Тот же участок пропускает клиентский заголовок с именем пользователя и не перезаписывает его, тогда как Arkime доверяет такому заголовку и создаёт учётную запись автоматически. Любой, кто дотягивается до сети платформы, входит в Arkime под выдуманным именем. Оценка - 6.5, уровень Medium.

Похожая слабость есть и в самой службе захвата. Она работает в режиме общей сети узла и слушает на всех интерфейсах, включая внешние. Заголовок с именем пользователя принимается с любого адреса, а парольный секрет в конфигурации задан значением по умолчанию, которое известно публично. Злоумышленник из соседнего сегмента подключается к службе напрямую, минуя прокси, и получает полный доступ к захваченному трафику. Оценка - 4.2, Medium.

Подмена пути обходит проверку ролей

Слой проверки ролей, написанный на Lua (встраиваемый язык сценариев внутри nginx), сопоставляет с шаблонами сырой адрес запроса, где специальные символы остаются в процентной кодировке. Сам nginx выбирает обработчик уже по раскодированному адресу. Расхождение и создаёт щель. Пользователь с низкими правами отправляет административный путь в процентной кодировке: проверка ролей не находит совпадения и пропускает запрос, а nginx отдаёт его защищённому интерфейсу. Так открываются загрузка файлов, служебный сервер PHP, управление учётными записями и интерфейс администратора. Оценка самой заметной из двух проблем - CVE-2026-107333, 8.1, High. Вторая устроена схожим образом: нормализация пути в слое проверки ролей и в маршрутизации не совпадает. Её оценка - 5.4.

Загрузка файлов и распаковка данных

Компонент загрузки собран на основе открытого серверного модуля FilePond, и Malcolm почти не правил его код. Один из доступных маршрутов заставляет сервер скачать адрес, указанный клиентом, и вернуть содержимое обратно загрузившему. Это подделка серверных запросов (SSRF) - схема, при которой сервер становится посредником для доступа туда, куда снаружи пути нет. Формально нужны права на загрузку, но такие права выдают рядовым аналитикам. Оценка - 7.1, High.

Конвейер распаковки проверяет число записей, глубину вложенности и суммарный размер только для архивов. Для однопоточных сжатых форматов эти ограничения не работают. Пользователь с правом загрузки отправляет небольшой файл, который разворачивается в неограниченный объём на диске и заполняет общий том, где расположены OpenSearch, Logstash, Arkime и Zeek. Платформа перестаёт отвечать для всех. Оценка - 6.5, Medium.

Подделка запроса в приложении оператора

Приложение рабочего места оператора, написанное на Flask (фреймворк для веб-приложений на Python), принимает управляющие команды запросом без проверки подлинности. Заголовки механизма совместного использования ресурсов между разными источниками (CORS) разрешают обращения с любого сайта. Достаточно заставить браузер оператора открыть вредоносную страницу, и та отправит команду на платформу. Среди доступных действий - остановка захвата и полное удаление собранного трафика вместе с журналами расследований. Оценка - 7.1, High.

Что делать администраторам

Перевести развёртывание на версию 26.09.0 - она закрывает весь набор. Если обновление целиком пока невозможно, минимальный шаг - 26.08.0, она снимает четыре проблемы из шести. Держать платформу вне интернета и за межсетевым экраном; не выпускать наружу порт службы захвата; удалённый доступ строить через VPN; исключить прямую связность развёртывания с корпоративной сетью.

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

Ссылки

Комментарии: 0