Security: MarkdownSafetyScanner mist eventhandlers na een solidus #1691

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

Kwetsbaarheid

De fail-closed MarkdownSafetyScanner herkent inline eventhandlers alleen wanneer vóór on...= een whitespace staat. HTML-tokenisatie accepteert echter ook een onverwachte solidus vóór een attribuutnaam. Daardoor passeert bijvoorbeeld <svg/onload=alert(1)> de ingangsscan, terwijl het als element met eventhandler kan worden geïnterpreteerd.

Export-time DOMPurify/CSP blijft defense-in-depth, maar de expliciete belofte dat uitvoerbare inhoud bij openen wordt geweigerd is hiermee omzeilbaar en andere consumers kunnen niet op de gate vertrouwen.

Reproductie

  1. Roep MarkdownSafetyScanner.scan aan met <svg/onload=alert(1)>.
  2. Observeer dat geen scriptExecution-finding wordt teruggegeven.
  3. Vergelijk met , dat wel wordt gevonden.

Verwacht

De scanner normaliseert/parset tagattributen robuust of herkent alle HTML-separators die tot een on...-attribuut kunnen leiden. Regressietests omvatten solidus- en vergelijkbare tokenizer-randgevallen.

Technische oorzaak

lib/services/markdown_safety.dart gebruikt voor inline handlers RegExp(r'<[a-z][^>\n]\son[a-z]+\s='); de verplichte \s laat de solidusvariant door.

Afbakening

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

Gevonden bij audit van commit d439638c6b.

## Kwetsbaarheid De fail-closed MarkdownSafetyScanner herkent inline eventhandlers alleen wanneer vóór on...= een whitespace staat. HTML-tokenisatie accepteert echter ook een onverwachte solidus vóór een attribuutnaam. Daardoor passeert bijvoorbeeld <svg/onload=alert(1)> de ingangsscan, terwijl het als element met eventhandler kan worden geïnterpreteerd. Export-time DOMPurify/CSP blijft defense-in-depth, maar de expliciete belofte dat uitvoerbare inhoud bij openen wordt geweigerd is hiermee omzeilbaar en andere consumers kunnen niet op de gate vertrouwen. ## Reproductie 1. Roep MarkdownSafetyScanner.scan aan met <svg/onload=alert(1)>. 2. Observeer dat geen scriptExecution-finding wordt teruggegeven. 3. Vergelijk met <svg onload=alert(1)>, dat wel wordt gevonden. ## Verwacht De scanner normaliseert/parset tagattributen robuust of herkent alle HTML-separators die tot een on...-attribuut kunnen leiden. Regressietests omvatten solidus- en vergelijkbare tokenizer-randgevallen. ## Technische oorzaak lib/services/markdown_safety.dart gebruikt voor inline handlers RegExp(r'<[a-z][^>\n]*\son[a-z]+\s*='); de verplichte \s laat de solidusvariant door. ## 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#1691
No description provided.