Се­год­ня раз­берем кра­сивый слу­чай инъ­екции шаб­лонов, которая дает пол­ноцен­ное RCE в популяр­ном про­дук­те RAGFlow. Резуль­татом будет взлом одной стро­кой кода.

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.26.4, поэто­му для тес­тирова­ния нам нуж­но будет с помощью checkout перек­лючить­ся на уяз­вимую вер­сию 0.24.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%\.wslconfig такие стро­ки:

[wsl2]
memory=8GB
processors=4
swap=4GB
localhostForwarding=true

Ина­че стенд либо не запус­тится вооб­ще, либо будет падать каж­дые пол­торы минуты. При­чем Docker все запус­тит, ты откро­ешь стра­ницу про­екта, но ничего сде­лать не получит­ся. При регис­тра­ции или авто­риза­ции сер­вак упа­дет.

В пап­ке ragflow/docker отре­дак­тируй .env. Най­ди параметр 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://localhost. Луч­ше про­пиши в hosts какой‑нибудь локаль­ный домен. В про­тив­ном слу­чае будут проб­лемы с работой через Burp.

Для вос­про­изве­дения ата­ки тебе пот­ребу­ется любой поль­зователь. В дан­ном слу­чае пра­ва не важ­ны. На тес­товой машине по умол­чанию регис­тра­ция сво­бод­ная, за это отве­чает параметр REGISTER_ENABLED=1.

 

PoC руками

На­чина­ем с регис­тра­ции. Можешь ука­зать любые дан­ные: никаких писем не при­дет, под­твержде­ния не нуж­ны. Пос­ле реги перехо­ди к Sign in, авто­логи­на нет.

Регистрация пользователя в RAGFlow
Ре­гис­тра­ция поль­зовате­ля в RAGFlow

Продолжение доступно только участникам

Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».

Присоединяйся к сообществу «Xakep.ru»!

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

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии