XMPP: presence-_pending map onbegrensd — geheugen-DoS via nep-afzenders #1413
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#1413
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/xmpp/xmpp_presence_beacon.dart— de_pending-map (regel 85) is eenMap<String, SealedEnvelope>zonder cap, gekoppeld opsenderDevice.handlePresence(regels 128–145) voegt elke inbound<pos>-stanza toe aan_pendingonder hetsenderDeviceuit de verzegeling. Als de afzender onbekend is in de directory (directory.resolveretourneertnull), blijft de entry in_pendingstaan —_tryOpenretourneert vroegtijdig (regel 160) zonder de entry te verwijderen.Wat er gebeurt
Een vijandige server (of een occupant die groupchat-messages stuurt met een verzonnen
senderDevicein de verzegeling) kan de_pending-map onbegrensd laten groeien. Elke uniekesenderDevicevoegt een entry toe die nooit wordt verwijderd (omdatdirectory.resolvenull retourneert voor een onbekend device). De map groeit tot het geheugen op is.In tegenstelling tot het transport (
_maxDeferred = 256) en de MUC (_maxOccupants = 500) heeft de presence-beacon geen cap op_pending.Trust boundary
MUC (companion room) → Applicatie (presence-buffer). Een occupant kan stanzas sturen met een willekeurig
senderDevicein de verzegeling.Impact
Geheugen-exhaustie door een stroom stanzas met unieke nep-
senderDevice-waarden. De aanval is stil — geen foutmelding, gewoon groeiend geheugengebruik.Oplossingsrichting
_pendingmet een cap (bijv. 256 of gelijk aanpinStoreCap). Bij overflow verdrijf een willekeurige of oudste entry._pending-entries — een presence die na NretryPending-ronden nog niet openbaar is, wordt fail-closed gedropt.Locatie
lib/xmpp/xmpp_presence_beacon.dartregels 84–85 (_pending-declaratie), 128–145 (handlePresence), 150–154 (retryPending), 156–182 (_tryOpen)Severity
MEDIUM — geheugen-DoS, reëel bij een vijandige server of occupant.