Две уязвимости в Discourse позволяют подменить страницы и прочитать файлы на сервере

Discourse

Уязвимость в Discourse позволяет любому зарегистрированному пользователю читать и записывать файлы на сервере, где развёрнут форум. Рядом с ней исследователи из Searchlight Cyber описали вторую проблему: подмена страниц, из-за которой чужой код исполняется в браузере у анонимных посетителей. Обе срабатывают на стандартной конфигурации платформы. Discourse - открытая платформа для форумов и сообществ. По данным исследователей, на ней работают более 22 тысяч проектов, включая OpenAI, Atlassian и Cloudflare. Проблему с обработкой изображений они относят к критическим.

Уязвимости в загрузке изображений и кеше страниц

Чтение и запись файлов через обработку картинок

Уязвимость CVE-2026-55420 скрыта в конвейере загрузки изображений. Discourse проверяет вложенный файл двумя способами: по расширению и по первым байтам содержимого. Как только хотя бы одна проверка проходит, файл уходит в ImageMagick, библиотеку для преобразования графики. Обойти обе проверки помогает полиглот - файл, который разные программы читают как разные форматы. Исследователи собрали такой файл из структур формата JPEG XL и текста на PostScript (язык описания печатных документов).

Дальше срабатывает особенность настроек. В конфигурации ImageMagick модуль PostScript отключён. Однако обработка PDF всё равно передаёт файл в Ghostscript - внешний интерпретатор, который различает форматы по первым байтам. Подделанное вложение доходит до него и исполняется.

Одного исполнения мало для чтения файлов. Основной этап опирается на встроенный язык сценариев ImageMagick. Он умеет читать данные по локальному пути и записывать их в другое место. Чтобы подсунуть такой сценарий обработчику, исследователи применили состояние гонки (TOCTOU, расхождение между моментом проверки файла и моментом его использования). Временный файл подменяли уже после проверки.

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

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

Подмена кеша и исполнение кода у анонимных посетителей

Вторая уязвимость, CVE-2026-55674, связана с кукой (небольшим набором данных, который браузер хранит для конкретного сайта). Через неё посетитель выбирает цветовую схему форума. Значение куки подставляется в разметку страницы без экранирования. Проверка существования схемы проходит: база данных приводит строку к числу и отбрасывает остаток. В ответ при этом уходит исходная строка. Так в разметке оказывается произвольный HTML.

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

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

Условия для обеих атак минимальны. Для первой достаточно обычной регистрации, для второй учётная запись не нужна вовсе.

Что исправлено и что делать

Хостинговым клиентам Discourse закрыл доступ к обеим проблемам 15 июня 2026 года. Публично исправление для обработки изображений вышло 30 июня, для подмены кеша - 28 июля.

Политику ImageMagick перевели на запрет по умолчанию. Теперь блокируются все внешние интерпретаторы, включая Ghostscript, а разрешены только те модули, которые нужны платформе. Для куки добавили строгую числовую проверку и включили её в ключ кеша.

Администраторам форумов стоит обновиться до актуальной сборки. Полезно проверить, что политика ImageMagick на сервере запрещает лишние модули и передачу обработки внешним программам. Загрузку изображений для пользователей с низким уровнем доверия лучше ограничить, если задачи сообщества это позволяют. Среди признаков атаки - файлы, чьё расширение не совпадает с содержимым, необычные вложения JPEG XL и PDF, а также подозрительная активность вокруг временных файлов.

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

Ссылки

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