
Раскрытие CVE-2025-57298.
Kotaemon — это система вопросно-ответной обработки документов с открытым исходным кодом, основанная на RAG (Retrieval-Augmented Generation), предоставляющая веб-интерфейс для запросов к загруженным документам, таким как PDF, Word и Excel.
В конвейере рендеринга документов Kotaemon обнаружена уязвимость хранимого межсайтового скриптинга (stored XSS). Контент, контролируемый пользователем, обрабатывается LLM и отображается в веб-интерфейсе после преобразования markdown в HTML без надлежащей санитизации, что позволяет постоянно внедрять HTML-элементы, предоставленные атакующим, на страницу.
При загрузке документа система автоматически запускает запрос на создание сводки (например, «summarize this file») как часть обычного потока обработки. В результате любой загруженный документ неявно передаётся через конвейер парсинга и рендеринга markdown, что делает уязвимость эксплуатируемой простой загрузкой документа без необходимости явного взаимодействия пользователя.
Подтверждена уязвимость следующих версий Kotaemon:
kotaemon/blob/main/libs/ktem/ktem/utils/render.py
@staticmethod
def table(text: str) -> str:
"""Render table from markdown format into HTML"""
text = replace_mardown_header(text)
return markdown.markdown(
text,
extensions=[
"markdown.extensions.tables",
"markdown.extensions.fenced_code",
],
)
Приложение использует функцию markdown.markdown() для преобразования сгенерированного LLM содержимого markdown в HTML. Однако полученный HTML-вывод отображается непосредственно в браузере без санитизации HTML или экранирования вывода.
В результате синтаксис markdown, создающий необработанные HTML-элементы — наиболее заметно синтаксис изображений ![]() — преобразуется в исполняемый HTML, например, в теги ``, и сохраняется в выводе беседы.
"summary" means ""
Возможность внедрения постоянных HTML-элементов позволяет атакующим:
/logout)Для эксплуатации требуется только загрузка документа, и она происходит автоматически во время создания сводки, без дополнительного взаимодействия пользователя.
Несанитизированный рендеринг HTML может позволить выполнение JavaScript через обработчики событий в зависимости от контекста рендеринга на стороне клиента.



Этот отчёт подготовлен minnggyuu. (Team 404 Not Found, WhiteHat School 3rd Cohort, South Korea)
Email: [email protected]
GitHub: https://github.com/minnggyuu