Хранимый межсайтовый скриптинг в Redmine и обход политик безопасности через API

Redmine

В системе управления проектами Redmine обнаружено несколько уязвимостей, которые затрагивают все актуальные ветки продукта. Проблемы позволяют атакующему выполнить вредоносный код в браузере пользователя, а также обойти ограничения безопасности и получить доступ к данным, которые должны быть скрыты. Затронуты версии Redmine до 6.0.11, все выпуски ветки 6.1.x до 6.1.4 и ветки 7.x до 7.0.1.

Детали уязвимостей

Наиболее серьёзная уязвимость связана с форматтером текста Textile, который используется для оформления задач, документов и комментариев. Из-за некорректной обработки специального тега, который восстанавливает форматирование, злоумышленник может сохранить на странице вредоносный скрипт. Когда другой пользователь открывает эту страницу, скрипт выполняется в его браузере. Это классический хранимый межсайтовый скриптинг, который часто применяется для кражи сессионных cookie, подмены содержимого страницы или выполнения действий от имени жертвы. Проблема получила высокий уровень опасности, поскольку для атаки достаточно иметь возможность создавать или редактировать текстовые блоки в Redmine.

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

Помимо этих двух серьёзных проблем, разработчики исправили ещё две уязвимости среднего уровня. Первая касается механизма наследования участников в дочерних проектах. В некоторых случаях обновление состава участников дочернего проекта могло выполняться без проверки прав на управление этим проектом. Это позволяет пользователю с ограниченными правами изменять список участников и получать доступ к закрытым разделам. Вторая проблема связана с вложенными связями между задачами. Конечные точки API, которые возвращают информацию о связях, не всегда проверяют видимость исходной задачи. Из-за этого можно косвенно получить сведения о задачах, которые пользователю видеть не положено. Обе проблемы относятся к категории обхода авторизации и могут привести к раскрытию конфиденциальных данных.

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

На момент публикации бюллетеня нет информации о том, что эти уязвимости активно эксплуатировались в реальных атаках. Тем не менее, для систем управления проектами это характерная ситуация: опубликованные детали уязвимостей быстро превращаются в готовые эксплойты, особенно если исправление не установлено. Поэтому администраторам стоит обновить Redmine до последних версий. Исправления доступны в ветках 7.0.1, 6.1.4 и 6.0.11. Пользователи более старых выпусков должны сначала обновиться до одной из поддерживаемых версий, а затем применить патч. Для сред, где обновление по каким-то причинам откладывается, рекомендуется временно ограничить доступ к API и к форумным функциям, где используется форматтер Textile, однако такой подход лишь снижает поверхность атаки и не устраняет причину.

Стоит отметить, что все четыре уязвимости были обнаружены независимыми исследователями и координаторами, что указывает на рост внимания к открытым системам управления проектами. В последние годы участились случаи, когда схожие проблемы находили в таких продуктах, как Jira, GitLab и сам Redmine. Разработчики Redmine достаточно быстро выпустили исправления, но регулярные обновления остаются главным способом защиты. Администраторам следует также проверить, какие пользователи имеют право создавать текстовые блоки и вызывать API-методы, и при возможности использовать принцип минимальных привилегий. Уязвимости в системах совместной работы особенно опасны, потому что они затрагивают большое количество пользователей и часто открывают доступ к внутренним данным компании. Своевременная установка обновлений в таких системах - это базовая, но обязательная мера, которая позволяет избежать большинства известных атак.

Ссылки

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