XMPP: logWarning logt volledige stanza XML en decoded JSON — privacy-lek van JIDs, device-ids en ciphertext #1431
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#1431
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/utils/log.dartstuurt logberichten naar dedart:developerlogging stream (DevTools/VM service). Hoewel release builds stil zijn, is in debug builds (ontwikkelaars, testers, anyone met DevTools verbonden) de volledige log zichtbaar. MeerderelogWarning-aanroepen in de XMPP-laag loggen gevoelige data:Kritiek: volledige stanza XML
lib/xmpp/companion_demux.dartregel 80:Logt de volledige stanza XML bij een onbekende namespace. Dit bevat:
from/toJIDs (room@conf/nick — wie is er in de kamer)Een onbekende namespace is precies het scenario waar een vijandige occupant een nep-namespace stuurt om de demux te triggeren — de aanvaller kan de log lezen als hij DevTools-toegang heeft (bijv. een ontwikkelaar die de app test met een vijandige deelnemer).
lib/xmpp/xmpp_transport.dartregel 498 + 302:Als een stanza geen
idheeft (geldig voor message/presence), wordt de volledige XML in de key gestopt, die bij deferred-expiry wordt gelogd (regel 302).Gemiddeld: decoded JSON (sealed envelope content)
lib/xmpp/xmpp_presence_beacon.dartregel 134:logWarning('xmpp.presence.notObject', decoded)— logt de decoded JSON (sealed envelope met ciphertext)lib/xmpp/xmpp_chat.dartregel 167:logWarning('xmpp.chat.notObject', decoded)— zelfdelib/xmpp/xmpp_chat.dartregel 172:logWarning('xmpp.chat.noSealed', decoded)— zelfdeDit logt ciphertext en metadata (senderDevice, epoch, nonce) bij een parse-fout. Hoewel ciphertext zelf niet leesbaar is, zijn de metadata (wie stuurt wat, in welke epoch) dat wel.
Trust boundary
Applicatie → Log-output (DevTools/VM service). In debug builds zichtbaar voor iedereen met DevTools-toegang.
Impact
Oplossingsrichting
stanza.toXmlString(). Vervang door een veilige representatie:stanza.kind.name+stanza.id+stanza.from(afgekapt). Bij geenid, gebruik een hash of een counter, niet de volledige XML.room@conf/n***) en device-ids hasht (bijv.dev-abc123…)._stanzaKey-helper (xmpp_transport.dart regel 498) moet nooitstanza.toXmlString()gebruiken als fallback — gebruik een hash van de XML of een sequence-nummer.Locatie
lib/xmpp/companion_demux.dartregel 80 (kritiek)lib/xmpp/xmpp_transport.dartregel 498 (indirect via_stanzaKey), regel 302 (logt de key)lib/xmpp/xmpp_presence_beacon.dartregel 134lib/xmpp/xmpp_chat.dartregels 167, 172lib/utils/log.dart(geen redaction)Severity
MEDIUM — privacy-lek van metadata in debug builds; een vijandige occupant kan het triggeren.