Платформа MISP (Malware Information Sharing Platform, платформа обмена сведениями о вредоносных программах) собирает данные об угрозах от десятков организаций. Внутри хранятся индикаторы компрометации, описания инцидентов, связи между атакующими и их инструментами. В версии 2.5.48 разработчики закрыли четыре уязвимости. Три из них касаются проверки прав доступа и позволяют читать, переписывать и удалять чужие данные. Четвёртая даёт возможность повторно применить одноразовый код входа. Уязвимы все сборки до 2.5.48.
Детали уязвимостей
Первая проблема связана с делегированием. Событие в MISP - это карточка с набором индикаторов и связанных объектов, к которой привязаны права доступа. Делегирование позволяет одной организации передать такое событие другой, например партнёру по обмену или подрядчику. Сервер проверял права лишь на то событие, которое указано в запросе. Сохранял он при этом присланную запись целиком. Поэтому злоумышленник мог подменить идентификатор и перенаправить уже существующее делегирование на любое событие в системе. Запись о делегировании даёт организации читательский доступ к названному событию. Значит, чужое событие, которого автор запроса даже не видит, оказывалось у него в руках. Дальше больше: принятие делегирования передавало право на событие и удаляло исходную запись о нём. Проблему нашёл исследователь Jeroen Pinoy.
Вторая уязвимость пряталась в обработке вложенных структур. Перед сохранением записи служебный код приводил её к безопасному виду: убирал идентификатор, жёстко привязывал ссылки на событие и объект. Механизм сохранения вёл себя иначе. Он предпочитал вложенный ключ, совпадающий с именем модели, и отбрасывал внешние значения. Из-за этого вложенный блок с атрибутом, объектом, отчётом, наблюдением или тегом мог перезаписать любую такую строку на сервере. Ту же строку он мог переподчинить другому событию или пометить как удалённую. События, недоступные отправителю, тоже попадали под удар. Отчёт об этой уязвимости снова подготовил Jeroen Pinoy.
Третья уязвимость открывает путь к администраторским правам. Коллекции тегов группируют метки для совместной работы. Когда пользователь добавлял или правил такую коллекцию, сервер сохранял весь запрос целиком. Пользователю с правом редактировать теги этого хватало, чтобы подсунуть в запрос запись о другом пользователе или организации и поднять свои полномочия до администратора узла. Теперь коллекция и её теги сохраняются отдельно от остального содержимого запроса.
Четвёртая проблема касается второго фактора аутентификации. MISP поддерживает одноразовые коды на основе времени (TOTP, алгоритм, где код зависит от текущего момента и действует недолго). Такой код можно было применить дважды, пока он оставался действительным. Перехваченный или подсмотренный код годился для ещё одного входа. Для административных учётных записей это чувствительнее: доступ к узлу открывает базу обмена и настройки участников. Теперь сервер запоминает временное окно каждого принятого кода и отказывает при повторной попытке. Об уязвимости сообщил Танги Снук из Агентства НАТО по связи и информации (NCIA).
Дальше стоит сказать, кого это касается. MISP держат команды реагирования на инциденты, банки, промышленные компании, государственные структуры. Данные внутри почти не публикуют: это индикаторы действующих кампаний, сведения об уязвимостях в инфраструктуре участников, отметки о расследованиях. Подмена или утечка таких сведений бьёт по всем участникам обмена. Вместе первые две уязвимости дают доступ к любому событию на узле. Третья добавляет администраторские права и возможность выгрузить базу целиком. Она опаснее там, где право редактировать теги выдано широкому кругу сотрудников.
Делегирование в MISP - рабочая механика, а не редкая функция. Крупные организации передают события партнёрам, чтобы те видели показатели атаки и могли блокировать чужую инфраструктуру. Поэтому записи о делегировании накапливаются, и лишняя строка среди них не бросается в глаза. Проверять журнал стоит по датам и по событиям, которые вы никому не отдавали.
Об эксплуатации этих уязвимостей в реальных атаках данных нет. Все четыре проблемы нашли исследователи и передали разработчикам. Но характер ошибок позволяет использовать их почти без подготовки. Для первых двух достаточно учётной записи на узле, для третьей хватает роли редактора тегов. Поэтому обновиться до 2.5.48 стоит без промедления.
После обновления администраторам полезно проверить несколько вещей. В журнале делегирования ищите записи, которых ваши сотрудники не создавали. Это признак, что доступом уже пользовались. Просмотрите события, которые сменили владельца или исчезли, а также список администраторов узла. Если право редактировать теги было у большого числа людей, пересмотрите его.
Все четыре уязвимости лежат не в криптографии, а в логике работы с данными. Сервер проверяет одно, а сохраняет другое. Он же даёт писать соседние записи через коллекцию тегов. Он же принимает второй фактор, не помня, что код уже использовали. Такие ошибки плохо ловят автоматические сканеры, их находят при чтении кода и разборе сценариев доступа.
Для MISP цена подобной ошибки выше, чем для рядового веб-приложения. Платформа по замыслу открыта для обмена между организациями, участников много, права у них разные. Один неверный шаг в проверке доступа открывает данные целого сообщества. Обновление до 2.5.48 закрывает все четыре уязвимости. Проблемы нашли до того, как о них узнали атакующие, и исправления вышли одним релизом.
Ссылки
- https://github.com/MISP/MISP/commit/d1f5684f9
- https://github.com/MISP/MISP/commit/9485ae40d
- https://github.com/MISP/MISP/commit/96f735e7b
- https://github.com/MISP/MISP/commit/a020fa47b