XMPP: geen rate-limit op inbound ops — vijandige autoriteit kan deck en MUC overstromen #1433
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#1433
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
lib/collab/collab_session.dart— de_onRemoteOp-handler (regels 144–155) accepteert elke op die de transport binnenkomt en emit hem op_deckChanges. Er is geen rate-limit of cap op het aantal ops per tijdseenheid.lib/xmpp/xmpp_transport.dart— de_emit-methode (regels 353–362) emit elke geopende op op_opszonder snelheidsbegrenzing. De_maxDeferred = 256cap beperkt alleen stanzas die niet direct geopend kunnen worden — een vijandige autoriteit met de epoch-sleutel stuurt ops die direct geopend worden en onbegrensd doorstromen.Wat er gebeurt
Een vijandige autoriteit (of een gecompromitteerde autoriteit-sessie) stuurt duizenden ops per seconde. Elke op:
<message type=groupchat>op de MUC_opsen verwerkt doorCollabSession._onRemoteOpapplyOp)_deckChanges(wat de UI triggert om te herrenderen)De follower verwerkt elke op, muteert het deck, en herrendert de UI — duizenden keren per seconde. De UI bevriest, het geheugen groeit (elke op alloceert een nieuw Deck), en de MUC wordt overstroomd.
Trust boundary
MUC (companion room) → Applicatie (op-verwerking). De autoriteit is een vertrouwde partij, maar een gecompromitteerde autoriteit-sessie of een slecht geschreven autoriteit kan dit triggeren.
Impact
Oplossingsrichting
_deckChanges— als de UI niet bij kan houden, coalesceer of dropp tussentijdse states.Locatie
lib/collab/collab_session.dartregels 144–155 (_onRemoteOp— geen rate-limit)lib/xmpp/xmpp_transport.dartregels 353–362 (_emit— geen rate-limit), 170–171 (_maxDeferred— beperkt alleen niet-openbare stanzas)Severity
MEDIUM — vereist een gecompromitteerde autoriteit, maar de impact (UI-bevriezing, geheugen-exhaustie) is volledig.