Серьёзная уязвимость в RAGFlow: обычный пользователь получает контроль над сервером
В опенсорсном движке RAGFlow, который собирает данные из документов и кормит ими нейросети, нашли уязвимость, превращающую обычного пользователя в полноправного владельца сервера. Достаточно одной аккуратно составленной строки в шаблоне.
RAGFlow — это фреймворк для RAG-приложений, то есть генерации с дополненной выборкой. Если коротко: система ищет нужные факты в ваших документах, а потом передаёт их языковой модели, чтобы ответ получался точным и без выдумок. Проект популярный — почти 87 тысяч звёзд на GitHub и больше десяти тысяч форков. Плюс у него удобный визуальный конструктор и гибридный поиск: векторный поиск по смыслу, классический BM25 и умное ранжирование результатов в одном флаконе.
Уязвимость получила номер CVE-2026-28797, по шкале CVSS 4.0 её оценили в 8,7 балла — это серьёзно. Дело в том, что в RAGFlow можно собирать ИИ-агентов из отдельных процессоров, и среди них есть текстовый процессор с поддержкой шаблонов Jinja. Вот фильтрация входных данных там и подвела: через неё протаскивается SSTI, инъекция шаблонов. А дальше подобранная цепочка объектов даёт выполнение произвольных команд на сервере.
Самое неприятное — для атаки не нужны права администратора. Любой авторизованный пользователь, даже с минимальной ролью, может получить RCE. Уязвимы все версии до 0.24.0 включительно, актуальная на момент публикации — 0.26.4.
Владельцам установок стоит обновиться, причём без задержек. Если RAGFlow крутится в инфраструктуре и доступен сотрудникам — проверить версию лучше прямо сейчас. Ну и это лишний повод вспомнить простое правило: даже очень модный и удобный инструмент не отменяет базовой гигиены безопасности.
Главное теперь — как быстро фикс попадёт в опенсорсную ветку и выйдет ли отдельный патч для тех, кто крутит RAGFlow на своём железе. У нас как раз планировали поднять его локально, теперь придётся сначала дождаться обновления.
@Игорь, а в статье не уточнили, какие версии RAGFlow затронуты и в каком релизе закрыли дыру. Если планируете поднимать локально, стоит сначала сверить версию с changelog, иначе можно развернуть уязвимый билд. Пока не обновитесь, наверное, разумно отключить текстовый процессор с Jinja, раз проблема через него.
@Алексей Волков, спасибо, версию как раз сверяю с changelog перед развёртыванием. Про отключение Jinja-процессора тоже думал, но у нас на нём завязаны пара сценариев, так что жду официальный патч. Надеюсь, фикс не задержится.
Плюс опенсорса в том, что сам фикс можно посмотреть в коде ещё до выхода релиза. Но вот вопрос: патч уже лежит в master или придётся ждать следующий тег? У тех, кто крутит RAGFlow локально, обновление обычно сводится к pull образа и перезапуску контейнера, так что дыру закрыть несложно, если знать, что она есть.
А патч уже вышел?
Знакомая история: как только в RAG-пайплайне разрешаешь пользовательские шаблоны, любая неэкранированная строка становится вектором атаки. У нас для таких процессоров отдельный песочный рантайм и строгий allowlist функций Jinja, иначе подобные CVE всплывают уже на проде. Хорошо, что у проекта открытый код — заплатку можно проверить глазами, а не ждать релиза.
Как раз собиралась развернуть RAGFlow для своих документов, хорошо, что статья попалась до этого. Пойду проверю версию и заодно посмотрю, не подключала ли я этот текстовый процессор с шаблонами.
Сколько инстансов уже реально взломано?