LaTeX-injectie via onvolledige escape van afbeeldings- en videopaden #1358
Labels
No labels
accepted
bug
declined
docs
duplicate
enhancement
good first issue
in-progress
needs-info
privacy
security
triage
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
LibreKAT/Ocideck#1358
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Bevinding
_escapeLatex(lib/services/latex/beamer_slide_builder.dart:448) isvolledig: het escaped
\,&,%,#,_,{,},~,^— alleLaTeX-speciale tekens. Het wordt toegepast op titels, captions, bullets, alle
tekstinhoud.
Maar de escape voor afbeeldings- en videopaden is onvolledig:
_escapeImagePath(regel 461-464) doet alleenreplaceAll(r'\', '/')—backslash naar slash, verder niets.
_escapeUrl(regel 466-469) voor videopaden escaped alleen%en#.Deze paden gaan in
\includegraphics[width=\textwidth]{${_escapeImagePath(path)}}en
\href{...}{...}. Een pad met}erin breekt uit het argument.Exploit
Een kwaadwillend deck met
imagePath: "foo}\\input{/etc/passwd}{bar"produceert:
\inputis een standaard LaTeX-commando — geen--shell-escapenodig.\write18vereist dat wél, maar een gebruiker die--shell-escapeaan heeftstaan (veel LaTeX-gebruikers doen dat voor bv.
minted) voert willekeurigecommando's uit.
De
imagePathkomt uit de markdown van een deck, en een deck is invoer — eenontvanger die een aangeleverd deck exporteert naar LaTeX en compileert, voert
de payload uit.
Scope
OciDeck compileert niet zelf — de UI zegt "Compileer met pdflatex of xelatex"
— dus de aanval vereist dat de gebruiker de gegenereerde .tex compileert. Maar
de .tex die OciDeck produceert zou veilig moeten zijn ongeacht wie hem
compileert. Dit is dezelfde asymmetrie als #1350: de tekstinhoud is volledig
geëscaped, de paden niet.
Oplossingsrichting
_escapeImagePathen_escapeUrldezelfde tekens laten escapen als_escapeLatex, of — beter — één gedeelde escape-functie gebruiken voor allesdat in een LaTeX-argument belandt. De backslash-naar-slash-transformatie voor
paden blijft, maar moet daarnaast ook
},{,$,~,^escapen.Inschatting: ~5-10 regels diff, plus een test die een pad met
}en\inputaanlevert en bevestigt dat de gegenereerde .tex de payload als platte tekst
bevat.
Herkomst
Gevonden tijdens security research naar defense-in-depth voor OciDeck. De
tekst-escape is volwassen; de pad-escape is de asymmetrie die een aanvaller
gebruikt om eromheen te komen.