
Divulgation de CVE-2025-57298.
Kotaemon est un système de questions-réponses documentaire open source basé sur le RAG (Retrieval-Augmented Generation) qui fournit une interface web pour interroger des documents téléchargés tels que des fichiers PDF, Word et Excel.
Une vulnérabilité de cross-site scripting (XSS) stocké existe dans le pipeline de rendu des documents de Kotaemon. Le contenu contrôlé par l'utilisateur est traité par un LLM et rendu dans l'interface web après conversion Markdown vers HTML sans assainissement approprié, permettant à des éléments HTML fournis par un attaquant d'être injectés de manière persistante dans la page.
Lorsqu'un document est téléchargé, le système déclenche automatiquement une demande de résumé (par exemple, « summary this file ») dans le cadre du flux de traitement normal. Par conséquent, tout document téléchargé transite implicitement par le pipeline d'analyse et de rendu Markdown, ce qui rend la vulnérabilité exploitable par le simple téléchargement d'un document, sans nécessiter d'interaction explicite de l'utilisateur.
Les versions suivantes de Kotaemon sont confirmées comme vulnérables :
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",
],
)
L'application s'appuie sur la fonction markdown.markdown() pour convertir le contenu Markdown généré par le LLM en HTML. Cependant, la sortie HTML convertie est rendue directement dans le navigateur sans assainissement HTML ni échappement de sortie.
Par conséquent, la syntaxe Markdown qui produit des éléments HTML bruts — notamment la syntaxe d'image ![]() — est convertie en HTML exécutable tel que des balises `` et stockée dans la sortie de la conversation.
"summary" means ""
La capacité d'injecter des éléments HTML persistants permet aux attaquants de :
/logout)L'exploitation nécessite uniquement le téléchargement d'un document et se produit automatiquement pendant le résumé, sans interaction supplémentaire de l'utilisateur.
Le rendu HTML non assaini peut permettre l'exécution de JavaScript via des gestionnaires d'événements selon le contexte de rendu du frontend.



Ce rapport a été préparé par minnggyuu. (Team 404 Not Found, WhiteHat School 3rd Cohort, Corée du Sud)
Email : [email protected]
GitHub : https://github.com/minnggyuu