XMPP: MUC-presence zonder resource/nick wordt geaccepteerd met lege string als occupant #1426
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#1426
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_muc.dart—_onStanza(regel 169) haalt de occupant-nick uit defrom-JID via_resourceOf(from). Als defromgeen slash bevat (geen resource), retourneert_resourceOfeen lege string (regel 291–293):Deze lege string wordt gebruikt als key in
_occupants[occNick](regel 215) en alsnickin deMucOccupant(regel 216). Een presence-stanza metfrom = "room@conf"(zonder/nick) creëert een ghost-occupant met nick"".Wat er gebeurt
Een buggy of vijandige server stuurt een presence-stanza met
from = "room@conf"(geen resource). De code:_bareJid(from) == roomJidis true, regel 168)occNick = ""(regel 169)isSelf = codes.contains('110') || occNick == nick(regel 189) — als onze eigen nick toevallig""is (onwaarschijnlijk maar niet onmogelijk), wordt dit als self-presence behandeld en de join voltooid""wordt aan de roster toegevoegd (regel 215)Trust boundary
MUC-server → Applicatie (presence-parser). Een buggy of vijandige server stuurt presence zonder resource.
Impact
occNick == nicken onze nick is leeg (edge-case), kan de join incorrect voltooid worden._maxOccupants-cap vullen met een entry die nooit wordt verwijderd (eenunavailable-presence voor""verwijdert de entry, maar een vijandige server stuurt die niet).Oplossingsrichting
Dropp presence-stanzas zonder resource vóór verwerking. Voeg na regel 168 een check toe:
Of specifieker:
if (occNick.isEmpty) return;na regel 169. Dit weigert presence zonder nick, wat consistent is met XEP-0045 (een occupant-JID moet een resource hebben).Locatie
lib/xmpp/xmpp_muc.dartregel 169 (_resourceOf), 189 (isSelf-check), 215 (_occupants[occNick]), 291–293 (_resourceOf-helper)Severity
LOW — een ghost-occupant is zichtbaar maar niet schadelijk; de edge-case met lege self-nick is onwaarschijnlijk.