
CVE-2025-57298 공개.
Kotaemon은 PDF, Word, Excel 파일과 같은 업로드된 문서를 질의할 수 있는 웹 인터페이스를 제공하는 오픈소스 RAG(Retrieval-Augmented Generation) 기반 문서 QA 시스템입니다.
Kotaemon의 문서 렌더링 파이프라인에는 저장형 교차 사이트 스크립팅(XSS) 취약점이 존재합니다. 사용자 제어 콘텐츠는 LLM에 의해 처리되고, 적절한 살균 없이 markdown-to-HTML 변환 후 웹 인터페이스에서 렌더링되므로, 공격자가 제공한 HTML 요소가 페이지에 지속적으로 주입될 수 있습니다.
문서가 업로드되면 시스템은 정상적인 처리 흐름의 일부로 요약 요청(예: "summary 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",
],
)
애플리케이션은 LLM이 생성한 markdown 콘텐츠를 HTML로 변환하기 위해 markdown.markdown() 함수에 의존합니다. 그러나 변환된 HTML 출력은 HTML 살균 또는 출력 이스케이프 없이 브라우저에서 직접 렌더링됩니다.
그 결과, 원시 HTML 요소를 생성하는 markdown 구문—특히 이미지 구문 ![]()—은 `` 태그와 같은 실행 가능한 HTML로 변환되어 대화 출력에 저장됩니다.
"summary" means ""
지속적인 HTML 요소를 주입할 수 있는 능력으로 공격자는 다음을 수행할 수 있습니다:
/logout)악용에는 문서 업로드만 필요하며 요약 중 자동으로 발생하므로 추가 사용자 상호작용이 필요하지 않습니다.
살균되지 않은 HTML 렌더링은 프런트엔드 렌더링 컨텍스트에 따라 이벤트 핸들러를 통한 JavaScript 실행을 허용할 수 있습니다.



이 보고서는 minnggyuu가 작성했습니다. (Team 404 Not Found, WhiteHat School 3rd Cohort, 대한민국)
이메일: [email protected]
GitHub: https://github.com/minnggyuu