XMPP: geen input-validatie in XmppSettings en test-connection dialoog — ongeldige input bereikt de connectie #1432
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#1432
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
Twee aanverwante tekortkomingen aan de trust-grens waar gebruikersinput de XMPP-stack bereikt.
1. XmppSettings is een pure data-klasse zonder validatie
lib/models/xmpp_settings.dart— de constructor (regels 13–19) accepteert elke waarde zonder checks:wss://-URI is. Deendpointgetter (regel 44–48) retourneertnullbij een onparseerbare URI, maar dat wordt pas inopenXmppFrameTransportgecontroleerd (regel 20–22) — de gebruiker ziet dan een cryptischeXmppConnectException.serverUrlgeen geldige URI is endomainOverrideleeg is, retourneert dedomaingetter (regel 62–67) een lege string. Een lege domain wordt naar de XMPP-server gestuurd in de<open to="">-frame, wat de server weigert met een onduidelijke fout.localpartgetter (regel 54–57) doet geen SCRAM-escaping of validatie. De SASL-laag (xmpp_sasl.dartregel 152–153) doet de escaping wel (=→=3D,,→=2C), maar als de localpart karakters bevat die niet in SASL-name mogen (bijv. null-bytes), kan dat onverwacht gedrag geven.NetGuard.pinnedCertCheck, die waarschijnlijk faalt met een cryptische fout.2. De test-connection dialoog stuurt ruwe input direct door
lib/widgets/dialogs/xmpp_test_connection_dialog.dart— de_test-methode (regels 150–169) construeertXmppSettingsmet ongetrimde/ongevalideerde input:Er is:
openXmppFrameTransport)companionRoomJid)De gebruiker ziet dan een van de
XmppSessionFailure-codes, maar de mapping naar een begrijpelijke foutmelding ontbreekt voor input-fouten (de failure-codes zijn ontworpen voor server-fouten, niet voor "je hebt geen URL ingevuld").Trust boundary
Gebruikersinput → Applicatie (XmppSettings → XMPP-stack). Dit is precies de trust-grens die de security-architect-skill noemt: "Welke invoer wordt nu vertrouwd die dat eerder niet was?"
Impact
<open to="">-frame kan de server in een ondefinieerbare staat brengen.pinnedCertSha256kan de certificaat-pinning onbedoeld uitschakelen (afhankelijk van hoeNetGuard.pinnedCertCheckmet ongeldige input omgaat).Oplossingsrichting
validate()-methode toe aanXmppSettingsdie eenXmppSettingsValidationError-enum retourneert (of null bij geldig). Check: niet-lege server-URL, geldigewss://-URI, niet-lege domain, geldige JID-indeling (localpart@domain), geldige hex voorpinnedCertSha256._liveConnectTest: alssettings.validate()een fout retourneert, toon een gelokaliseerde foutmelding en ga niet naar de connectie.XmppSettings.fromJid(String jid, String serverUrl)factory die de JID parseert en de domain afleidt, in plaats van de getters die late parsing doen.Locatie
lib/models/xmpp_settings.dartregels 13–19 (constructor), 44–48 (endpoint), 54–57 (localpart), 62–67 (domain)lib/widgets/dialogs/xmpp_test_connection_dialog.dartregels 150–169 (_test-methode)Severity
MEDIUM — ongeldige input bereikt de stack; cryptische fouten in plaats van gelokaliseerde validatie.