Security: documentexport volgt afbeeldingssymlinks buiten de projectmap #1690

Closed
opened 2026-08-21 21:53:46 +00:00 by brenno · 0 comments
Owner

Kwetsbaarheid

ImageService.readSlideImageBytes controleert alleen lexicale padinsluiting via resolveSlideAssetPath en leest daarna het opgeloste bestand direct. Een symlink binnen de projectmap die naar een bestand buiten het project wijst, passeert die controle. Documentexport gebruikt deze reader om afbeeldingen als data-URI in HTML/PDF te embedden; zo kunnen lokale bytes buiten het project in een export terechtkomen.

Dit is een andere sink dan de grafiekhydratatie uit #1640 en vereist een eigen correctie op de centrale afbeeldingsreader.

Reproductie

  1. Maak buiten een testproject een bestand met herkenbare testbytes.
  2. Maak binnen het project een symlink onder images/ naar dat bestand.
  3. Verwijs in een document naar die relatieve afbeeldingsnaam.
  4. Exporteer naar HTML of PDF en inspecteer de embedded bytes.

Verwacht

Een byte-reader die data naar export, AI of clipboard kan verplaatsen volgt uitsluitend een realpath dat aantoonbaar binnen de projectroot ligt. Een ontbrekende/onoplosbare realpath wordt geweigerd.

Technische oorzaak

lib/services/image_service.dart:readSlideImageBytes gebruikt resolveSlideAssetPath gevolgd door File(resolved).readAsBytes. Het gebruikt niet resolveContainedRealPath. De document-sink zit in lib/widgets/document_editor_screen.dart:_embedDocumentExportImage; deckexport gebruikt dezelfde reader.

Afbakening

Openbare plaatsing is door de opdrachtgever/repositorybeheerder expliciet geautoriseerd voor directe afhandeling.

Gevonden bij audit van commit d439638c6b.

## Kwetsbaarheid ImageService.readSlideImageBytes controleert alleen lexicale padinsluiting via resolveSlideAssetPath en leest daarna het opgeloste bestand direct. Een symlink binnen de projectmap die naar een bestand buiten het project wijst, passeert die controle. Documentexport gebruikt deze reader om afbeeldingen als data-URI in HTML/PDF te embedden; zo kunnen lokale bytes buiten het project in een export terechtkomen. Dit is een andere sink dan de grafiekhydratatie uit #1640 en vereist een eigen correctie op de centrale afbeeldingsreader. ## Reproductie 1. Maak buiten een testproject een bestand met herkenbare testbytes. 2. Maak binnen het project een symlink onder images/ naar dat bestand. 3. Verwijs in een document naar die relatieve afbeeldingsnaam. 4. Exporteer naar HTML of PDF en inspecteer de embedded bytes. ## Verwacht Een byte-reader die data naar export, AI of clipboard kan verplaatsen volgt uitsluitend een realpath dat aantoonbaar binnen de projectroot ligt. Een ontbrekende/onoplosbare realpath wordt geweigerd. ## Technische oorzaak lib/services/image_service.dart:readSlideImageBytes gebruikt resolveSlideAssetPath gevolgd door File(resolved).readAsBytes. Het gebruikt niet resolveContainedRealPath. De document-sink zit in lib/widgets/document_editor_screen.dart:_embedDocumentExportImage; deckexport gebruikt dezelfde reader. ## Afbakening Openbare plaatsing is door de opdrachtgever/repositorybeheerder expliciet geautoriseerd voor directe afhandeling. Gevonden bij audit van commit d439638c6bd1b519d68d87680cb022b7d5eddc85.
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#1690
No description provided.