REST API в Redmine раскрывает названия приватных проектов и темы скрытых задач

Redmine

Ошибки в программном интерфейсе Redmine позволяют вытянуть из системы сведения, закрытые для конкретного пользователя, а ещё одна уязвимость даёт выполнить чужой код в браузере при вставке скопированного текста. Затронуты ветки 6.1.x до версии 6.1.5 и 7.x до версии 7.0.2. Разработчики закрыли три проблемы в выпусках 6.1.5 и 7.0.2 и опубликовали бюллетень безопасности 1 октября 2026 года.

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

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

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

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

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

Третья уязвимость устроена иначе. Это межсайтовый скриптинг, который срабатывает целиком в браузере. Злоумышленник подготавливает страницу с вредоносной вставкой, жертва копирует фрагмент и переносит его в текстовое поле Redmine - например, в описание задачи или в комментарий. Скрипт исполняется в контексте домена системы и получает доступ к сессии пользователя. Украденная сессия равносильна входу от имени жертвы: злоумышленник читает доступные ей задачи, меняет статусы, оставляет комментарии. При достаточных правах жертвы он создаёт новых пользователей и правит настройки. Опасность растёт, если вставку делает администратор. Разработчики оценили угрозу как умеренную, поскольку атака требует действий самого пользователя. Затронуты сборки 7.0.0 и 7.0.1, в ветке 6.1.x ошибка не проявляется.

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

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

Проверить, попадает ли установка под действие бюллетеня, несложно: номер версии виден в служебном разделе системы. Всё, что относится к ветке 6.1.x младше 6.1.5 и к ветке 7.x младше 7.0.2, требует обновления. Сборки 6.0.x и более ранние в список исправляемых версий не входят, но утечки через программный интерфейс появились задолго до 6.1, поэтому старые установки тоже стоит поднять хотя бы до последней поддерживаемой ветки.

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

Ссылки

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