1 Pentesting Backend
Benjamin Goisser edited this page 2026-02-06 17:10:15 +01:00

Während der Prototyping-Phase wurde die Sicherheit des PDF-Exports überprüft.

Da für die PDF-Exports ein Browser am Server mit User-Content ausgeführt wird, gibt es die Gefahr, dass ein Angreifer Javascript-Execution bekommen könnte und somit auf das interne Netzwerk zugreifen kann.

Um dafür Sicherheit zu schaffen, haben sich zwei externe Kolleg:innnen (Benjamin Komar, TUW und Katharina Divos, FHSTP) bereiterklärt, White-Box-Test an einem Prototypen durchzuführen.

Dabei wurde eine Schwachstelle im KaTeX-Rendering gefunden. Bei einem fehlerhaften KaTeX-Input wird der Input in roter Farbe im Output von markdown-it markiert.

Error-Handling, das den fehlerhaften Output rot markiert:

md.renderer.rules.latex_inline = (tokens, index) => {
    const content = tokens[index].content;
    try {
        return katex.renderToString(content);
    } catch {
        return `<span style="color: red">${content}</span>`;
    }
};

Das KaTeX-Rendering wird mit markdown-it implementiert. Bei einem zusätzlichen selbsterstellten Renderer in markdown-it wird die sonst standardmäßig aktivierte Sanitization von markdown-it übersprungen. Das Problem ist, dass im catch-Block der Userinput ohneweiters übernommen wird. So kann über z.B. ein fehlerhaftes Bild JS-Exection erreicht werden.
Beispiel-Input: $\<img src="notfound" onerror="document.body.innerHTML = 'ALERT'"></img>$

Als Lösung wird nun DOMPurify von Cure53 als Sanitizer im Frontend und Backend verwendet.