Security: in-memory Markdown omzeilt de 32 MiB-cap met multibyte UTF-8 #1693
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#1693
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?
Kwetsbaarheid
De groottepoort voor content die al als String wordt aangeleverd vergelijkt het aantal UTF-16-code-units met de bytecap. Een string kan minder dan 32 MiB code-units maar veel meer dan 32 MiB UTF-8-bytes bevatten, bijvoorbeeld door veel drie- of vierbyte-tekens. Zo accepteert openDeckDetailed/openDocumentDetailed invoer die de equivalente on-disk bytecap zou weigeren en voert daarop vervolgens scanners en parsers uit.
Dit vergroot het DoS-oppervlak voor web-, connector- en andere in-memory openpaden.
Reproductie
Verwacht
Dezelfde 32 MiB-grens geldt voor de werkelijke UTF-8-byteomvang van on-disk én aangeleverde content, bij voorkeur zonder eerst onbeperkt extra geheugen te alloceren.
Technische oorzaak
lib/services/file/file_service_open.dart:_providedContentOverCap retourneert direct false wanneer content.length <= maxDeckMarkdownBytes. De comment die code-unitlengte equivalent noemt is in deze richting onjuist.
Afbakening
Openbare plaatsing is door de opdrachtgever/repositorybeheerder expliciet geautoriseerd voor directe afhandeling.
Gevonden bij audit van commit
d439638c6b.