Содержание статьи
RAGFlow — это опенсорсный движок для генерации текстов. О его популярности говорят 87 тысяч звезд и 10 200 форков репозитория проекта на GitHub. Среди топовых фишек — визуальный конструктор и сложный гибридный поиск. Движок комбинирует векторный поиск по смыслу, традиционный текстовый поиск BM25 и умное ранжирование результатов.
info
RAG (retrieval-augmented generation, генерация с дополненной выборкой) — это метод генерации, при котором система ищет нужные факты во внешних базах данных или документах, после чего передает их нейросети для формирования ответа. Этот метод помогает не только сделать ответ точнее, но и снизить количество галлюцинаций.
CVE-2026-28797 — это SSTI-уязвимость, которая позволяет любому авторизованному пользователю выполнять любые команды прямо на сервере. Оценка риска по шкале CVSS 4.0 — 8,7, то есть довольно высокая. Уязвимы версии RAGFlow до 0.24.0 включительно.
В RAGFlow можно создавать ИИ‑агентов с набором процессоров. В наборе есть простой текстовый процессор из блока манипуляции данными. Он поддерживает шаблоны Jinja, но фильтрация реализована криво. Атакующему достаточно подобрать соответствующую цепочку объектов, чтобы получить полноценное RCE.
warning
Статья имеет ознакомительный характер и предназначена для специалистов по безопасности, проводящих тестирование в рамках контракта. Автор и редакция не несут ответственности за вред, причиненный в результате применения изложенной информации. Распространение вредоносных программ, нарушение работы систем и тайны переписки преследуются по закону.
Тестовый стенд
Актуальная версия RAGFlow — 0., поэтому для тестирования нам нужно будет с помощью checkout переключиться на уязвимую версию 0.:
git clone https://github.com/infiniflow/ragflow.git
cd ragflow
git checkout v0.24.0
cd docker
Система прожорливая, поэтому позаботься, чтобы ресурсов было достаточно. В Linux увеличь лимит числа областей виртуальной памяти:
sudo sysctl -w vm.max_map_count=262144Если запускаешь в Windows, отредактируй конфиг WSL. Добавь в %USERPROFILE%\. такие строки:
[wsl2]memory=8GBprocessors=4swap=4GBlocalhostForwarding=trueИначе стенд либо не запустится вообще, либо будет падать каждые полторы минуты. Причем Docker все запустит, ты откроешь страницу проекта, но ничего сделать не получится. При регистрации или авторизации сервак упадет.
В папке ragflow/ отредактируй .. Найди параметр RAGFLOW_IMAGE и убедись, что он указывает на нужную версию:
RAGFLOW_IMAGE=infiniflow/ragflow:v0.24.0
Стартани сборку и запусти проект:
docker compose -f docker-compose.yml up -d
Первый запуск будет долгим — до нескольких минут. Docker должен запустить MySQL, Redis, MinIO, Elasticsearch (или Infinity, в зависимости от профиля) и сам сервер RAGFlow. Чекай готовность командой
docker logs -f ragflow-server | grep "Running on"Когда в логах появится адрес, открой в браузере http://. Лучше пропиши в hosts какой‑нибудь локальный домен. В противном случае будут проблемы с работой через Burp.
Для воспроизведения атаки тебе потребуется любой пользователь. В данном случае права не важны. На тестовой машине по умолчанию регистрация свободная, за это отвечает параметр REGISTER_ENABLED=1.
PoC руками
Начинаем с регистрации. Можешь указать любые данные: никаких писем не придет, подтверждения не нужны. После реги переходи к Sign in, автологина нет.

Продолжение доступно только участникам
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
