LaTeX-documentexport laat wiskunde, href en afbeeldingspaden ongefilterd door #1641

Closed
opened 2026-08-21 11:59:00 +00:00 by brenno · 0 comments
Owner

Wat er misgaat

De document-LaTeX-export belooft een veilig, zelfstandig artefact. Drie gaten in lib/services/latex/markdown_to_latex.dart:

  1. Math-passthrough. _escapeText schrijft $…$ en $$…$$ verbatim. Inhoud als \input{/etc/passwd} of \write18{…} (bij -shell-escape) gaat ongewijzigd de .tex in.
  2. _escapeUrl. Alleen % en # worden geëscaped. javascript:, file: en data: worden \href{javascript:…}.
  3. _escapeImagePath. Alleen backslash → slash. Een pad met } of % kan uit het \includegraphics{…}-argument breken.

HTML-export gaat door DOMPurify+CSP; dit pad niet. De gebruiker kan de markup ná het openen typen (de veiligheidsscan bij openen vangt dan niets meer).

Stappen

Document met $ \input{/etc/passwd} $ of [x](javascript:alert(1)) exporteren als LaTeX; inspecteer de .tex.

Wat het met het formaat doet

De .tex is geen data meer maar TeX-bron met de rechten van wie hem compileert.

Regressie

Tests die \, \input, javascript: en } in math/url/pad verwachten als geëscapete of geweigerde uitvoer.

## Wat er misgaat De document-LaTeX-export belooft een veilig, zelfstandig artefact. Drie gaten in `lib/services/latex/markdown_to_latex.dart`: 1. **Math-passthrough.** `_escapeText` schrijft `$…$` en `$$…$$` verbatim. Inhoud als `\input{/etc/passwd}` of `\write18{…}` (bij `-shell-escape`) gaat ongewijzigd de `.tex` in. 2. **`_escapeUrl`.** Alleen `%` en `#` worden geëscaped. `javascript:`, `file:` en `data:` worden `\href{javascript:…}`. 3. **`_escapeImagePath`.** Alleen backslash → slash. Een pad met `}` of `%` kan uit het `\includegraphics{…}`-argument breken. HTML-export gaat door DOMPurify+CSP; dit pad niet. De gebruiker kan de markup ná het openen typen (de veiligheidsscan bij openen vangt dan niets meer). ## Stappen Document met `$ \input{/etc/passwd} $` of `[x](javascript:alert(1))` exporteren als LaTeX; inspecteer de `.tex`. ## Wat het met het formaat doet De `.tex` is geen data meer maar TeX-bron met de rechten van wie hem compileert. ## Regressie Tests die `\`, `\input`, `javascript:` en `}` in math/url/pad verwachten als geëscapete of geweigerde uitvoer.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
LibreKAT/Ocideck#1641
No description provided.